feat: added bot, light and dark mode
This commit was merged in pull request #1.
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { GameFull, GameState, GameStatus } from '../models/game.models';
|
||||
|
||||
export interface GameCompletion {
|
||||
isFinished: boolean;
|
||||
message: string;
|
||||
}
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class GameCompletionService {
|
||||
getGameCompletion(game: GameFull | null, state: GameState | null): GameCompletion {
|
||||
if (!game || !state) {
|
||||
return { isFinished: false, message: '' };
|
||||
}
|
||||
|
||||
const status = state.status;
|
||||
const gameEndingStatuses: GameStatus[] = ['checkmate', 'stalemate', 'resign', 'draw', 'insufficientMaterial'];
|
||||
|
||||
if (!gameEndingStatuses.includes(status)) {
|
||||
return { isFinished: false, message: '' };
|
||||
}
|
||||
|
||||
const message = this.buildCompletionMessage(status, state, game);
|
||||
return { isFinished: true, message };
|
||||
}
|
||||
|
||||
private buildCompletionMessage(status: GameStatus, state: GameState, game: GameFull): string {
|
||||
switch (status) {
|
||||
case 'checkmate':
|
||||
const winner = state.winner === 'white' ? game.white.displayName : game.black.displayName;
|
||||
return `Checkmate! ${winner} wins!`;
|
||||
case 'stalemate':
|
||||
return 'Stalemate! The game is a draw.';
|
||||
case 'resign':
|
||||
const resignedPlayer = state.winner === 'white' ? game.black.displayName : game.white.displayName;
|
||||
const resignedWinner = state.winner === 'white' ? game.white.displayName : game.black.displayName;
|
||||
return `${resignedPlayer} resigned. ${resignedWinner} wins!`;
|
||||
case 'draw':
|
||||
return 'Draw! The game ended in a draw.';
|
||||
case 'insufficientMaterial':
|
||||
return 'Insufficient material! The game is a draw.';
|
||||
default:
|
||||
return 'Game ended!';
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user