File tree 4 files changed +25
-9
lines changed
4 files changed +25
-9
lines changed Original file line number Diff line number Diff line change 4
4
GetServerSidePropsResult ,
5
5
} from "next" ;
6
6
import { API_URL , SESSION_COOKIE_NAME } from "./config" ;
7
- import { GameState , MoveSequence , SubmissionLanguage } from "./models" ;
7
+ import { GameState , MoveSequence , SubmissionLanguage , TurnStatus } from "./models" ;
8
8
9
9
export function requireSession < T extends { [ key : string ] : any } > (
10
10
onSuccess : (
@@ -68,14 +68,14 @@ export async function createGame(
68
68
69
69
export async function getGameState (
70
70
session : string
71
- ) : Promise < GameState | Error > {
71
+ ) : Promise < TurnStatus | Error > {
72
72
return await ( await apiCall ( "game" , { session, method : "GET" } ) ) . json ( ) ;
73
73
}
74
74
75
75
export async function makeMove (
76
76
moves : MoveSequence ,
77
77
session : string
78
- ) : Promise < GameState | Error > {
78
+ ) : Promise < TurnStatus | Error > {
79
79
return await (
80
80
await apiCall ( "game" , { session, body : moves , method : "POST" } )
81
81
) . json ( ) ;
Original file line number Diff line number Diff line change @@ -3,6 +3,11 @@ export interface GameState {
3
3
current_player : Player ;
4
4
}
5
5
6
+ export interface TurnStatus {
7
+ game : GameState ;
8
+ ai_output : string ; // Everything printed by the AI on stderr since the start/last move.
9
+ }
10
+
6
11
export type Board = ( Piece | null ) [ ] [ ] ;
7
12
8
13
export interface Piece {
Original file line number Diff line number Diff line change @@ -25,6 +25,8 @@ type BoardProps = {
25
25
gameOngoing : boolean ;
26
26
currentTurn : Player | null ;
27
27
setCurrentTurn : ( player : Player ) => void ;
28
+ board : BoardState ;
29
+ setBoard : ( board : BoardState ) => void ;
28
30
} ;
29
31
30
32
export default function Board ( {
@@ -33,8 +35,10 @@ export default function Board({
33
35
gameOngoing,
34
36
currentTurn,
35
37
setCurrentTurn,
38
+ board,
39
+ setBoard,
36
40
} : BoardProps ) {
37
- const [ board , setBoard ] = useState ( initialBoards [ player ] ) ;
41
+
38
42
const [ currentMoveSequence , setCurrentMoveSequence ] = useState < MoveSequence > (
39
43
[ ]
40
44
) ;
@@ -98,13 +102,13 @@ export default function Board({
98
102
player == Player . White ? Player . Black : Player . White
99
103
) ; // switch turn
100
104
makeMove ( currentMoveSequence , username ) . then (
101
- ( game ) => {
102
- if ( game instanceof Error ) {
103
- alert ( game . message ) ;
105
+ ( turnStatus ) => {
106
+ if ( turnStatus instanceof Error ) {
107
+ alert ( turnStatus . message ) ;
104
108
} else {
105
109
// TODO: add buffer time before updating board ?
106
- setBoard ( game . board ) ; // update board with server response
107
- setCurrentTurn ( game . current_player ) ;
110
+ setBoard ( turnStatus . game . board ) ; // update board with server response
111
+ setCurrentTurn ( turnStatus . game . current_player ) ;
108
112
}
109
113
} ,
110
114
( error ) => {
Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ import Board from '@/components/Board';
6
6
import {
7
7
Board as BoardState ,
8
8
emptyBoard ,
9
+ initialBoards ,
9
10
Player ,
10
11
SubmissionLanguage ,
11
12
} from '../api/models' ;
@@ -27,6 +28,7 @@ export default function Home({ username }: { username: string }) {
27
28
const [ gameOngoing , setGameOngoing ] = useState ( false ) ;
28
29
const [ player , setPlayer ] = useState ( Player . White ) ;
29
30
const [ currentTurn , setCurrentTurn ] = useState < Player | null > ( null ) ;
31
+ const [ board , setBoard ] = useState ( initialBoards [ player ] ) ;
30
32
31
33
useEffect ( ( ) => {
32
34
getInitialCode ( SubmissionLanguage . Java ) . then ( ( code ) => setFile ( code ) ) ;
@@ -87,6 +89,8 @@ export default function Home({ username }: { username: string }) {
87
89
alert ( game . message ) ;
88
90
} else {
89
91
setGameOngoing ( true ) ;
92
+ setBoard ( game . board ) ;
93
+ setCurrentTurn ( game . current_player ) ;
90
94
}
91
95
} ,
92
96
( err ) => alert ( err . message )
@@ -156,11 +160,14 @@ export default function Home({ username }: { username: string }) {
156
160
gameOngoing = { gameOngoing }
157
161
currentTurn = { currentTurn }
158
162
setCurrentTurn = { setCurrentTurn }
163
+ board = { board }
164
+ setBoard = { setBoard }
159
165
/>
160
166
</ div >
161
167
< div className = "game-info" >
162
168
< p > Game State: { gameOngoing ? 'Ongoing' : 'Stopped' } </ p >
163
169
< p > Current Turn: { currentTurn ?? 'None' } </ p >
170
+ < p > Player: { player } </ p >
164
171
</ div >
165
172
</ div >
166
173
</ div >
You can’t perform that action at this time.
0 commit comments