@@ -48,8 +48,14 @@ public void CreateGameBoard(int numberOfRows, ColumnConfiguration columnConfigur
4848 CurrentBoard = [ .. StartingBoard ] ;
4949 }
5050
51- public void TakeCoins ( int row , int col )
51+ public bool TakeCoins ( int row , int col )
5252 {
53+ if ( ! IsMoveValid ( row , col ) )
54+ {
55+ logger . LogWarning ( "Invalid move attempted: row {Row}, col {Col}" , row , col ) ;
56+ return false ;
57+ }
58+
5359 CurrentBoard [ row ] = col ;
5460
5561 if ( CurrentBoard . All ( x => x == 0 ) )
@@ -59,6 +65,22 @@ public void TakeCoins(int row, int col)
5965
6066 logger . LogInformation ( "Set {Row} to {Col} coins." , row , col ) ;
6167 logger . LogInformation ( "Current board: {CurrentBoard}" , CurrentBoard . Select ( x => x . ToString ( ) ) . Aggregate ( ( a , b ) => a + ", " + b ) ) ;
68+ return true ;
69+ }
70+
71+ private bool IsMoveValid ( int row , int col )
72+ {
73+ if ( row < 0 || row >= CurrentBoard . Count )
74+ {
75+ return false ;
76+ }
77+
78+ if ( col < 0 || col >= CurrentBoard [ row ] )
79+ {
80+ return false ;
81+ }
82+
83+ return true ;
6284 }
6385
6486 public void ChangePlayer ( Action stateHasChanged )
@@ -74,7 +96,13 @@ public void ChangePlayer(Action stateHasChanged)
7496 Task . Run ( ( ) =>
7597 {
7698 Thread . Sleep ( TimeSpan . FromSeconds ( 1 ) ) ; // Pause for dramatic effect
77- TakeCoins ( ComputerMove . Value . row , ComputerMove . Value . col ) ;
99+ bool successfulMove = TakeCoins ( ComputerMove . Value . row , ComputerMove . Value . col ) ;
100+
101+ if ( ! successfulMove )
102+ {
103+ logger . LogError ( "Computer attempted an invalid move: row {Row}, col {Col}\n With board state: {CurrentBoard}" , ComputerMove . Value . row , ComputerMove . Value . col , CurrentBoard . Select ( x => x . ToString ( ) ) . Aggregate ( ( a , b ) => a + ", " + b ) ) ;
104+ }
105+
78106 if ( ! IsGameOver )
79107 {
80108 IsPlayer1Move = ! IsPlayer1Move ;
0 commit comments