feat: complete human-vs-human gameplay end to end
This commit is contained in:
+9
-3
@@ -84,8 +84,11 @@
|
||||
|
||||
function safeState(payload) {
|
||||
return payload && payload.type === 'state' && Array.isArray(payload.boards) && payload.boards.length === 2 &&
|
||||
payload.boards.every(board => typeof board === 'string' && /^[0123]{100}$/.test(board)) &&
|
||||
typeof payload.version === 'number' && typeof payload.gameId === 'number';
|
||||
payload.boards.every(board => typeof board === 'string' && /^[01234]{100}$/.test(board)) &&
|
||||
typeof payload.version === 'number' && typeof payload.gameId === 'number' &&
|
||||
(payload.winner === null || payload.winner === 0 || payload.winner === 1) && Array.isArray(payload.statistics) &&
|
||||
payload.statistics.length === 2 && payload.statistics.every(entry => Array.isArray(entry) && entry.length === 4 &&
|
||||
entry.every(value => Number.isInteger(value) && value >= 0));
|
||||
}
|
||||
|
||||
function acceptState(payload) {
|
||||
@@ -109,6 +112,7 @@
|
||||
if (value === '1') return ['ship', 'Корабль'];
|
||||
if (value === '2') return ['miss', 'Промах'];
|
||||
if (value === '3') return ['hit', 'Попадание'];
|
||||
if (value === '4') return ['sunk', 'Потопленный корабль'];
|
||||
return ['', 'Вода'];
|
||||
}
|
||||
|
||||
@@ -208,7 +212,9 @@
|
||||
function renderResult() {
|
||||
showScreen('result');
|
||||
const waiting = state.phase === 'rematch_wait';
|
||||
ui.result.textContent = waiting ? 'Ожидается подтверждение повторной игры.' : 'Поля раскрыты. Можно подтвердить повторную игру.';
|
||||
const winner = state.winner === 0 || state.winner === 1 ? `Победил игрок ${state.winner + 1}. ` : '';
|
||||
const statistics = state.statistics.map((entry, index) => `Игрок ${index + 1}: выстрелы ${entry[0]}, попадания ${entry[1]}, промахи ${entry[2]}, потоплено ${entry[3]}.`).join(' ');
|
||||
ui.result.textContent = `${winner}${statistics} ${waiting ? 'Ожидается подтверждение повторной игры.' : 'Поля раскрыты. Можно подтвердить повторную игру.'}`;
|
||||
ui.rematch.hidden = !isPlayer();
|
||||
ui.rematch.disabled = !isPlayer();
|
||||
ui.rematch.textContent = waiting ? 'Подтвердить повторно' : 'Сыграть ещё';
|
||||
|
||||
Reference in New Issue
Block a user