mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 21:08:12 +00:00
Chess: Added ability to resign and flip the board
This patch adds options to the app's menubar to resign the game and flip the board.
This commit is contained in:
parent
694f68ab86
commit
01b62cc7f4
5 changed files with 76 additions and 0 deletions
|
@ -512,6 +512,9 @@ Move Board::random_move(Colour colour) const
|
|||
|
||||
Board::Result Board::game_result() const
|
||||
{
|
||||
if (m_resigned != Colour::None)
|
||||
return (m_resigned == Colour::White) ? Result::WhiteResign : Result::BlackResign;
|
||||
|
||||
bool sufficient_material = false;
|
||||
bool no_more_pieces_allowed = false;
|
||||
Optional<Square> bishop;
|
||||
|
@ -684,4 +687,40 @@ bool Board::operator==(const Board& other) const
|
|||
return turn() == other.turn();
|
||||
}
|
||||
|
||||
void Board::set_resigned(Chess::Colour c)
|
||||
{
|
||||
m_resigned = c;
|
||||
}
|
||||
|
||||
String Board::result_to_string(Result r) const
|
||||
{
|
||||
switch (r) {
|
||||
case Result::CheckMate:
|
||||
if (m_turn == Chess::Colour::White)
|
||||
return "Black wins by Checkmate";
|
||||
else
|
||||
return "White wins by Checkmate";
|
||||
case Result::WhiteResign:
|
||||
return "Black wins by Resignation";
|
||||
case Result::BlackResign:
|
||||
return "White wins by Resignation";
|
||||
case Result::StaleMate:
|
||||
return "Draw by Stalemate";
|
||||
case Chess::Board::Result::FiftyMoveRule:
|
||||
return "Draw by 50 move rule";
|
||||
case Chess::Board::Result::SeventyFiveMoveRule:
|
||||
return "Draw by 75 move rule";
|
||||
case Chess::Board::Result::ThreeFoldRepetition:
|
||||
return "Draw by threefold repetition";
|
||||
case Chess::Board::Result::FiveFoldRepetition:
|
||||
return "Draw by fivefold repetition";
|
||||
case Chess::Board::Result::InsufficientMaterial:
|
||||
return "Draw by insufficient material";
|
||||
case Chess::Board::Result::NotFinished:
|
||||
return "Game not finished";
|
||||
default:
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -135,6 +135,8 @@ public:
|
|||
enum class Result {
|
||||
CheckMate,
|
||||
StaleMate,
|
||||
WhiteResign,
|
||||
BlackResign,
|
||||
FiftyMoveRule,
|
||||
SeventyFiveMoveRule,
|
||||
ThreeFoldRepetition,
|
||||
|
@ -143,6 +145,8 @@ public:
|
|||
NotFinished,
|
||||
};
|
||||
|
||||
String result_to_string(Result) const;
|
||||
|
||||
template<typename Callback>
|
||||
void generate_moves(Callback callback, Colour colour = Colour::None) const;
|
||||
Move random_move(Colour colour = Colour::None) const;
|
||||
|
@ -150,6 +154,7 @@ public:
|
|||
Colour game_winner() const;
|
||||
int game_score() const;
|
||||
bool game_finished() const;
|
||||
void set_resigned(Colour);
|
||||
int material_imbalance() const;
|
||||
|
||||
Colour turn() const { return m_turn; }
|
||||
|
@ -164,6 +169,7 @@ private:
|
|||
|
||||
Piece m_board[8][8];
|
||||
Colour m_turn { Colour::White };
|
||||
Colour m_resigned { Colour::None };
|
||||
Optional<Move> m_last_move;
|
||||
int m_moves_since_capture { 0 };
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue