Better removal of blocks around players
This commit is contained in:
parent
a093045fdd
commit
9af82a8ba8
1 changed files with 31 additions and 24 deletions
51
window.c
51
window.c
|
@ -156,7 +156,6 @@ void init(void) {
|
||||||
_grilleH = _grilleW;
|
_grilleH = _grilleW;
|
||||||
|
|
||||||
/* Placement des joueurs */
|
/* Placement des joueurs */
|
||||||
// TODO... les faires relativement éloignes l'un de l'autre
|
|
||||||
int coefEloignement = _grilleW * 1.05;
|
int coefEloignement = _grilleW * 1.05;
|
||||||
|
|
||||||
/* Joueur A */
|
/* Joueur A */
|
||||||
|
@ -167,7 +166,7 @@ void init(void) {
|
||||||
_joueurB.x -= coefEloignement;
|
_joueurB.x -= coefEloignement;
|
||||||
_joueurB.z -= coefEloignement;
|
_joueurB.z -= coefEloignement;
|
||||||
|
|
||||||
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");
|
||||||
sortie();
|
sortie();
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -177,23 +176,23 @@ void init(void) {
|
||||||
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++) {
|
||||||
int _case = i * _grilleH + j;
|
int _case = i * _grilleH + j;
|
||||||
if (i == 0) { // mur en haut
|
if(i == 0) { // mur en haut
|
||||||
_plateau[_case] = 1;
|
_plateau[_case] = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (i == (_grilleH - 1)) { // mur en bas
|
if(i == (_grilleH - 1)) { // mur en bas
|
||||||
_plateau[_case] = 1;
|
_plateau[_case] = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (j == 0) { // mur a gauche
|
if(j == 0) { // mur a gauche
|
||||||
_plateau[_case] = 1;
|
_plateau[_case] = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (j == (_grilleW - 1)) { // mur a droite
|
if(j == (_grilleW - 1)) { // mur a droite
|
||||||
_plateau[_case] = 1;
|
_plateau[_case] = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ((j % 2) == 0 && (i % 2) == 0) { // mur à l'intérieur
|
if((j % 2) == 0 && (i % 2) == 0) { // mur à l'intérieur
|
||||||
_plateau[_case] = 1;
|
_plateau[_case] = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -215,25 +214,33 @@ void init(void) {
|
||||||
* D x E
|
* D x E
|
||||||
* F G H
|
* F G H
|
||||||
* avec A B C D E F G H des positions
|
* avec A B C D E F G H des positions
|
||||||
* et x le joueur */
|
* et x le joueur Attention au bordures !
|
||||||
|
|
||||||
int caseJoueurA = round((_joueurA.z + _cubeSize * _grilleH / 2) / _cubeSize) * _grilleH + round((_joueurA.x + _cubeSize * _grilleW / 2) / _cubeSize);
|
|
||||||
int caseJoueurB = round((_joueurB.z + _cubeSize * _grilleH / 2) / _cubeSize) * _grilleH + round((_joueurB.x + _cubeSize * _grilleW / 2) / _cubeSize);
|
|
||||||
for(int i = 0; i <= 2; i++) { /* Attention au bordures !
|
|
||||||
* On les fait spawn loin des bordures
|
* On les fait spawn loin des bordures
|
||||||
* pour éviter tout problèmes. */
|
* pour éviter tout problèmes. */
|
||||||
|
int caseJoueurA = round((_joueurA.z + _cubeSize * _grilleH / 2) / _cubeSize) * _grilleH + round((_joueurA.x + _cubeSize * _grilleW / 2) / _cubeSize);
|
||||||
|
int caseJoueurB = round((_joueurB.z + _cubeSize * _grilleH / 2) / _cubeSize) * _grilleH + round((_joueurB.x + _cubeSize * _grilleW / 2) / _cubeSize);
|
||||||
|
|
||||||
/* Joueur A */
|
/* Joueur A */
|
||||||
_plateau[caseJoueurA - i] = 0; // D
|
_plateau[caseJoueurA] = 2; // x (facultatif)
|
||||||
_plateau[caseJoueurA + i] = 0; // E
|
_plateau[caseJoueurA - _grilleW - 1] = 0; // A
|
||||||
_plateau[caseJoueurA - _grilleW - i] = 0; // B
|
_plateau[caseJoueurA - _grilleW] = 0; // B
|
||||||
_plateau[caseJoueurA + _grilleW + i] = 0; // G
|
_plateau[caseJoueurA - _grilleW + 1] = 0; // C
|
||||||
|
_plateau[caseJoueurA - 1] = 0; // D
|
||||||
|
_plateau[caseJoueurA + 1] = 0; // E
|
||||||
|
_plateau[caseJoueurA + _grilleW - 1] = 0; // F
|
||||||
|
_plateau[caseJoueurA + _grilleW] = 0; // G
|
||||||
|
_plateau[caseJoueurA + _grilleW + 1] = 0; // H
|
||||||
|
|
||||||
/* Joueur B */
|
/* Joueur B */
|
||||||
_plateau[caseJoueurB - i] = 0; // D
|
_plateau[caseJoueurB] = 3; // x (facultatif)
|
||||||
_plateau[caseJoueurB + i] = 0; // E
|
_plateau[caseJoueurB - _grilleW - 1] = 0; // A
|
||||||
_plateau[caseJoueurB - _grilleW - i] = 0; // B
|
_plateau[caseJoueurB - _grilleW] = 0; // B
|
||||||
_plateau[caseJoueurB + _grilleW + i] = 0; // G
|
_plateau[caseJoueurB - _grilleW + 1] = 0; // C
|
||||||
}
|
_plateau[caseJoueurB - 1] = 0; // D
|
||||||
|
_plateau[caseJoueurB + 1] = 0; // E
|
||||||
|
_plateau[caseJoueurB + _grilleW - 1] = 0; // F
|
||||||
|
_plateau[caseJoueurB + _grilleW] = 0; // G
|
||||||
|
_plateau[caseJoueurB + _grilleW + 1] = 0; // H
|
||||||
|
|
||||||
/* Mets en place la fonction à appeler en cas de sortie */
|
/* Mets en place la fonction à appeler en cas de sortie */
|
||||||
atexit(sortie);
|
atexit(sortie);
|
||||||
|
@ -356,7 +363,7 @@ void draw(void) {
|
||||||
vec4 couleurPlateau = {0.2, 0.2, 0.2, 1}, /* Gris */
|
vec4 couleurPlateau = {0.2, 0.2, 0.2, 1}, /* Gris */
|
||||||
couleurJoueurA = {0.15, 0.5, 0.15, 1}, /* Vert */
|
couleurJoueurA = {0.15, 0.5, 0.15, 1}, /* Vert */
|
||||||
couleurJoueurB = {0.2, 0.2, 0.7, 1}, /* Bleu */
|
couleurJoueurB = {0.2, 0.2, 0.7, 1}, /* Bleu */
|
||||||
couleurBois = {0.6, 0.3, 0, 0}; /* Marron */
|
couleurBois = {0.6, 0.3, 0, 1}; /* Marron */
|
||||||
|
|
||||||
float model_view_matrix[16], projection_matrix[16], nmv[16];
|
float model_view_matrix[16], projection_matrix[16], nmv[16];
|
||||||
|
|
||||||
|
|
Reference in a new issue