Jeu d'échec
 
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1#include <iostream>
2#include "jeu.hpp"
3#include <regex>
4
8bool saisie_correcte(std::string const & cmd) {
9 std::regex mouvmtpattern("[a-h][1-8][a-h][1-8]");
10 return std::regex_match(cmd,mouvmtpattern);
11}
12
16bool saisie_correcte_petitroque(std::string const & cmd) {
17 std::regex mouvmtpattern("(O|o|0)-(O|o|0)");
18 return regex_match(cmd,mouvmtpattern);
19}
20
24bool saisie_correcte_grandroque(std::string const & cmd) {
25 std::regex mouvmtpattern("(O|o|0)-(O|o|0)-(O|o|0)");
26 return regex_match(cmd,mouvmtpattern);
27}
28
29int main(){
30
31 Jeu jeu("Jeu 1");
32 bool stop = false;
33 std::string command;
34 jeu.setup();
35 while (!stop)
36 {
37 // Permet d'effacer le terminal à chaque coup joué.
38 // std::cout << "\033[H\033[2J\033[3J";
39 jeu.print();
40 std::cin >> command;
41
42 if(command == "/resign"){
43 std::cout << std::endl << jeu.canonical() << (jeu.get_player() == WHITE ? "0-1" : "1-0") << std::endl;
44 stop = true;
45 }else if(command == "/draw"){
46 std::cout << std::endl << jeu.canonical() << "1/2-1/2" << std::endl;
47 stop = true;
48 }else if(command == "/quit"){
49 std::cout << std::endl << jeu.canonical() << "?-?" << std::endl;
50 stop = true;
51 }else{
52 if(saisie_correcte(command)){
53 std::string orig = command.substr(0, 2);
54 std::string dest = command.substr(2, 2);
55
56 if(!jeu.move(Square(orig), Square(dest)))
57 continue;
58
59 switch (jeu.check_status()) {
60 case CHECK_MATE:
61 std::cout << std::endl << jeu.canonical() << (jeu.get_player() == WHITE ? "0-1" : "1-0") << std::endl;
62 stop = true;
63 break;
64 case ON_GOING:
65 break;
66 case STALEMATE:
67 std::cout << std::endl << jeu.canonical() << "1/2-1/2" << std::endl;
68 stop = true;
69 break;
70 }
71
72 jeu.set_message("Que souhaitez-vous faire ?");
73 } else if(saisie_correcte_petitroque(command)) {
74 if(!jeu.castling(false)){
75 jeu.set_message("Petit roque impossible");
76 }
77 } else if(saisie_correcte_grandroque(command)) {
78 if(!jeu.castling(true)){
79 jeu.set_message("Grand roque impossible");
80 }
81 } else {
82 jeu.set_message("Commande invalide");
83 }
84 }
85 }
86
87 // exit(0);
88 return 0;
89}
Classe représentant un Jeu.
Definition jeu.hpp:9
bool castling(bool big)
Permet d'effectuer un roque.
Definition jeu.cpp:48
bool move(Square from, Square to)
Permet d'effectuer un coup.
Definition jeu.cpp:24
std::string canonical() const
Récupère la position canonique du jeu actuel.
Definition jeu.cpp:19
Status check_status()
Vérifie si le jeu est en cours, est en situation de pat ou de mat.
Definition jeu.cpp:38
void setup()
Prépare le jeu en plaçant les pièces.
Definition jeu.cpp:7
void set_message(std::string message)
Met à jour le message dans la console avant la saisie de l'utilisateur.
Definition jeu.hpp:42
Color get_player() const
Definition jeu.hpp:30
void print() const
Affiche l'échiquier ainsi que l'interface dans la sortie standard.
Definition jeu.cpp:12
Décrit une case de l'échiquier.
Definition square.hpp:7
@ STALEMATE
Definition enums.hpp:13
@ CHECK_MATE
Definition enums.hpp:14
@ ON_GOING
Definition enums.hpp:12
@ WHITE
Definition enums.hpp:6
bool saisie_correcte(std::string const &cmd)
Definition main.cpp:8
bool saisie_correcte_grandroque(std::string const &cmd)
Definition main.cpp:24
bool saisie_correcte_petitroque(std::string const &cmd)
Definition main.cpp:16
int main()
Definition main.cpp:29