feat(domain): add immutable GameState
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
4bc3948fed
commit
0d977e5cca
68
lib/domain/game/game_state.dart
Normal file
68
lib/domain/game/game_state.dart
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
import '../../core/config/app_constants.dart';
|
||||||
|
import '../entities/pokemon.dart';
|
||||||
|
|
||||||
|
/// Phase courante de la partie.
|
||||||
|
enum GameStatus { loading, playing, roundWon, gameOver, error }
|
||||||
|
|
||||||
|
/// Résultat d'une soumission de réponse.
|
||||||
|
enum GuessResult { correct, wrong, gameOver, invalid }
|
||||||
|
|
||||||
|
/// État immuable d'une partie.
|
||||||
|
class GameState {
|
||||||
|
final Pokemon? currentPokemon;
|
||||||
|
final int lives;
|
||||||
|
final int skips;
|
||||||
|
final int hints;
|
||||||
|
final int sessionCorrectCount;
|
||||||
|
final int currentScore;
|
||||||
|
final int bestScore;
|
||||||
|
final bool isShiny;
|
||||||
|
final bool isHintUsed;
|
||||||
|
final GameStatus status;
|
||||||
|
|
||||||
|
const GameState({
|
||||||
|
this.currentPokemon,
|
||||||
|
this.lives = AppConstants.startingLives,
|
||||||
|
this.skips = AppConstants.startingSkips,
|
||||||
|
this.hints = AppConstants.startingHints,
|
||||||
|
this.sessionCorrectCount = 0,
|
||||||
|
this.currentScore = 0,
|
||||||
|
this.bestScore = 0,
|
||||||
|
this.isShiny = false,
|
||||||
|
this.isHintUsed = false,
|
||||||
|
this.status = GameStatus.loading,
|
||||||
|
});
|
||||||
|
|
||||||
|
GameState copyWith({
|
||||||
|
Pokemon? currentPokemon,
|
||||||
|
int? lives,
|
||||||
|
int? skips,
|
||||||
|
int? hints,
|
||||||
|
int? sessionCorrectCount,
|
||||||
|
int? currentScore,
|
||||||
|
int? bestScore,
|
||||||
|
bool? isShiny,
|
||||||
|
bool? isHintUsed,
|
||||||
|
GameStatus? status,
|
||||||
|
}) {
|
||||||
|
return GameState(
|
||||||
|
currentPokemon: currentPokemon ?? this.currentPokemon,
|
||||||
|
lives: lives ?? this.lives,
|
||||||
|
skips: skips ?? this.skips,
|
||||||
|
hints: hints ?? this.hints,
|
||||||
|
sessionCorrectCount: sessionCorrectCount ?? this.sessionCorrectCount,
|
||||||
|
currentScore: currentScore ?? this.currentScore,
|
||||||
|
bestScore: bestScore ?? this.bestScore,
|
||||||
|
isShiny: isShiny ?? this.isShiny,
|
||||||
|
isHintUsed: isHintUsed ?? this.isHintUsed,
|
||||||
|
status: status ?? this.status,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Issue d'un appel à GameEngine.submitGuess : nouvel état + nature du résultat.
|
||||||
|
class GuessOutcome {
|
||||||
|
final GameState state;
|
||||||
|
final GuessResult result;
|
||||||
|
const GuessOutcome(this.state, this.result);
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user