Last active
February 27, 2017 22:54
-
-
Save kaiquewdev/8347848 to your computer and use it in GitHub Desktop.
Um dos primeiros exemplos do fth-cast.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env node | |
// As regras do jogo são simples, | |
// Você vai jogar contra a maquina e | |
// Quem formar o numero 15 ganha. | |
// Mas para formar o numero 15, | |
// Você só pode adicionar 1, 2, 3 | |
// Até somar 15. Passando disso é empate. | |
var placar = 0; | |
var maquinaComeca = !!( Math.max( 0, Math.round( Math.random() * 1 ) ) ); | |
var maquinaJogando = false; | |
var usuarioJogando = false; | |
var escolhaDoJogador = null; | |
var escolhaDaMaquina = null; | |
var vitoriaMaquina = false; | |
var vitoriaJogador = false; | |
var jogoAcabou = false; | |
function valorAleatorio () { | |
return Math.max( 1, Math.round( Math.random() * 3 ) ); | |
} | |
function mostrarUltimaEscolhaDaMaquina () { | |
console.log('Minha escolha foi: %s', escolhaDaMaquina); | |
} | |
function mostrarUltimaEscolhaDoJogador () { | |
console.log('Sua escolha foi: %s', escolhaDoJogador); | |
} | |
function mostrarPlacar () { | |
console.log('O placar esta em: %s', placar); | |
} | |
function reiniciar () { | |
placar = 0; | |
maquinaJogando = false; | |
usuarioJogando = false; | |
escolhaDoJogador = null; | |
escolhaDaMaquina = null; | |
vitoriaMaquina = false; | |
vitoriaJogador = false; | |
jogoAcabou = false; | |
} | |
function vitoria () { | |
if ( vitoriaMaquina && !vitoriaJogador ) { | |
console.log('Eu ganhei!'); | |
} else { | |
console.log('Você ganhou!'); | |
} | |
jogoAcabou = true; | |
} | |
function empate () { | |
console.log('O jogo empatou!'); | |
jogoAcabou = true; | |
} | |
function verificarPlacar ( personagem ) { | |
if ( placar === 15 ) { | |
vitoriaMaquina = ( personagem === 'maquina' ) ? true : false; | |
vitoriaJogador = ( personagem === 'jogador' ) ? true : false; | |
vitoria(); | |
} else if ( placar > 15 ) { | |
vitoriaMaquina = false; | |
vitoriaJogador = false; | |
empate(); | |
} | |
} | |
function jogadaDoUsuario ( valor, proximo ) { | |
var proximo = ( proximo || function () {} ); | |
var valor = ( valor ? parseInt( valor, 10 ) : 0 ); | |
var jogadaCorreta = ( valor >= 1 && valor <= 3 ) ? true : false; | |
if ( !maquinaJogando && jogadaCorreta ) { | |
usuarioJogando = true; | |
escolhaDoJogador = valor; | |
placar += escolhaDoJogador; | |
mostrarUltimaEscolhaDoJogador(); | |
mostrarPlacar(); | |
verificarPlacar( 'jogador' ); | |
console.log('\n'); | |
usuarioJogando = false; | |
proximo(); | |
} else if ( !maquinaJogando && !jogadaCorreta ) { | |
console.log('Tente novamente, você só poder usar numeros de 1 a 3.'); | |
} else { | |
console.log('Calma...'); | |
} | |
} | |
function jogadaDaMaquina ( proximo ) { | |
var proximo = ( proximo || function () {} ); | |
if ( !usuarioJogando ) { | |
maquinaJogando = true; | |
escolhaDaMaquina = valorAleatorio(); | |
placar += escolhaDaMaquina; | |
mostrarUltimaEscolhaDaMaquina(); | |
mostrarPlacar(); | |
verificarPlacar( 'maquina' ); | |
console.log('\n'); | |
maquinaJogando = false; | |
proximo(); | |
} else { | |
console.log('Desculpe você esta jogando!'); | |
} | |
} | |
function avisarUsuario () { | |
if ( !jogoAcabou ) { | |
console.log('Sua vez...'); | |
console.log( ( new Array(30) ).join('-') ); | |
} else { | |
console.log('Quer jogar outra vez?'); | |
} | |
} | |
function proximaAcao () { | |
if ( !jogoAcabou ) { | |
jogadaDaMaquina( avisarUsuario ); | |
} else { | |
avisarUsuario(); | |
} | |
} | |
function iniciarJogo ( avisarUsuario ) { | |
if ( maquinaComeca ) { | |
console.log('Eu começo!'); | |
jogadaDaMaquina( avisarUsuario ); | |
} else { | |
console.log('Você começa!'); | |
} | |
} | |
function recomecar ( valor ) { | |
if ( jogoAcabou && ~(valor.indexOf('sim')) ) { | |
reiniciar(); | |
iniciarJogo(); | |
} else { | |
console.log('Até a proxima!'); | |
process.exit( 0 ); | |
} | |
} | |
function lidarComEntradaDeTexto ( chunk ) { | |
if ( !jogoAcabou ) { | |
jogadaDoUsuario( chunk, proximaAcao ); | |
} else { | |
recomecar( chunk ); | |
} | |
} | |
process.stdin.resume(); | |
process.stdin.setEncoding('utf8'); | |
process.stdin.on( 'data', lidarComEntradaDeTexto ); | |
console.log('Jogo dos numeros\n'); | |
iniciarJogo( avisarUsuario ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment