From 851d048e182f294a89ae35581fa691d855628b96 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 9 Mar 2016 14:23:00 +0100 Subject: [PATCH] Correction de tous le modele (refactor) + implementation de tous les deplacements (verif) + affichage des erreurs --- Chess/dep/ChessContext.cpp | 166 +++++++++++++++++++++++++++++++++- Chess/dep/ChessContext.h | 18 +++- Chess/dep/Pieces/Cavalier.cpp | 4 - Chess/dep/Pieces/Cavalier.h | 1 - Chess/dep/Pieces/Fou.cpp | 31 ------- Chess/dep/Pieces/Fou.h | 3 - Chess/dep/Pieces/Piece.cpp | 2 - Chess/dep/Pieces/Piece.h | 2 - Chess/dep/Pieces/Pion.cpp | 4 - Chess/dep/Pieces/Pion.h | 1 - Chess/dep/Pieces/Reine.cpp | 4 - Chess/dep/Pieces/Reine.h | 1 - Chess/dep/Pieces/Roi.cpp | 4 - Chess/dep/Pieces/Roi.h | 1 - Chess/dep/Pieces/Tour.cpp | 4 - Chess/dep/Pieces/Tour.h | 1 - Chess/dep/Player.cpp | 6 +- Chess/dep/term.cpp | 14 +++ Chess/dep/term.h | 3 +- Chess/exe | Bin 40178 -> 40889 bytes Chess/main.cpp | 56 ++++++------ Chess/main.h | 1 + Chess/main.o | Bin 69856 -> 74016 bytes 23 files changed, 228 insertions(+), 99 deletions(-) diff --git a/Chess/dep/ChessContext.cpp b/Chess/dep/ChessContext.cpp index 5b60fd0..a525a00 100644 --- a/Chess/dep/ChessContext.cpp +++ b/Chess/dep/ChessContext.cpp @@ -24,18 +24,176 @@ void ChessContext::init(){ /* [2] Renvoie le pion qui est en case (x, y) =========================================================*/ -Player* ChessContext::at(const int x, const int y){ +Piece* ChessContext::at(const int x, const int y){ // On verifie que c'est pas le Player 1 qui l'a Piece *p; p = _p1->at(x, y); if( p != NULL ) - return _p1; + return p; // On verifie que c'est pas le Player 2 qui l'a p = _p2->at(x, y); if( p != NULL ) - return _p2; + return p; return NULL; -} \ No newline at end of file +} + + +/* [3] Verifie si un deplacement est possible +=========================================================*/ +bool ChessContext::checkMove(Piece& p, int x, int y){ + /* (1) On verifie que c'est une piece du joueur courant */ + Player *current = (_turn=='1') ? _p1 : _p2; // Player courant + Player *enemy = (_turn=='1') ? _p2 : _p1; // Player enemi + + // Si c'est pas un pion du courant, on retourne FAUX + if( !current->owns(p) ) + return false; + + + /* (2) On verifie qu'on va pas sur une de nos pieces */ + Piece *pieceAtDest = this->at(x, y); + + // Si on se deplace sur une de nos pieces + if( pieceAtDest != NULL && current->owns(*pieceAtDest) ) + return false; + + + /* (3) Gestion en fonction du type de piece */ + switch( p.gett() ){ + case PION: return this->checkPion(p, x, y); break; + case FOU: return this->checkFou(p, x, y); break; + case TOUR: return this->checkTour(p, x, y); break; + case CAVALIER: return this->checkCavalier(p, x, y); break; + case ROI: return this->checkRoi(p, x, y); break; + case REINE: return this->checkReine(p, x, y); break; + } + + + // On retourne FAUX par defaut + return false; +} + + +/* [4] Renvoie le joueur courant / enemi +=========================================================*/ +Player* ChessContext::getCurrent(){ + return (_turn=='1') ? _p1 : _p2; +} + +Player* ChessContext::getEnemy(){ + return (_turn=='1') ? _p2 : _p1; +} + + + + +/* [5] Verifie le deplacement d'un PION +=========================================================*/ +bool ChessContext::checkPion(Piece& p, int x, int y){ + + int way = _turn=='1' ? -1 : 1; // sens de marche + int baseline = _turn=='1' ? 6 : 1; // position initiale + + // CAS 1 : Deplacement 1 vers avant + bool move1Front = p.getx()==x && p.gety()+way==y; + + // CAS 2 : Deplacement 2 vers avant (si sur ligne depart) + bool move2Front = p.getx()==x && p.gety()+2*way==y && p.gety()==baseline; + + // CAS 3 : Mange un pion adjacent (diagonale && 1 case && enemi) + int xDiff = abs(p.getx()-x); + int yDiff = abs(p.gety()-y); + bool eatEnemy = xDiff == yDiff && xDiff==1 && this->at(x, y) != NULL && this->getEnemy()->owns(*this->at(x, y)); + + return move1Front || move2Front || eatEnemy; + +} + +/* [6] Verifie le deplacement d'un FOU +=========================================================*/ +bool ChessContext::checkFou(Piece& p, int x, int y){ + + // Deplacement diagonal + bool inDiag = abs(p.getx()-x) == abs(p.gety()-y); + + // Si deplacement pas en diagonale, on retourne faux + if( !inDiag ) return false; + + // On verifie que la diagonale est degagee + int xstep = (x-p.getx()) / abs(x-p.getx()); + int ystep = (y-p.gety()) / abs(y-p.gety()); + + for( int i = p.getx()+xstep, j = p.gety()+ystep ; i != x && j != y ; i+=xstep, j+=ystep ) + if( this->at(i, j) != NULL ) return false; + + // Si on a pas retourne faux, on retourne VRAI + return true; + +} + +/* [7] Verifie le deplacement d'une TOUR +=========================================================*/ +bool ChessContext::checkTour(Piece& p, int x, int y){ + + // Deplacement horizontal ou vertical + bool inLine = ( x==p.getx() || y==p.gety() ); + + // On verifie que le chemin est degage + bool moveY = p.getx() == x; + int originMovingAxis = (moveY) ? p.gety() : p.getx(); + int destMovingAxis = (moveY) ? y : x; + + int way = (destMovingAxis-originMovingAxis) / abs(destMovingAxis-originMovingAxis); + + for( int i = originMovingAxis+way ; i != destMovingAxis ; i+=way ){ + if( moveY ) // si on se deplace sur y + if( this->at(x, i) != NULL ) return false; + else // si on se deplace sur x + if( this->at(i, y) != NULL ) return false; + } + + return inLine; + +} + + + +/* [8] Verifie le deplacement d'un CAVALIER +=========================================================*/ +bool ChessContext::checkCavalier(Piece& p, int x, int y){ + + bool horizontalL = abs(x-p.getx()) == 2 && abs(y-p.gety()) == 1; + bool verticalL = abs(x-p.getx()) == 1 && abs(y-p.gety()) == 2; + + return horizontalL || verticalL; + +} + + +/* [9] Verifie le deplacement d'un ROI +=========================================================*/ +bool ChessContext::checkRoi(Piece& p, int x, int y){ + + bool fouMove = this->checkFou(p, x, y); + bool tourMove = this->checkTour(p, x, y); + + bool oneCaseMove = abs(p.getx()-x) + abs(p.gety()-y) == 1; + bool twoCaseMove = abs(p.getx()-x) + abs(p.gety()-y) == 2; + + return tourMove&&oneCaseMove || fouMove&&twoCaseMove; + +} + + +/* [10] Verifie le deplacement d'une REINE +=========================================================*/ +bool ChessContext::checkReine(Piece& p, int x, int y){ + + bool fouMove = this->checkFou(p, x, y); + bool tourMove = this->checkTour(p, x, y); + + return fouMove || tourMove; +} diff --git a/Chess/dep/ChessContext.h b/Chess/dep/ChessContext.h index aeeb6fd..b504d35 100644 --- a/Chess/dep/ChessContext.h +++ b/Chess/dep/ChessContext.h @@ -8,6 +8,7 @@ #include #include #include + #include /* (2) Externes */ #include "term.h" @@ -23,12 +24,27 @@ public: ChessContext(); void init(); - Player* at(const int x, const int y); + Piece* at(const int x, const int y); + bool checkMove(Piece& p, int x, int y); + + // GETTERS + Player* getCurrent(); + Player* getEnemy(); // ATTRIBUTS char _turn; Player *_p1; Player *_p2; + + private: + // FONCTIONS UTILITAIRES + bool checkPion(Piece& p, int x, int y); + bool checkFou(Piece& p, int x, int y); + bool checkTour(Piece& p, int x, int y); + bool checkCavalier(Piece& p, int x, int y); + bool checkRoi(Piece& p, int x, int y); + bool checkReine(Piece& p, int x, int y); + }; /* [n] Inclusion du corps diff --git a/Chess/dep/Pieces/Cavalier.cpp b/Chess/dep/Pieces/Cavalier.cpp index da0cf95..a90deae 100644 --- a/Chess/dep/Pieces/Cavalier.cpp +++ b/Chess/dep/Pieces/Cavalier.cpp @@ -5,10 +5,6 @@ Cavalier::Cavalier(int x, int y) : Piece(CAVALIER, x, y) { } // ABSTRACT -bool Cavalier::can(int x, int y){ - return true; -} - char Cavalier::getchar(){ return 'C'; } diff --git a/Chess/dep/Pieces/Cavalier.h b/Chess/dep/Pieces/Cavalier.h index 59b511a..38a4db4 100644 --- a/Chess/dep/Pieces/Cavalier.h +++ b/Chess/dep/Pieces/Cavalier.h @@ -19,7 +19,6 @@ Cavalier(int x, int y); // ABSTRACT - bool can(int x, int y); char getchar(); }; diff --git a/Chess/dep/Pieces/Fou.cpp b/Chess/dep/Pieces/Fou.cpp index 3655447..2cc3774 100644 --- a/Chess/dep/Pieces/Fou.cpp +++ b/Chess/dep/Pieces/Fou.cpp @@ -5,37 +5,6 @@ Fou::Fou(int x, int y) : Piece(FOU, x, y) { } // ABSTRACT -bool Fou::can(int x, int y){ - bool inDiag = abs( _x-x ) == abs( _y-y ); - - // Si deplacement pas en diagonale, on retourne faux - if( !inDiag ) return false; - - // On verifie que la diagonale est degagee - int xstep = ( x-_x ) / abs( x-_x ); - int ystep = ( y-_y ) / abs( y-_y ); - - return true; -} - - -/*bool Fou::can(ChessContext *c, int x, int y){ - bool inDiag = abs( _x-x ) == abs( _y-y ); - - // Si deplacement pas en diagonale, on retourne faux - if( !inDiag ) return false; - - // On verifie que la diagonale est degagee - int xstep = ( x-_x ) / abs( x-_x ); - int ystep = ( y-_y ) / abs( y-_y ); - - for( int i = _x+xstep, j = _y+ystep ; i != x && j != y ; i+=xstep, j+=ystep ) - if( c->_p1->at(i, j) != NULL ) return false; - - - return true; -}*/ - char Fou::getchar(){ return 'F'; } diff --git a/Chess/dep/Pieces/Fou.h b/Chess/dep/Pieces/Fou.h index 54322b0..698cabd 100644 --- a/Chess/dep/Pieces/Fou.h +++ b/Chess/dep/Pieces/Fou.h @@ -8,7 +8,6 @@ /* (2) Externes */ #include "Piece.h" - class ChessContext; /* (3) Namespace */ using namespace std; @@ -20,8 +19,6 @@ Fou(int x, int y); // ABSTRACT - bool can(int x, int y); - //bool can(ChessContext *c, int x, int y); char getchar(); }; diff --git a/Chess/dep/Pieces/Piece.cpp b/Chess/dep/Pieces/Piece.cpp index 9b93df5..b405305 100644 --- a/Chess/dep/Pieces/Piece.cpp +++ b/Chess/dep/Pieces/Piece.cpp @@ -27,6 +27,4 @@ ostream& operator<<(ostream& o, const Piece& p){ } // ABTRACT -bool Piece::can(int x, int y){ return false; } -bool Piece::can(ChessContext *c, int x, int y){ return false; } char Piece::getchar(){ return '?'; } \ No newline at end of file diff --git a/Chess/dep/Pieces/Piece.h b/Chess/dep/Pieces/Piece.h index dc3a6d5..9f1c1ba 100644 --- a/Chess/dep/Pieces/Piece.h +++ b/Chess/dep/Pieces/Piece.h @@ -59,8 +59,6 @@ friend ostream& operator<<(ostream& o, const Piece& p); // ABSTRACT - virtual bool can(int x, int y); - virtual bool can(ChessContext *c, int x, int y); virtual char getchar(); diff --git a/Chess/dep/Pieces/Pion.cpp b/Chess/dep/Pieces/Pion.cpp index dca32c5..3be8128 100644 --- a/Chess/dep/Pieces/Pion.cpp +++ b/Chess/dep/Pieces/Pion.cpp @@ -5,10 +5,6 @@ Pion::Pion(int x, int y) : Piece(PION, x, y) { } // ABSTRACT -bool Pion::can(int x, int y){ - return true; -} - char Pion::getchar(){ return 'P'; } diff --git a/Chess/dep/Pieces/Pion.h b/Chess/dep/Pieces/Pion.h index 8d6f3a1..cbfe4f4 100644 --- a/Chess/dep/Pieces/Pion.h +++ b/Chess/dep/Pieces/Pion.h @@ -19,7 +19,6 @@ Pion(int x, int y); // ABSTRACT - bool can(int x, int y); char getchar(); }; diff --git a/Chess/dep/Pieces/Reine.cpp b/Chess/dep/Pieces/Reine.cpp index a002362..613efba 100644 --- a/Chess/dep/Pieces/Reine.cpp +++ b/Chess/dep/Pieces/Reine.cpp @@ -5,10 +5,6 @@ Reine::Reine(int x, int y) : Piece(REINE, x, y) { } // ABSTRACT -bool Reine::can(int x, int y){ - return true; -} - char Reine::getchar(){ return 'Q'; } diff --git a/Chess/dep/Pieces/Reine.h b/Chess/dep/Pieces/Reine.h index 2fbafd6..3944209 100644 --- a/Chess/dep/Pieces/Reine.h +++ b/Chess/dep/Pieces/Reine.h @@ -19,7 +19,6 @@ Reine(int x, int y); // ABSTRACT - bool can(int x, int y); char getchar(); }; diff --git a/Chess/dep/Pieces/Roi.cpp b/Chess/dep/Pieces/Roi.cpp index f228334..c887778 100644 --- a/Chess/dep/Pieces/Roi.cpp +++ b/Chess/dep/Pieces/Roi.cpp @@ -5,10 +5,6 @@ Roi::Roi(int x, int y) : Piece(ROI, x, y) { } // ABSTRACT -bool Roi::can(int x, int y){ - return true; -} - char Roi::getchar(){ return 'K'; } diff --git a/Chess/dep/Pieces/Roi.h b/Chess/dep/Pieces/Roi.h index a542c1b..3dfc81a 100644 --- a/Chess/dep/Pieces/Roi.h +++ b/Chess/dep/Pieces/Roi.h @@ -19,7 +19,6 @@ Roi(int x, int y); // ABSTRACT - bool can(int x, int y); char getchar(); }; diff --git a/Chess/dep/Pieces/Tour.cpp b/Chess/dep/Pieces/Tour.cpp index b5f2407..79dfed2 100644 --- a/Chess/dep/Pieces/Tour.cpp +++ b/Chess/dep/Pieces/Tour.cpp @@ -5,10 +5,6 @@ Tour::Tour(int x, int y) : Piece(TOUR, x, y) { } // ABSTRACT -bool Tour::can(int x, int y){ - return true; -} - char Tour::getchar(){ return 'T'; } diff --git a/Chess/dep/Pieces/Tour.h b/Chess/dep/Pieces/Tour.h index 5553cb0..ab9f588 100644 --- a/Chess/dep/Pieces/Tour.h +++ b/Chess/dep/Pieces/Tour.h @@ -19,7 +19,6 @@ Tour(int x, int y); // ABSTRACT - bool can(int x, int y); char getchar(); }; diff --git a/Chess/dep/Player.cpp b/Chess/dep/Player.cpp index d58c5f6..46ef7a6 100644 --- a/Chess/dep/Player.cpp +++ b/Chess/dep/Player.cpp @@ -56,7 +56,7 @@ void Player::remPiece(Piece& p){ /* DEBUG */ setfont(BLUE, ITALIC); - cout << "\t\t[-] " << p << " to cimetery of Player " << (_first?1:2); + cout << " [-] " << p << " to cimetery of Player " << (_first?1:2); setfont(); cout << endl; @@ -64,8 +64,8 @@ void Player::remPiece(Piece& p){ // INITIALISATION DES PIECES DE BASE void Player::initPieces(){ - int y1 = _first ? 0 : 7; // ligne forte - int y2 = _first ? 1 : 6; // ligne de pions + int y1 = _first ? 7 : 0; // ligne forte + int y2 = _first ? 6 : 1; // ligne de pions // Premier ligne diff --git a/Chess/dep/term.cpp b/Chess/dep/term.cpp index 23604c6..3c8f288 100644 --- a/Chess/dep/term.cpp +++ b/Chess/dep/term.cpp @@ -8,4 +8,18 @@ void clear(){ // efface l'ecran void setfont(const TERM_COLOR c, const TERM_STYLE s){ cout << "\033[" << s << ";" << c << "m"; +} + +void err(string msg){ + // On affiche le WARNING + setfont(RED, BOLD); + cout << "/!\\ "; + + // On affiche le message d'erreur + setfont(RED); + cout << msg << endl; + + // On attends l'appui sur une touche + setfont(); + sleep(1); } \ No newline at end of file diff --git a/Chess/dep/term.h b/Chess/dep/term.h index c146219..ded27ad 100644 --- a/Chess/dep/term.h +++ b/Chess/dep/term.h @@ -39,7 +39,8 @@ =========================================================*/ void clear(); void setfont(const TERM_COLOR c=DEFAULT, const TERM_STYLE s=NORMAL); - + void err(string msg); + /* [n] Inclusion du corps =========================================================*/ #include "term.cpp" diff --git a/Chess/exe b/Chess/exe index ec040279a498dede3f8df4983adbde6d85069d78..660cd8cdd3a24e5f52215a9b07435e6bb0723840 100755 GIT binary patch literal 40889 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 Db`8&U diff --git a/Chess/main.cpp b/Chess/main.cpp index 4b5eaa2..de1f13b 100644 --- a/Chess/main.cpp +++ b/Chess/main.cpp @@ -4,11 +4,12 @@ =========================================================*/ int main(){ ChessContext ctx; - // On initialise la partie ctx.init(); + // On continue d'attendre que les joueurs jouent + // tant que la partie n'est pas finie do{ display_board(ctx); game_routine(ctx); @@ -96,11 +97,11 @@ void display_board(ChessContext& ctx){ cout << endl << endl; if( ctx._turn == '1' ) - cout << "TOUR DU JOUEUR 1" << endl; + cout << "> TOUR DU JOUEUR 1 <" << endl << "--------------------" << endl; else if( ctx._turn == '2' ) - cout << "TOUR DU JOUEUR 2" << endl; + cout << "> TOUR DU JOUEUR 2 <" << endl << "--------------------" << endl; else - cout << "PARTIE FINIE" << endl; + cout << "> PARTIE FINIE <" << endl << "-----------------" << endl; } @@ -112,9 +113,9 @@ void game_routine(ChessContext& ctx){ int dest[2]; // contiendra la position souhaitee // Contient le joueur courant - Player *curnt = (ctx._turn=='1') ? ctx._p1 : ctx._p2; + Player *curnt = ctx.getCurrent(); // Contient l'ennemi - Player *enemy = (ctx._turn=='1') ? ctx._p2 : ctx._p1; + Player *enemy = ctx.getEnemy(); @@ -122,8 +123,6 @@ void game_routine(ChessContext& ctx){ =========================================================*/ chess_input(origin, dest); - cout << "(" << origin[0] << "," << origin[1] << ")" << endl; - /* [3] On verifie qu'un pion est a cette case =========================================================*/ Piece *toMove = ctx._p1->at(origin[0], origin[1]); @@ -134,30 +133,33 @@ void game_routine(ChessContext& ctx){ if( toMove != NULL ) cout << *toMove << endl; - else{ - cout << "Aucune piece sur cette case" << endl; - return; - } + else + err("Aucune piece sur cette case"); /* [4] On verifie qu'il peut atteindre la destination =========================================================*/ - cout << "Can move to dest : " << toMove->can(dest[0], dest[1]) << endl; + bool canMove = ctx.checkMove(*toMove, dest[0], dest[1]); + + if( canMove ){ + + /* [5] On gere le deplacement + =========================================================*/ + /* (1) Gestion de si on mange l'ennemi */ + Piece *eaten = enemy->at(dest[0], dest[1]); + + if( eaten != NULL ) // si piece mangee + enemy->remPiece( *eaten ); // on mange l'ennemi + + toMove->move(dest[0], dest[1]); // on deplace la piece - /* [5] On gere le deplacement - =========================================================*/ - /* (1) Gestion de si on mange l'ennemi */ - Piece *eaten = enemy->at(dest[0], dest[1]); - if( eaten != NULL ) // si piece mangee - enemy->remPiece( *eaten ); // on mange l'ennemi + /* [n] Gestion du tour ou partie finie + =========================================================*/ + ctx._turn = (ctx._turn=='1') ? '2' : '1'; - toMove->move(dest[0], dest[1]); // on deplace la piece - - - /* [n] Gestion du tour ou partie finie - =========================================================*/ - ctx._turn = (ctx._turn=='1') ? '2' : '1'; + }else + err("Mouvement interdit"); } /* [3] Gestion de la saisie du tour @@ -165,12 +167,12 @@ void game_routine(ChessContext& ctx){ void chess_input(int* origin, int* dest){ char coord[2] = {'\0'}; - cout << "Piece to move (XN) : "; + cout << "Piece a deplacer (XN) : "; cin >> coord; Piece::decode(coord, origin); cout << endl; - cout << "Move to (XN) : "; + cout << "Deplacer vers (XN) : "; cin >> coord; Piece::decode(coord, dest); cout << endl; diff --git a/Chess/main.h b/Chess/main.h index f3d246b..aaa3b6c 100644 --- a/Chess/main.h +++ b/Chess/main.h @@ -9,6 +9,7 @@ #include #include #include + #include /* (2) Externes */ #include "dep/term.h" diff --git a/Chess/main.o b/Chess/main.o index e5d33af138c18f76a5ffadbf41e82e73d0b6825c..e33d928fbfbf5ea6ee4bb6ad288374eb7d16d632 100644 GIT binary patch literal 74016 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