Skip to content

Commit 1d3bddd

Browse files
committedSep 4, 2024
fix: reset board and console on start
1 parent 651f5ef commit 1d3bddd

File tree

2 files changed

+63
-57
lines changed

2 files changed

+63
-57
lines changed
 

‎app/src/components/Board.tsx

+6-7
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
rotateMove,
2323
} from "@/util/checkersCalculator";
2424
import { makeMove } from "@/api/api";
25+
import { ConsoleMessage } from "@/pages";
2526

2627
type BoardProps = {
2728
username: string;
@@ -31,7 +32,10 @@ type BoardProps = {
3132
setCurrentTurn: (player: Player) => void;
3233
board: BoardState;
3334
setBoard: (board: BoardState) => void;
34-
updateGame: (turnStatus: TurnStatus | AIError) => void;
35+
updateGame: (
36+
turnStatus: TurnStatus | AIError,
37+
initialConsoleOutput?: ConsoleMessage[]
38+
) => void;
3539
};
3640

3741
export default function Board({
@@ -40,19 +44,14 @@ export default function Board({
4044
gameOngoing,
4145
currentTurn,
4246
setCurrentTurn,
43-
board,
47+
board,
4448
setBoard,
4549
updateGame,
4650
}: BoardProps) {
47-
4851
const [currentMoveSequence, setCurrentMoveSequence] = useState<MoveSequence>(
4952
[]
5053
);
5154

52-
useEffect(() => {
53-
setBoard(initialBoards[player]);
54-
}, [player]); // player can only change when the game is not ongoing
55-
5655
const [selectedPiece, setSelectedPiece] = useState<{
5756
x: number;
5857
y: number;

‎app/src/pages/index.tsx

+57-50
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ import { rotateBoard } from "@/util/checkersCalculator";
2626

2727
const inter = Inter({ subsets: ["latin"] });
2828

29+
export enum ConsoleMessageType {
30+
Error = "error",
31+
Info = "info",
32+
Warning = "warning",
33+
Success = "success",
34+
}
35+
export type ConsoleMessage = { msg: string; msgType: ConsoleMessageType };
36+
2937
export default function Home({ username }: { username: string }) {
3038
const [selectedLang, setLang] = useState(SubmissionLanguage.Java);
3139
const [file, setFile] = useState("");
@@ -34,19 +42,16 @@ export default function Home({ username }: { username: string }) {
3442
const [currentTurn, setCurrentTurn] = useState<Player | null>(null);
3543
const [board, setBoard] = useState(initialBoards[player]);
3644

37-
enum ConsoleMessageType {
38-
Error = "error",
39-
Info = "info",
40-
Warning = "warning",
41-
Success = "success",
42-
}
43-
type ConsoleMessage = { msg: string; msgType: ConsoleMessageType };
4445
const [consoleOutput, setConsoleOutput] = useState<ConsoleMessage[]>([]);
4546

4647
useEffect(() => {
4748
getInitialCode(SubmissionLanguage.Java).then((code) => setFile(code));
4849
}, []);
4950

51+
useEffect(() => {
52+
setBoard(initialBoards[player]);
53+
}, [player]); // player can only change when the game is not ongoing
54+
5055
async function changeLang(lang: SubmissionLanguage) {
5156
const currentInitialCode = await getInitialCode(selectedLang);
5257
const wantedInitialCode = await getInitialCode(lang);
@@ -68,58 +73,57 @@ export default function Home({ username }: { username: string }) {
6873
}
6974
}
7075

71-
function updateGame(turnStatus: TurnStatus | AIError) {
76+
function updateGame(
77+
turnStatus: TurnStatus | AIError,
78+
initialConsoleOutput?: ConsoleMessage[]
79+
) {
80+
let newConsoleOutput = initialConsoleOutput ?? consoleOutput;
81+
7282
if ("error" in turnStatus) {
7383
switch (turnStatus.error) {
7484
case AIErrorType.NoSubmission:
75-
setConsoleOutput(
76-
consoleOutput.concat({
77-
msg: "No submission found",
78-
msgType: ConsoleMessageType.Error,
79-
})
80-
);
85+
newConsoleOutput = newConsoleOutput.concat({
86+
msg: "No submission found",
87+
msgType: ConsoleMessageType.Error,
88+
});
8189
break;
8290
case AIErrorType.InvalidMove:
83-
setConsoleOutput(
84-
consoleOutput
85-
.concat({
86-
msg: "AI played invalid move",
87-
msgType: ConsoleMessageType.Error,
88-
})
89-
.concat({
90-
msg: turnStatus.move
91-
? turnStatus.move.length == 1
92-
? `Move from ${turnStatus.move[0].from} to ${turnStatus.move[0].to} is invalid`
93-
: "Sequence of moves is invalid : \n" +
94-
turnStatus.move
95-
.map((m) => `-> Move from ${m.from} to ${m.to}`)
96-
.join("\n")
97-
: "No move provided",
98-
msgType: ConsoleMessageType.Warning,
99-
})
100-
);
101-
break;
102-
case AIErrorType.InvalidOutput:
103-
setConsoleOutput(
104-
consoleOutput.concat({
105-
msg: "AI sent invalid output",
91+
newConsoleOutput = newConsoleOutput
92+
.concat({
93+
msg: "AI played invalid move",
10694
msgType: ConsoleMessageType.Error,
10795
})
108-
);
96+
.concat({
97+
msg: turnStatus.move
98+
? turnStatus.move.length == 1
99+
? `Move from ${turnStatus.move[0].from} to ${turnStatus.move[0].to} is invalid`
100+
: "Sequence of moves is invalid : \n" +
101+
turnStatus.move
102+
.map((m) => `-> Move from ${m.from} to ${m.to}`)
103+
.join("\n")
104+
: "No move provided",
105+
msgType: ConsoleMessageType.Warning,
106+
});
107+
break;
108+
case AIErrorType.InvalidOutput:
109+
newConsoleOutput = newConsoleOutput.concat({
110+
msg: "AI sent invalid output",
111+
msgType: ConsoleMessageType.Error,
112+
});
109113
break;
110114
}
111115

112116
if (turnStatus.ai_output && turnStatus.ai_output.length > 0) {
113-
setConsoleOutput(
114-
consoleOutput
115-
.concat({ msg: "AI error", msgType: ConsoleMessageType.Error })
116-
.concat({
117-
msg: turnStatus.ai_output,
118-
msgType: ConsoleMessageType.Warning,
119-
})
120-
);
117+
newConsoleOutput = newConsoleOutput
118+
.concat({ msg: "AI error", msgType: ConsoleMessageType.Error })
119+
.concat({
120+
msg: turnStatus.ai_output,
121+
msgType: ConsoleMessageType.Warning,
122+
});
121123
}
122124

125+
setConsoleOutput(newConsoleOutput);
126+
123127
setGameOngoing(false);
124128
} else {
125129
setBoard(rotateBoard(turnStatus.game.board, player)); // update board with server response
@@ -155,12 +159,12 @@ export default function Home({ username }: { username: string }) {
155159
stopGame(username);
156160
setGameOngoing(false);
157161
} else {
162+
setBoard(initialBoards[player]);
163+
setConsoleOutput([]);
158164
createGame(username, player == Player.White).then(
159165
(turnStatus) => {
160-
setConsoleOutput([]);
161166
setGameOngoing(true);
162-
setPlayer(player) // trigger re-render
163-
updateGame(turnStatus);
167+
updateGame(turnStatus, []);
164168
},
165169
(err) => alert(err.message)
166170
);
@@ -251,7 +255,10 @@ export default function Home({ username }: { username: string }) {
251255
calculer tout les coups (voire séquences de coups si il y a des
252256
raffles) pour déterminer lesquels sont valides.
253257
</p>
254-
<p>Note : les coups a retourner sont au format row, column à chaque fois.</p>
258+
<p>
259+
Note : les coups a retourner sont au format row, column à chaque
260+
fois.
261+
</p>
255262
</div>
256263
<div className="game">
257264
<div className="simulation">

0 commit comments

Comments
 (0)