Changes
- Collisions system - Player speed - Spawn system
This commit is contained in:
parent
2f0c65ec19
commit
78a8012638
1 changed files with 75 additions and 30 deletions
105
window.c
105
window.c
|
@ -158,15 +158,15 @@ void init(void) {
|
||||||
_grilleH = _grilleW;
|
_grilleH = _grilleW;
|
||||||
|
|
||||||
/* Placement des joueurs */
|
/* Placement des joueurs */
|
||||||
int coefEloignement = _grilleW * 1.05;
|
|
||||||
|
|
||||||
/* Joueur A */
|
/* Joueur A */
|
||||||
_joueurA.x += coefEloignement;
|
int caseA = (_grilleW * _grilleH) - (_grilleW * 2) - 3; // MAX - Wx2 - 3
|
||||||
_joueurA.z += coefEloignement;
|
_joueurA.x = (caseA / _grilleH) * 1.5;
|
||||||
|
_joueurA.z = (caseA / _grilleW) * 1.5;
|
||||||
|
|
||||||
/* Joueur B */
|
/* Joueur B */
|
||||||
_joueurB.x -= coefEloignement;
|
int caseB = (_grilleW * 2) + 3; // Wx2 + 3
|
||||||
_joueurB.z -= coefEloignement;
|
_joueurB.x = -(caseB / _grilleH) * 12;
|
||||||
|
_joueurB.z = -(caseB / _grilleW) * 12;
|
||||||
|
|
||||||
if((_plateau = malloc((_grilleW * _grilleH) * sizeof(int))) == NULL) {
|
if((_plateau = malloc((_grilleW * _grilleH) * sizeof(int))) == NULL) {
|
||||||
printf("Impossible d'allouer de la mémoire supplémentaire pour générer le plateau.\n");
|
printf("Impossible d'allouer de la mémoire supplémentaire pour générer le plateau.\n");
|
||||||
|
@ -258,7 +258,7 @@ void idle(void) {
|
||||||
/* pour le frame d'après, mets à-jour t0 */
|
/* pour le frame d'après, mets à-jour t0 */
|
||||||
t0 = t;
|
t0 = t;
|
||||||
|
|
||||||
float vitesse = 10.f; // vitesse des joueurs
|
float vitesse = 9.f; // vitesse des joueurs
|
||||||
|
|
||||||
/* Calcul du décalage */
|
/* Calcul du décalage */
|
||||||
float decalageAutorisee = .2f; // décalage autorisé, modifier cette valeur si nécessaire
|
float decalageAutorisee = .2f; // décalage autorisé, modifier cette valeur si nécessaire
|
||||||
|
@ -281,22 +281,48 @@ void idle(void) {
|
||||||
float decalageLargeurA = zA - floor(zA);
|
float decalageLargeurA = zA - floor(zA);
|
||||||
float decalageLongueurA = xA - floor(xA);
|
float decalageLongueurA = xA - floor(xA);
|
||||||
|
|
||||||
/* Déplacement */
|
/* Déplacement
|
||||||
|
* Pour la vérification du "si mur"
|
||||||
|
* Dans ce cas de figure :
|
||||||
|
* A B C
|
||||||
|
* D x E
|
||||||
|
* F G H
|
||||||
|
* Pour aller à droite on regarde si C et H ne sont pas des murs
|
||||||
|
* On part de la coordonnées de droite car coorDroite = E. */
|
||||||
if(_vkeyboard[VK_RIGHT])
|
if(_vkeyboard[VK_RIGHT])
|
||||||
if((_plateau[coorDroiteA] == 0 || _plateau[coorDroiteA] == 2) && (decalageLargeurA < decalageGB || decalageLargeurA > decalageDH)) // collision à droite du plateau
|
/* Collision à droite du joueur */
|
||||||
_joueurA.x += vitesse * dt;
|
if(_plateau[coorDroiteA] == 0 || _plateau[coorDroiteA] == 2) { // si case vide ou joueur
|
||||||
|
if(_plateau[coorDroiteA + _grilleW + 1] == 1 || _plateau[coorDroiteA - _grilleW + 1] == 1) { // si mur
|
||||||
|
if(decalageLargeurA < decalageGB || decalageLargeurA > decalageDH) _joueurA.x += vitesse * dt; // on s'assure d'être aligné
|
||||||
|
} else _joueurA.x += vitesse * dt; // si pas de murs on avance
|
||||||
|
}
|
||||||
|
|
||||||
if(_vkeyboard[VK_UP])
|
if(_vkeyboard[VK_UP])
|
||||||
if((_plateau[coorHautA] == 0 || _plateau[coorHautA] == 2) && (decalageLongueurA < decalageGB || decalageLongueurA > decalageDH)) // collision en haut du plateau
|
/* Collision en haut du joueur */
|
||||||
_joueurA.z -= vitesse * dt;
|
if(_plateau[coorHautA] == 0 || _plateau[coorHautA] == 2) { // si case vide ou joueur
|
||||||
|
if(_plateau[coorHautA - _grilleW - 1] == 1 || _plateau[coorHautA - _grilleW + 1] == 1) { // si mur
|
||||||
|
if(decalageLongueurA < decalageGB || decalageLongueurA > decalageDH) _joueurA.z -= vitesse * dt; // on s'assure d'être aligné
|
||||||
|
} else _joueurA.z -= vitesse * dt; // si pas de murs on avance
|
||||||
|
}
|
||||||
|
|
||||||
if(_vkeyboard[VK_LEFT])
|
if(_vkeyboard[VK_LEFT])
|
||||||
if((_plateau[coorGaucheA] == 0 || _plateau[coorGaucheA] == 2) && (decalageLargeurA < decalageGB || decalageLargeurA > decalageDH)) // collision à gauche du plateau
|
/* Collision à gauche du joueur */
|
||||||
_joueurA.x -= vitesse * dt;
|
if(_plateau[coorGaucheA] == 0 || _plateau[coorGaucheA] == 2) { // si case vide ou joueur
|
||||||
|
if(_plateau[coorGaucheA - _grilleW - 1] == 1 || _plateau[coorGaucheA + _grilleW - 1] == 1) { // si mur
|
||||||
|
if(decalageLargeurA < decalageGB || decalageLargeurA > decalageDH) _joueurA.x -= vitesse * dt; // on s'assure d'être aligné
|
||||||
|
} else _joueurA.x -= vitesse * dt; // si pas de murs on avance
|
||||||
|
}
|
||||||
|
|
||||||
if(_vkeyboard[VK_DOWN])
|
if(_vkeyboard[VK_DOWN])
|
||||||
if((_plateau[coorBasA] == 0 || _plateau[coorBasA] == 2) && (decalageLongueurA < decalageGB || decalageLongueurA > decalageDH)) // collision en bas du plateau
|
/* Collision en bas du joueur */
|
||||||
_joueurA.z += vitesse * dt;
|
if(_plateau[coorBasA] == 0 || _plateau[coorBasA] == 2) { // si case vide ou joueur
|
||||||
|
if(_plateau[coorBasA + _grilleW - 1] == 1 || _plateau[coorBasA + _grilleW + 1] == 1) { // si mur
|
||||||
|
if(decalageLongueurA < decalageGB || decalageLongueurA > decalageDH) _joueurA.z += vitesse * dt; // on s'assure d'être aligné
|
||||||
|
} else _joueurA.z += vitesse * dt; // si pas de murs on avance
|
||||||
|
}
|
||||||
if(_vkeyboard[VK_RETURN]) {
|
if(_vkeyboard[VK_RETURN]) {
|
||||||
_vkeyboard[VK_RETURN] = 0;
|
_vkeyboard[VK_RETURN] = 0; // on évite de spam la pose de bombe
|
||||||
printf("Joueur A pose une bombe");
|
printf("Joueur A pose une bombe!\n"); // temp
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Affichage Debug */
|
/* Affichage Debug */
|
||||||
|
@ -334,20 +360,39 @@ void idle(void) {
|
||||||
|
|
||||||
/* Déplacement */
|
/* Déplacement */
|
||||||
if(_vkeyboard[VK_d])
|
if(_vkeyboard[VK_d])
|
||||||
if((_plateau[coorDroiteB] == 0 || _plateau[coorDroiteB] == 3) && (decalageLargeurB < decalageGB || decalageLargeurB > decalageDH)) // collision à droite du plateau
|
/* Collision à droite du joueur */
|
||||||
_joueurB.x += vitesse * dt;
|
if(_plateau[coorDroiteB] == 0 || _plateau[coorDroiteB] == 2) { // si case vide ou joueur
|
||||||
if(_vkeyboard[VK_z])
|
if(_plateau[coorDroiteB + _grilleW + 1] == 1 || _plateau[coorDroiteB - _grilleW + 1] == 1) { // si mur
|
||||||
if((_plateau[coorHautB] == 0 || _plateau[coorHautB] == 3) && (decalageLongueurB < decalageGB || decalageLongueurB > decalageDH)) // collision en haut du plateau
|
if(decalageLargeurB < decalageGB || decalageLargeurB > decalageDH) _joueurB.x += vitesse * dt; // on s'assure d'être aligné
|
||||||
_joueurB.z -= vitesse * dt;
|
} else _joueurB.x += vitesse * dt; // si pas de murs on avance
|
||||||
if(_vkeyboard[VK_q])
|
}
|
||||||
if((_plateau[coorGaucheB] == 0 || _plateau[coorGaucheB] == 3) && (decalageLargeurB < decalageGB || decalageLargeurB > decalageDH)) // collision à gauche du plateau
|
|
||||||
_joueurB.x -= vitesse * dt;
|
|
||||||
if(_vkeyboard[VK_s])
|
if(_vkeyboard[VK_s])
|
||||||
if((_plateau[coorBasB] == 0 || _plateau[coorBasB] == 3) && (decalageLongueurB < decalageGB || decalageLongueurB > decalageDH)) // collision en bas du plateau
|
/* Collision en haut du joueur */
|
||||||
_joueurB.z += vitesse * dt;
|
if(_plateau[coorHautB] == 0 || _plateau[coorHautB] == 2) { // si case vide ou joueur
|
||||||
|
if(_plateau[coorHautB - _grilleW - 1] == 1 || _plateau[coorHautB - _grilleW + 1] == 1) { // si mur
|
||||||
|
if(decalageLongueurB < decalageGB || decalageLongueurB > decalageDH) _joueurB.z -= vitesse * dt; // on s'assure d'être aligné
|
||||||
|
} else _joueurB.z -= vitesse * dt; // si pas de murs on avance
|
||||||
|
}
|
||||||
|
|
||||||
|
if(_vkeyboard[VK_q])
|
||||||
|
/* Collision à gauche du joueur */
|
||||||
|
if(_plateau[coorGaucheB] == 0 || _plateau[coorGaucheB] == 2) { // si case vide ou joueur
|
||||||
|
if(_plateau[coorGaucheB - _grilleW - 1] == 1 || _plateau[coorGaucheB + _grilleW - 1] == 1) { // si mur
|
||||||
|
if(decalageLargeurB < decalageGB || decalageLargeurB > decalageDH) _joueurB.x -= vitesse * dt; // on s'assure d'être aligné
|
||||||
|
} else _joueurB.x -= vitesse * dt; // si pas de murs on avance
|
||||||
|
}
|
||||||
|
|
||||||
|
if(_vkeyboard[VK_s])
|
||||||
|
/* Collision en bas du joueur */
|
||||||
|
if(_plateau[coorBasB] == 0 || _plateau[coorBasB] == 2) { // si case vide ou joueur
|
||||||
|
if(_plateau[coorBasB + _grilleW - 1] == 1 || _plateau[coorBasB + _grilleW + 1] == 1) { // si mur
|
||||||
|
if(decalageLongueurB < decalageGB || decalageLongueurB > decalageDH) _joueurB.z += vitesse * dt; // on s'assure d'être aligné
|
||||||
|
} else _joueurB.z += vitesse * dt; // si pas de murs on avance
|
||||||
|
}
|
||||||
if(_vkeyboard[VK_SPACE]) {
|
if(_vkeyboard[VK_SPACE]) {
|
||||||
_vkeyboard[VK_SPACE] = 0;
|
_vkeyboard[VK_SPACE] = 0; // on évite de spam la pose de bombe
|
||||||
printf("Joueur B pose une bombe");
|
printf("Joueur B pose une bombe!\n"); // temp
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Affichage Debug */
|
/* Affichage Debug */
|
||||||
|
|
Reference in a new issue