This commit is contained in:
Mylloon 2022-01-02 02:20:09 +01:00
parent 3b6d1fbb38
commit afa5686a68
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -46,7 +46,7 @@ static int _debug = 0;
* 2 (valeur reservée) -> Joueur A (défini automatiquement par le programme) * 2 (valeur reservée) -> Joueur A (défini automatiquement par le programme)
* 3 (valeur reservée) -> Joueur B (défini automatiquement par le programme) * 3 (valeur reservée) -> Joueur B (défini automatiquement par le programme)
* 4 -> Bloc destructible */ * 4 -> Bloc destructible */
static int * _grille = NULL; static int * _plateau = NULL;
/*!\brief Largeur/Nombre de lignes de la grille */ /*!\brief Largeur/Nombre de lignes de la grille */
static int _grilleW; static int _grilleW;
@ -147,50 +147,53 @@ void init(void) {
/* Si _use_vsync != 0, on active la synchronisation verticale */ /* Si _use_vsync != 0, on active la synchronisation verticale */
SDL_GL_SetSwapInterval(_use_vsync); SDL_GL_SetSwapInterval(_use_vsync);
/* Génération du plateau */ /* Génération du plateau
* et placement des joueurs */
srand(time(NULL)); srand(time(NULL));
/* TODO /* Génération des dimensions du plateau */
* Éloigner les spawns des joueurs */
_grilleW = 15 + (rand() % 10); _grilleW = 15 + (rand() % 10);
_grilleH = _grilleW; _grilleH = _grilleW;
if ((_grille = malloc((_grilleW * _grilleH) * sizeof(int))) == NULL) { /* Placement des joueurs */
// TODO... les faires relativement éloignes l'un de l'autre
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");
sortie(); sortie();
exit(1); exit(1);
} }
/* Génération du plateau */
int _curseur = 0; int _curseur = 0;
for(int i = 0; i < _grilleH; i++) for(int i = 0; i < _grilleH; i++)
for(int j = 0; j < _grilleW; j++) { for(int j = 0; j < _grilleW; j++) {
if (i == 0) { // mur en haut if (i == 0) { // mur en haut
_grille[_curseur] = 1; _plateau[_curseur] = 1;
_curseur++; _curseur++;
continue; continue;
} }
if (i == (_grilleH - 1)) { // mur en bas if (i == (_grilleH - 1)) { // mur en bas
_grille[_curseur] = 1; _plateau[_curseur] = 1;
_curseur++; _curseur++;
continue; continue;
} }
if (j == 0) { // mur a gauche if (j == 0) { // mur a gauche
_grille[_curseur] = 1; _plateau[_curseur] = 1;
_curseur++; _curseur++;
continue; continue;
} }
if (j == (_grilleW - 1)) { // mur a droite if (j == (_grilleW - 1)) { // mur a droite
_grille[_curseur] = 1; _plateau[_curseur] = 1;
_curseur++; _curseur++;
continue; continue;
} }
if ((j % 2) == 0 && (i % 2) == 0) { // mur à l'intérieur if ((j % 2) == 0 && (i % 2) == 0) { // mur à l'intérieur
_grille[_curseur] = 1; _plateau[_curseur] = 1;
_curseur++; _curseur++;
continue; continue;
} }
_grille[_curseur] = 0; _plateau[_curseur] = 0;
_curseur++; _curseur++;
} }
@ -205,16 +208,16 @@ void init(void) {
int caseJoueurB = round((_herosB.z + _cubeSize * _grilleH / 2) / _cubeSize) * _grilleH + round((_herosB.x + _cubeSize * _grilleW / 2) / _cubeSize); int caseJoueurB = round((_herosB.z + _cubeSize * _grilleH / 2) / _cubeSize) * _grilleH + round((_herosB.x + _cubeSize * _grilleW / 2) / _cubeSize);
for (int i = 1; i <= 2; i++) { // attention au bordures for (int i = 1; i <= 2; i++) { // attention au bordures
/* Joueur A */ /* Joueur A */
_grille[caseJoueurA - i] = 0; // gauche _plateau[caseJoueurA - i] = 0; // gauche
_grille[caseJoueurA + i] = 0; // droite _plateau[caseJoueurA + i] = 0; // droite
_grille[caseJoueurA - _grilleW - i] = 0; // haut _plateau[caseJoueurA - _grilleW - i] = 0; // haut
_grille[caseJoueurA + _grilleW + i] = 0; // bas _plateau[caseJoueurA + _grilleW + i] = 0; // bas
/* Joueur B */ /* Joueur B */
_grille[caseJoueurB - i] = 0; // gauche _plateau[caseJoueurB - i] = 0; // gauche
_grille[caseJoueurB + i] = 0; // droite _plateau[caseJoueurB + i] = 0; // droite
_grille[caseJoueurB - _grilleW - i] = 0; // haut _plateau[caseJoueurB - _grilleW - i] = 0; // haut
_grille[caseJoueurB + _grilleW + i] = 0; // bas _plateau[caseJoueurB + _grilleW + i] = 0; // bas
} }
/* Mets en place la fonction à appeler en cas de sortie */ /* Mets en place la fonction à appeler en cas de sortie */
@ -256,16 +259,16 @@ void idle(void) {
/* Déplacement */ /* Déplacement */
if(_vkeyboard[VK_RIGHT]) if(_vkeyboard[VK_RIGHT])
if((_grille[coorDroiteA] == 0 || _grille[coorDroiteA] == 2) && (decalageLargeurA < decalageGB || decalageLargeurA > decalageDH)) // collision à droite du plateau if((_plateau[coorDroiteA] == 0 || _plateau[coorDroiteA] == 2) && (decalageLargeurA < decalageGB || decalageLargeurA > decalageDH)) // collision à droite du plateau
_herosA.x += vitesse * dt; _herosA.x += vitesse * dt;
if(_vkeyboard[VK_UP]) if(_vkeyboard[VK_UP])
if((_grille[coorHautA] == 0 || _grille[coorHautA] == 2) && (decalageLongueurA < decalageGB || decalageLongueurA > decalageDH)) // collision en haut du plateau if((_plateau[coorHautA] == 0 || _plateau[coorHautA] == 2) && (decalageLongueurA < decalageGB || decalageLongueurA > decalageDH)) // collision en haut du plateau
_herosA.z -= vitesse * dt; _herosA.z -= vitesse * dt;
if(_vkeyboard[VK_LEFT]) if(_vkeyboard[VK_LEFT])
if((_grille[coorGaucheA] == 0 || _grille[coorGaucheA] == 2) && (decalageLargeurA < decalageGB || decalageLargeurA > decalageDH)) // collision à gauche du plateau if((_plateau[coorGaucheA] == 0 || _plateau[coorGaucheA] == 2) && (decalageLargeurA < decalageGB || decalageLargeurA > decalageDH)) // collision à gauche du plateau
_herosA.x -= vitesse * dt; _herosA.x -= vitesse * dt;
if(_vkeyboard[VK_DOWN]) if(_vkeyboard[VK_DOWN])
if((_grille[coorBasA] == 0 || _grille[coorBasA] == 2) && (decalageLongueurA < decalageGB || decalageLongueurA > decalageDH)) // collision en bas du plateau if((_plateau[coorBasA] == 0 || _plateau[coorBasA] == 2) && (decalageLongueurA < decalageGB || decalageLongueurA > decalageDH)) // collision en bas du plateau
_herosA.z += vitesse * dt; _herosA.z += vitesse * dt;
/* Affichage Debug */ /* Affichage Debug */
@ -279,9 +282,9 @@ void idle(void) {
/* Anti-collision entre joueurs */ /* Anti-collision entre joueurs */
if(_herosA.position != coorJoueurA) { if(_herosA.position != coorJoueurA) {
if(_herosA.position != -1) if(_herosA.position != -1)
_grille[_herosA.position] = 0; _plateau[_herosA.position] = 0;
_herosA.position = coorJoueurA; _herosA.position = coorJoueurA;
_grille[coorJoueurA] = 2; _plateau[coorJoueurA] = 2;
} }
@ -303,16 +306,16 @@ void idle(void) {
/* Déplacement */ /* Déplacement */
if(_vkeyboard[VK_d]) if(_vkeyboard[VK_d])
if((_grille[coorDroiteB] == 0 || _grille[coorDroiteB] == 3) && (decalageLargeurB < decalageGB || decalageLargeurB > decalageDH)) // collision à droite du plateau if((_plateau[coorDroiteB] == 0 || _plateau[coorDroiteB] == 3) && (decalageLargeurB < decalageGB || decalageLargeurB > decalageDH)) // collision à droite du plateau
_herosB.x += vitesse * dt; _herosB.x += vitesse * dt;
if(_vkeyboard[VK_z]) if(_vkeyboard[VK_z])
if((_grille[coorHautB] == 0 || _grille[coorHautB] == 3) && (decalageLongueurB < decalageGB || decalageLongueurB > decalageDH)) // collision en haut du plateau if((_plateau[coorHautB] == 0 || _plateau[coorHautB] == 3) && (decalageLongueurB < decalageGB || decalageLongueurB > decalageDH)) // collision en haut du plateau
_herosB.z -= vitesse * dt; _herosB.z -= vitesse * dt;
if(_vkeyboard[VK_q]) if(_vkeyboard[VK_q])
if((_grille[coorGaucheB] == 0 || _grille[coorGaucheB] == 3) && (decalageLargeurB < decalageGB || decalageLargeurB > decalageDH)) // collision à gauche du plateau if((_plateau[coorGaucheB] == 0 || _plateau[coorGaucheB] == 3) && (decalageLargeurB < decalageGB || decalageLargeurB > decalageDH)) // collision à gauche du plateau
_herosB.x -= vitesse * dt; _herosB.x -= vitesse * dt;
if(_vkeyboard[VK_s]) if(_vkeyboard[VK_s])
if((_grille[coorBasB] == 0 || _grille[coorBasB] == 3) && (decalageLongueurB < decalageGB || decalageLongueurB > decalageDH)) // collision en bas du plateau if((_plateau[coorBasB] == 0 || _plateau[coorBasB] == 3) && (decalageLongueurB < decalageGB || decalageLongueurB > decalageDH)) // collision en bas du plateau
_herosB.z += vitesse * dt; _herosB.z += vitesse * dt;
/* Affichage Debug */ /* Affichage Debug */
@ -327,9 +330,9 @@ void idle(void) {
/* Anti-collision entre joueurs */ /* Anti-collision entre joueurs */
if(_herosB.position != coorJoueurB) { if(_herosB.position != coorJoueurB) {
if(_herosB.position != -1) if(_herosB.position != -1)
_grille[_herosB.position] = 0; _plateau[_herosB.position] = 0;
_herosB.position = coorJoueurB; _herosB.position = coorJoueurB;
_grille[coorJoueurB] = 3; _plateau[coorJoueurB] = 3;
} }
} }
@ -366,7 +369,7 @@ void draw(void) {
for(int i = 0; i < _grilleW; ++i) for(int i = 0; i < _grilleW; ++i)
for(int j = 0; j < _grilleH; ++j) { for(int j = 0; j < _grilleH; ++j) {
/* Bloc simple */ /* Bloc simple */
if(_grille[i * _grilleW + j] == 1) { if(_plateau[i * _grilleW + j] == 1) {
_cube->dcolor = couleurPlateau; _cube->dcolor = couleurPlateau;
/* copie model_view_matrix dans nmv */ /* copie model_view_matrix dans nmv */
memcpy(nmv, model_view_matrix, sizeof(nmv)); memcpy(nmv, model_view_matrix, sizeof(nmv));
@ -377,7 +380,7 @@ void draw(void) {
transform_n_rasterize(_cube, nmv, projection_matrix); transform_n_rasterize(_cube, nmv, projection_matrix);
} }
/* Bloc destructible */ /* Bloc destructible */
if(_grille[i * _grilleW + j] == 4) { if(_plateau[i * _grilleW + j] == 4) {
_cube->dcolor = couleurBois; _cube->dcolor = couleurBois;
/* copie model_view_matrix dans nmv */ /* copie model_view_matrix dans nmv */
memcpy(nmv, model_view_matrix, sizeof(nmv)); memcpy(nmv, model_view_matrix, sizeof(nmv));