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 */