Modificação do jogo ‘craps’. Modifique o programa do jogo ‘craps’ da Figura 5.10 para que ele permita apostas. Inicialize a variável saldoBanca como 1.000 reais. Peça ao jogador que informe uma aposta. Use um loop while para verificar se a aposta é menor ou igual a saldoBanca e, se não for, peça ao usuário que informe aposta novamente até uma aposta válida ser informada. Depois que a aposta correta tiver sido informada, execute um jogo de craps. Se o jogador vencer, aumente saldoBanca em aposta e imprima o novo saldoBanca. Se o jogador perder, diminua saldoBanca em aposta, imprima o novo saldoBanca, verifique se saldoBanca chegou a zero e, nesse caso, imprima a mensagem: "Sinto muito. Você está quebrado!" Conforme o jogo progride, imprima diversas mensagens com o intuito de criar uma "conversa", como "Ei, assim você quebra!" ou "Vamos lá, continue tentando!" ou "Você está ganhando. Agora é hora de aproveitar suas fichas!"
Passo 1
Fala Galera!!! Tudo certo? Espero que sim!!! Bora para mais um exercício.
Nosso programa terá que simular um dos jogos de azar mais populares conhecido como ‘craps’, que é jogado em cassinos e becos no mundo inteiro. As regras do jogo são simples:
Um jogador lança dois dados. Cada dado tem seis faces. Essas faces contêm 1, 2, 3, 4, 5 e 6 pontos. Depois que os dados param, a soma dos pontos nas duas faces voltadas para cima é calculada. Se a soma for 7 ou 11 na primeira jogada, o jogador vence. Se a soma for 2, 3 ou 12 na primeira jogada (chamado ‘craps’), o jogador perde (ou seja, a ‘casa’ vence). Se a soma for 4, 5, 6, 8, 9 ou 10 na primeira jogada, então a soma se torna o ‘ponto’ do jogador. Para vencer, o jogador precisa continuar lançando os dados até que ‘faça seu ponto’. O jogador perde lançando um 7 antes de fazer o ponto
Passo 2
Agora que já sabemos como o jogo funciona vamos escrever ele. Vamos iniciar incluindo os arquivos de cabeçalho e inicialização da função principal main(), criar as constantes de enumeração que representam status do jogo e os protótipos das funções do nosso programa.
#include
#include
#include
/* as constantes de enumeração representam o status do jogo */
enum Status { CONTINUE, WON, LOST };
//protótipo das funções
int rollDice( void );
enum Status craps( void );
void chatter( void );
Passo 3
Dentro da função principal main() vamos criar as variáveis necessárias para o funcionamento do jogo, junto com um gerador de números aleatório que representara as jogadas dos dados. Também vamos exibir o saldo do jogador e pedir para que ele insira o valor da aposta e chamar as funções para realizar o jogo:
int main(){
enum Status result; /* resultado do jogo atual */
int wager = 0; /* aposta para o jogo atual */
int bankBalance = 1000; /* saldo bancário atual */
srand( time( NULL ) ); /* gerador de números aleatórios de sementes */
/* exibir saldo atual e solicitar a aposta */
printf( "Você tem $%d no banco.\n", bankBalance );
printf( "Faça sua aposta: " );
scanf( "%d", &wager );
/* loop enquanto não é aposta válida */
while( wager 1000 ){
printf( "Por favor, aposte um valor válido.\n" );
scanf( "%d", &wager );
}
result = craps();
/* se o jogador perdeu o jogo atual */
if ( result == LOST ) {
/* diminuir o balance por aposta e exibir novo saldo */
bankBalance -= wager;
printf( "Seu novo saldo bancário é de $%d\n", bankBalance );
/* se o saldo for 0 */
if ( bankBalance == 0 ) {
printf( "Desculpe. Você está quebrado! Obrigado por jogar.\n" );
}
}
else{ /* jogador ganhou jogo */
/* aumentar o saldo por aposta e exibir novo saldo */
bankBalance += wager;
printf( "Seu novo saldo bancário é de $%d\n", bankBalance );return 0;
}
return 0;
}
Passo 4
Agora vamos criar as funções, começando pela função responsável por simular a jogada dos dados, calcular a soma e exibir os resultados:
* rolar dados, calcular a soma e exibir resultados */
int rollDice( void )
{
int die1; /* primeiro valor */
int die2; /* segunda valor */
int workSum; /* soma do dado */
die1 = 1 + rand() % 6; /* escolha do primiero valor*/
die2 = 1 + rand() % 6; /* escolha do segundo valor*/
workSum = die1 + die2; /* smas do primeiro valor e segundo*/
/* exibir resultados deste rolo */
printf( "Player jogou %d + %d = %d\n", die1, die2, workSum );
return workSum; /* return sum of dice */
} /* end function rollDice */
Passo 5
A função craps é o coração do nosso programa. Ela determina o resultado das jogadas e exibe o resultado, se o jogador ganhou ou perdeu.
/* craps jogo, retorna resultado do jogo */
enum Status craps( void )
{
enum Status gameStatus; /* pode CONTINUAR, WON ou LOST */
int sum; /* rolo atual de dados */
int myPoint; /* valor de ponto */
sum = rollDice(); /* primeiro rolo de dados */
/* determine o status e o ponto do jogo com base na soma dos dados */
switch ( sum ) {
/*ganhar no primeiro rolo */
case 7:
case 11:
gameStatus = WON;
chatter();
break; /* exit switch */
/* perder no primeiro rolo */
case 2:
case 3:
case 12:
gameStatus = LOST;
chatter();
break; /* exit switch */
/* relembrar ponto*/
default:
gameStatus = CONTINUE;
myPoint = sum;
printf( "Point is %d\n", myPoint );
chatter();
break; /* exit switch */
} /* end switch */
/* enquanto o jogo não está completo */
while ( gameStatus == CONTINUE ) {
chatter();
sum = rollDice(); /* rolar dados novamente */
/* determine o status do jogo */
if ( sum == myPoint ) {
gameStatus = WON; /* ganhar fazendo ponto */
} /* end if */
else {
if ( sum == 7 ) {
gameStatus = LOST; /* perde por rolamento 7 */
} /* end if */
} /* end else */
} /* end while */
/* exibição de mensagem ganha ou perdida e status do jogo*/
if ( gameStatus == WON ) {
printf( "Player wins\n" );
return WON;
} /* end if */
else {
printf( "Player loses\n" );
return LOST;
} /* end else */
} /* end function craps */
Passo 6
E por último a função chatter() responsável por fazer a conversa com o jogador de acordo com o status do jogo.
/* exibe mensagens aleatoriamente para criar "conversa" */
void chatter( void )
{
int select; /* random number */
select = 1 + rand() % 6;
/* choose message at random */
switch ( select ) {
case 1:
printf( "Oh, você está falido, hein?\n" );
break; /* exit switch */
case 2:
printf( "Vamos lá, essa é a chance!\n" );
break; /* exit switch */
case 3:
printf( "Ei, eu acho que esse cara vai quebrar o banco!\n" );
break; /* exit switch */
case 4:
printf( "Você está rico. Agora é a hora de sacar suas fichas!\n" );
break; /* exit switch */
case 5:
printf( "Muita sorte! Esses dados têm que ser carregados!\n" );
break; /* exit switch */
case 6:
printf( "Aposte tudo! Aposte tudo!\n" );
break; /* exit switch */
default:
break; /* exit switch */
} /* end switch */
} /* end function chatter */
E assim nosso programa está finalizado galera. Até o próximo exercício.
Resposta
Código completo:
#include
#include
#include
/* as constantes de enumeração representam o status do jogo */
enum Status { CONTINUE, WON, LOST };
//protótipo das funções
int rollDice( void );
enum Status craps( void );
void chatter( void );
int main(){
enum Status result; /* resultado do jogo atual */
int wager = 0; /* aposta para o jogo atual */
int bankBalance = 1000; /* saldo bancário atual */
srand( time( NULL ) ); /* gerador de números aleatórios de sementes */
/* exibir saldo atual e solicitar a aposta */
printf( "Você tem $%d no banco.\n", bankBalance );
printf( "Faça sua aposta: " );
scanf( "%d", &wager );
/* loop enquanto não é aposta válida */
while( wager 1000 ){
printf( "Por favor, aposte um valor válido.\n" );
scanf( "%d", &wager );
}
result = craps();
/* se o jogador perdeu o jogo atual */
if ( result == LOST ) {
/* diminuir o balance por aposta e exibir novo saldo */
bankBalance -= wager;
printf( "Seu novo saldo bancário é de $%d\n", bankBalance );
/* se o saldo for 0 */
if ( bankBalance == 0 ) {
printf( "Desculpe. Você está quebrado! Obrigado por jogar.\n" );
}
}
else{ /* jogador ganhou jogo */
/* aumentar o saldo por aposta e exibir novo saldo */
bankBalance += wager;
printf( "Seu novo saldo bancário é de $%d\n", bankBalance );return 0;
}
return 0;
}
/* rolar dados, calcular a soma e exibir resultados */
int rollDice( void )
{
int die1; /* primeiro valor */
int die2; /* segunda valor */
int workSum; /* soma do dado */
die1 = 1 + rand() % 6; /* escolha do primiero valor*/
die2 = 1 + rand() % 6; /* escolha do segundo valor*/
workSum = die1 + die2; /* smas do primeiro valor e segundo*/
/* exibir resultados deste rolo */
printf( "Player jogou %d + %d = %d\n", die1, die2, workSum );
return workSum; /* return sum of dice */
} /* end function rollDice */
/* craps jogo, retorna resultado do jogo */
enum Status craps( void )
{
enum Status gameStatus; /* pode CONTINUAR, WON ou LOST */
int sum; /* rolo atual de dados */
int myPoint; /* valor de ponto */
sum = rollDice(); /* primeiro rolo de dados */
/* determine o status e o ponto do jogo com base na soma dos dados */
switch ( sum ) {
/*ganhar no primeiro rolo */
case 7:
case 11:
gameStatus = WON;
chatter();
break; /* exit switch */
/* perder no primeiro rolo */
case 2:
case 3:
case 12:
gameStatus = LOST;
chatter();
break; /* exit switch */
/* relembrar ponto*/
default:
gameStatus = CONTINUE;
myPoint = sum;
printf( "Point is %d\n", myPoint );
chatter();
break; /* exit switch */
} /* end switch */
/* enquanto o jogo não está completo */
while ( gameStatus == CONTINUE ) {
chatter();
sum = rollDice(); /* rolar dados novamente */
/* determine o status do jogo */
if ( sum == myPoint ) {
gameStatus = WON; /* ganhar fazendo ponto */
} /* end if */
else {
if ( sum == 7 ) {
gameStatus = LOST; /* perde por rolamento 7 */
} /* end if */
} /* end else */
} /* end while */
/* exibição de mensagem ganha ou perdida e status do jogo*/
if ( gameStatus == WON ) {
printf( "Player wins\n" );
return WON;
} /* end if */
else {
printf( "Player loses\n" );
return LOST;
} /* end else */
} /* end function craps */
/* exibe mensagens aleatoriamente para criar "conversa" */
void chatter( void )
{
int select; /* random number */
select = 1 + rand() % 6;
/* choose message at random */
switch ( select ) {
case 1:
printf( "Oh, você está falido, hein?\n" );
break; /* exit switch */
case 2:
printf( "Vamos lá, essa é a chance!\n" );
break; /* exit switch */
case 3:
printf( "Ei, eu acho que esse cara vai quebrar o banco!\n" );
break; /* exit switch */
case 4:
printf( "Você está rico. Agora é a hora de sacar suas fichas!\n" );
break; /* exit switch */
case 5:
printf( "Muita sorte! Esses dados têm que ser carregados!\n" );
break; /* exit switch */
case 6:
printf( "Aposte tudo! Aposte tudo!\n" );
break; /* exit switch */
default:
break; /* exit switch */
} /* end switch */
} /* end function chatter */