Skip to content

Instantly share code, notes, and snippets.

@kaiquewdev
Last active February 27, 2017 22:54
Show Gist options
  • Save kaiquewdev/8347848 to your computer and use it in GitHub Desktop.
Save kaiquewdev/8347848 to your computer and use it in GitHub Desktop.
Um dos primeiros exemplos do fth-cast.
#!/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