Skip to content

Instantly share code, notes, and snippets.

@fenix011
Created July 29, 2019 18:02
Show Gist options
  • Save fenix011/3e51df3fc32ce3eb85edcd597767d56a to your computer and use it in GitHub Desktop.
Save fenix011/3e51df3fc32ce3eb85edcd597767d56a to your computer and use it in GitHub Desktop.
Hangman Game - Dart - intro à la https://dart.academy/web-games-with-dart-hangman/
HangmanGame class
int get wrongGuesses => wrongGuesses;
List<String> get wordToGuess => _wordToGuess;
String get fullWord => wordToGuess.join();
String get wordForDisplay => wordToGuess.map((String letter) => lettersGuessed.contains(letter) ? letter: "_").join();
// comprobar si cada letra de la palabra ha sido adivinada
bool get isWordComplete {
for (String letter in _wordToGuess) {
if (!lettersGuessed.contains(letter)) {
return false;
}
}
return true;
}
void newGame() {
// aleatoreizar la lista de palabras
wordList.shuffle();
// dividir la primera palabra de la lista aleatoreizada en una lista de letras
_wordToGuess = wordList.first.split('');
// resetear el contador de intentos fallidos
_wrongGuesses = 0;
// 'limpiar' el juego de letras supuestas
lettersGuessed.clear();
// declarar el cambio (nueva palabra)
_onChange.add(wordForDisplay);
}
void guessLetter(String letter) {
// guardar letra supuesta
lettersGuessed.add(letter);
// si la letra supuesta está en la palabra, comprobar si se ha completado
// alternativamente, comprobar el ahorcamiento del/a jugador/a
if (_wordToGuess.contains(letter)) {
_onRight.add(letter);
if (isWordComplete) {
_onChange.add(fullWord);
_onWin.add(null);
}
else{
_onChange.add(wordForDisplay);
}
}
else {
wrongGuesses++;
_onWrong.add(_wrongGuesses);
if (_wrongGuesses == hanged) {
_onChange.add(fullWord);
_onLose.add(null);
}
}
}
<div id="main">
<h1>Hangman</h1>
<img id="gallows">
<div id="word"></div>
<div id="letters"></div>
<button id="new-game">New Game</button>
</div>
#main {
display: flex;
flex-direction: column;
align-items: center;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
#main > * {
margin: 10px;
}
#gallows {
max-width: 300px;
}
#word {
letter-spacing: .3rem;
font-size: 2rem;
}
#letters {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
}
.letter-btn {
width: 35px;
height: 35px;
margin: 5px 2px;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment