diff --git a/versao_1.js b/versao_1.js index b3ea2b0..1efc26f 100644 --- a/versao_1.js +++ b/versao_1.js @@ -1,12 +1,79 @@ -/** - * EXEMPLO DE UTILIZAÇÃO DA 'comprarCarta' - * - * - const carta = comprarCarta(); // Sorteia uma carta. Por exemplo, o rei de ouros - - console.log(carta.texto) // imprime o texto da carta. Exemplo: "K♦️" (indica "K" de ouros) - console.log(carta.valor) // imprime o valor da carta (um número). Exemplo: 10 (dado que "K" vale 10) - * - * - * +/* // Função para criar e embaralhar o baralho +function criarBaralho() { + const naipes = ["♥️", "♣️", "♦️", "♠️"]; + const numeros = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]; + const baralho = []; + + for (const naipe of naipes) { + for (const numero of numeros) { + const carta = { + texto: `${numero}${naipe}`, + valor: numero === "A" ? 11 : numero === "J" || numero === "Q" || numero === "K" ? 10 : parseInt(numero) + }; + baralho.push(carta); + } + } + + return baralho.sort(() => Math.random() - 0.5); +} + +// Função para comprar uma carta do baralho +function comprarCarta(baralho) { + return baralho.pop(); +} + +// Função para calcular a pontuação de uma mão +function calcularPontuacao(mao) { + let pontuacao = 0; + let asCount = 0; + + for (const carta of mao) { + pontuacao += carta.valor; + + if (carta.valor === 11) { + asCount++; + } + } + + while (asCount > 0 && pontuacao > 21) { + pontuacao -= 10; + asCount--; + } + + return pontuacao; +} + +// Função para exibir a mão de um jogador +function exibirMao(mao, jogador) { + console.log(`${jogador} - cartas: ${mao.map(carta => carta.texto).join(" ")} - ${calcularPontuacao(mao)}`); +} + +// Boas-vindas ao jogo +console.log("Bem-vindo(a) ao jogo de Blackjack 1.0"); + +// Iniciar uma nova rodada +let novoJogo = confirm("Iniciar uma nova rodada?"); +if (novoJogo) { + // Criar e embaralhar o baralho + let baralho = criarBaralho(); + + // Comprar cartas para o usuário e o computador + let maoUsuario = [comprarCarta(baralho), comprarCarta(baralho)]; + let maoComputador = [comprarCarta(baralho), comprarCarta(baralho)]; + + // Exibir as cartas dos jogadores + exibirMao(maoUsuario, "Usuário"); + exibirMao(maoComputador, "Computador"); + + // Determinar o vencedor + if (calcularPontuacao(maoUsuario) > calcularPontuacao(maoComputador)) { + console.log("O usuário ganhou!"); + } else if (calcularPontuacao(maoComputador) > calcularPontuacao(maoUsuario)) { + console.log("O computador ganhou!"); + } else { + console.log("Empate!"); + } +} else { + console.log("Fim do jogo "); +} */ \ No newline at end of file diff --git a/versao_2.js b/versao_2.js index fa0b1b9..5755661 100644 --- a/versao_2.js +++ b/versao_2.js @@ -1,13 +1,103 @@ -/** - * EXEMPLO DE UTILIZAÇÃO DA 'comprarCarta' - * - * - const carta = comprarCarta(); // Sorteia uma carta. Por exemplo, o rei de ouros - - console.log(carta.texto) // imprime o texto da carta. Exemplo: "K♦️" (indica "K" de ouros) - console.log(carta.valor) // imprime o valor da carta (um número). Exemplo: 10 (dado que "K" vale 10) - * - * - * - */ +//alert("Bem-vinde ao jogo de Blackjack!"); +if (confirm("Bem-vinde ao Grande jogo Blackjack 2.0!"+ "\n" +"Deseja iniciar uma nova rodada?")) { + let jogador = []; + let computador = []; + + // Sortear 2 cartas iniciais + let cartasOk = false; + while (!cartasOk) { + jogador.push(comprarCarta()); + jogador.push(comprarCarta()); + computador.push(comprarCarta()); + computador.push(comprarCarta()); + if ((jogador[0].valor === 11 && jogador[1].valor === 11) || (computador[0].valor === 11 && computador[1].valor === 11)) { + jogador = []; + computador = []; + } else { + cartasOk = true; + } + } + + // Mostrar cartas do usuário e primeira do computador + // Perguntar se o usuário deseja comprar mais até que ele diga que não + let comprando = true; + while (comprando) { + let textos = ""; + let pontos = 0; + for (let carta of jogador) { + textos += carta.texto + " "; + pontos += carta.valor; + } + + if (pontos > 21) { + comprando = false; + } else { + let confirmCompra = confirm( + `Suas cartas são ${textos}. A carta revelada do computador é ${computador[0].texto}.` + + "\n" + + "Deseja comprar mais uma carta?" + ); + + if (confirmCompra) { + jogador.push(comprarCarta()); + } else { + comprando = false; + } + } + } + + // Cálculo dos pontos do usuário e do computador + let pontosComputador = 0; + let pontosJogador = 0; + let textosComputador = ""; + let textosJogador = ""; + + for (let carta of computador) { + pontosComputador += carta.valor; + textosComputador += carta.texto + " "; + } + for (let carta of jogador) { + pontosJogador += carta.valor; + textosJogador += carta.texto + " "; + } + + // Compra de cartas do computador + if (pontosJogador <= 21) { + while (pontosComputador < pontosJogador && pontosComputador <= 21) { + computador.push(comprarCarta()); + pontosComputador = 0; + textosComputador = ""; + for (let carta of computador) { + pontosComputador += carta.valor; + textosComputador += carta.texto + " "; + } + } + } + + let resultado = ""; + + // Verificação de quem ganhou + if (pontosJogador > pontosComputador && pontosJogador <= 21) { + resultado = "O usuário ganhou!"; + } else if (pontosComputador > pontosJogador && pontosComputador <= 21) { + resultado = "O computador ganhou!"; + } else if (pontosComputador > 21 && pontosJogador <= 21) { + resultado = "O usuário ganhou!"; + } else if (pontosJogador > 21 && pontosComputador <= 21) { + resultado = "O computador ganhou!"; + } else { + resultado = "Empate!"; + } + + // Imprimir cartas dos dois lados + alert( + `Usuario - Cartas: ${textosJogador} - Pontuação: ${pontosJogador}` + + "\n" + + `Computador - Cartas: ${textosComputador} - Pontuação: ${pontosComputador}` + + "\n" + + resultado + ); +} else { + alert("Fim do jogo."); +}