#include #include #include #include #include "jeu.h" #include "jeu_humain.h" void jouerModeHumain(struct EtatJeu *etatJeu) { while (1) { if (SourisCliquee()) { if (etatJeu->phase == 0) { gererPlacementInitial(etatJeu); } else { gererTourJoueur(etatJeu); } if (etatJeu->phase > 0 && !peutDeplacer(*etatJeu, etatJeu->tourJoueur)) { afficherVictoire(etatJeu->tourJoueur == 1 ? 2 : 1); while (!SourisCliquee()) { usleep(100000); } break; } } usleep(20000); } } void gererPlacementInitial(struct EtatJeu *etatJeu) { int x, y, i, j; int largeurFenetre = 800; int hauteurFenetre = 600; int marge = 50; int tailleCase; int startX, startY; x = _X; y = _Y; tailleCase = (largeurFenetre - 2 * marge) / etatJeu->tailleGrille; if (tailleCase * etatJeu->tailleGrille > (hauteurFenetre - 2 * marge)) { tailleCase = (hauteurFenetre - 2 * marge) / etatJeu->tailleGrille; } startX = (largeurFenetre - (tailleCase * etatJeu->tailleGrille)) / 2; startY = (hauteurFenetre - (tailleCase * etatJeu->tailleGrille)) / 2; x -= startX; y -= startY; i = y / tailleCase; j = x / tailleCase; if (i >= 0 && i < etatJeu->tailleGrille && j >= 0 && j < etatJeu->tailleGrille && etatJeu->grille[i][j] == 0) { etatJeu->grille[i][j] = etatJeu->tourJoueur; if (etatJeu->tourJoueur == 1) { etatJeu->joueur1.x = j; etatJeu->joueur1.y = i; } else { etatJeu->joueur2.x = j; etatJeu->joueur2.y = i; } if (etatJeu->tourJoueur == 2) { etatJeu->phase = 1; etatJeu->tourJoueur = 1; } else { etatJeu->tourJoueur = 2; } dessinerGrille(*etatJeu); } } void gererTourJoueur(struct EtatJeu *etatJeu) { int x, y, i, j; int largeurFenetre = 800; int hauteurFenetre = 600; int marge = 50; int tailleCase; int startX, startY; struct Position posActuelle; struct Position posCliquee; x = _X; y = _Y; tailleCase = (largeurFenetre - 2 * marge) / etatJeu->tailleGrille; if (tailleCase * etatJeu->tailleGrille > (hauteurFenetre - 2 * marge)) { tailleCase = (hauteurFenetre - 2 * marge) / etatJeu->tailleGrille; } startX = (largeurFenetre - (tailleCase * etatJeu->tailleGrille)) / 2; startY = (hauteurFenetre - (tailleCase * etatJeu->tailleGrille)) / 2; x -= startX; y -= startY; i = y / tailleCase; j = x / tailleCase; posActuelle = etatJeu->tourJoueur == 1 ? etatJeu->joueur1 : etatJeu->joueur2; posCliquee.x = j; posCliquee.y = i; if (i >= 0 && i < etatJeu->tailleGrille && j >= 0 && j < etatJeu->tailleGrille) { if (etatJeu->phase == 1) { if (etatJeu->grille[i][j] == 0 && estCaseAdjacente(posActuelle, posCliquee)) { etatJeu->grille[posActuelle.y][posActuelle.x] = 0; etatJeu->grille[i][j] = etatJeu->tourJoueur; if (etatJeu->tourJoueur == 1) { etatJeu->joueur1.x = j; etatJeu->joueur1.y = i; } else { etatJeu->joueur2.x = j; etatJeu->joueur2.y = i; } etatJeu->phase = 2; dessinerGrille(*etatJeu); } } else if (etatJeu->phase == 2) { if (etatJeu->grille[i][j] == 0) { etatJeu->grille[i][j] = 3; etatJeu->phase = 1; etatJeu->tourJoueur = etatJeu->tourJoueur == 1 ? 2 : 1; dessinerGrille(*etatJeu); } } } }