qtcnet-server/qtc-net-server/Schema/TicTacToeBoard.cs
2026-07-23 13:54:06 -07:00

65 lines
2.3 KiB
C#

using qtc_api.Enums;
namespace qtc_api.Schema
{
public class TicTacToeBoard
{
public TicTacToeSymbol Square1 { get; set; } = TicTacToeSymbol.Blank;
public TicTacToeSymbol Square2 { get; set; } = TicTacToeSymbol.Blank;
public TicTacToeSymbol Square3 { get; set; } = TicTacToeSymbol.Blank;
public TicTacToeSymbol Square4 { get; set; } = TicTacToeSymbol.Blank;
public TicTacToeSymbol Square5 { get; set; } = TicTacToeSymbol.Blank;
public TicTacToeSymbol Square6 { get; set; } = TicTacToeSymbol.Blank;
public TicTacToeSymbol Square7 { get; set; } = TicTacToeSymbol.Blank;
public TicTacToeSymbol Square8 { get; set; } = TicTacToeSymbol.Blank;
public TicTacToeSymbol Square9 { get; set; } = TicTacToeSymbol.Blank;
public TicTacToeSymbol GetWinner()
{
// winning possibilities
var lines = new List<(TicTacToeSymbol, TicTacToeSymbol, TicTacToeSymbol)>
{
(Square1, Square2, Square3),
(Square4, Square5, Square6),
(Square7, Square8, Square9),
(Square1, Square4, Square7),
(Square2, Square5, Square8),
(Square3, Square6, Square9),
(Square1, Square5, Square9),
(Square3, Square5, Square7)
};
foreach (var (a, b, c) in lines)
{
if (a != TicTacToeSymbol.Blank && a == b && b == c)
{
return a; // winner
}
}
return TicTacToeSymbol.Blank;
}
public bool IsDraw()
{
// If there is a winner, it's not a draw
if (GetWinner() != TicTacToeSymbol.Blank)
return false;
// Check if all squares are filled
bool allFilled =
Square1 != TicTacToeSymbol.Blank &&
Square2 != TicTacToeSymbol.Blank &&
Square3 != TicTacToeSymbol.Blank &&
Square4 != TicTacToeSymbol.Blank &&
Square5 != TicTacToeSymbol.Blank &&
Square6 != TicTacToeSymbol.Blank &&
Square7 != TicTacToeSymbol.Blank &&
Square8 != TicTacToeSymbol.Blank &&
Square9 != TicTacToeSymbol.Blank;
return allFilled;
}
}
}