Ir ao conteúdo

Posts recomendados

Postado

Implementei o "famoso" jogo do blackjack, ou por alguns conhecido como 21.

o Algoritmo faz.


[COLOR="SeaGreen"]Novo Jogo.
Informações do jogo,
randomizar carta para o jogador
randomizar carta para a Maquina
Gerar relatório sobre o resultado [/COLOR]
[COLOR="SeaGreen"]Escolha de Dificuldade.
fácil,Normal e difícil.
Gera Relatorio de Estatistica de Vitorias e Derrotas[/COLOR]

Segue no SPOILER o código.



#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
#include <conio2.h>
#include <stdlib.h>
#include <time.h>

/* Definições */
#define ENTER 13
#define ACIMA 72
#define ABAIXO 80
#define ESC 27

int dificuldade=0; // Dificuldade 1 fácil | Dificuladde 2 Normal | Dificuldade 3 difícil
int resultado =0; // Resultado = 0 Maquina vence ~ Resultado = 1 Jogador vence // resultado = 2 acontece nada.
int total_jogos = 0;

/*Estrutura para os Jogadores */
typedef struct Jogador{
char nome[40];
int pontos;
int estora;
int T_V;
int V_F;
int V_N;
int V_D;
int T_D;
int D_F;
int D_N;
int D_D;
} player;

typedef struct Maquina{
int pontos;
int minimo;
int maximo;
int estora;
int T_V;
int T_D;
int V_F;
int V_N;
int V_D;
int D_F;
int D_N;
int D_D;

} maquina;

void Randomize(void)
{
srand(time(NULL));
}

void Aprensenta()
{
char tecla;
do{
textcolor(WHITE);
gotoxy(35,8);printf("Jogo do 21.");
gotoxy(32,9);printf("Desenvolvido por:");
gotoxy(33,10);textcolor(RED);printf("Rafael Zurawski");
gotoxy(36,12);textcolor(WHITE);system("echo Dúvidas: ");
gotoxy(28,13);textcolor(LIGHTGRAY);printf("[email protected]");
gotoxy(28,14);textcolor(LIGHTGRAY);printf("[email protected]");
gotoxy(26,17);
textcolor(WHITE);printf("Presione ");
textcolor(RED);printf("ENTER ");
textcolor(WHITE);system("echo para começar.");
tecla = getch();
}while (tecla!= ENTER);

}

void INICIA_PARTIDA(player *Jogador, maquina *Computador)
{
if(!(Jogador==NULL))
{

Jogador->pontos = 0;
Jogador->estora = 0;
}

if(!(Computador == NULL))
{
Computador-> estora = 0;
Computador-> maximo = 21;
Computador-> minimo = 0;
Computador->pontos = 0;
}
}

void Novo(player *Jogador, maquina *Computador)
{
if(!(Jogador==NULL))
{

Jogador->pontos = 0;
Jogador->estora = 0;
Jogador->T_V = 0;
Jogador->V_F = 0;
Jogador->V_N = 0;
Jogador->V_D = 0;
Jogador->T_D = 0;
Jogador->D_F = 0;
Jogador->D_N = 0;
Jogador->D_D = 0;
}

if(!(Computador == NULL))
{
Computador-> estora = 0;
Computador-> maximo = 21;
Computador-> minimo = 0;
Computador->pontos = 0;
Computador->T_V = 0;
Computador->V_F = 0;
Computador->V_N = 0;
Computador->V_D = 0;
Computador->T_D = 0;
Computador->D_F = 0;
Computador->D_N = 0;
Computador->D_D = 0;
}




}

void INFO_GAME()
{
system("cls");
gotoxy(35,5);textcolor(WHITE); printf("Jogo do 21.");
gotoxy(24,7);textcolor(LIGHTGRAY);printf("Este Jogo persiste no Classico");
gotoxy(24,8);textcolor(LIGHTGRAY);printf("Jogo de Cartas onde o objetivo");
gotoxy(30,9);textcolor(LIGHTGRAY);system("echo É somar 21 Pontos.");
gotoxy(35,11);textcolor(WHITE);system("echo Aplicação:");
gotoxy(10,13);textcolor(LIGHTRED);system("echo Randomizar Para o jogador valor de 1 a 12 (ÁS ao REI)");
gotoxy(10,14);textcolor(LIGHTRED);system("echo Randomizar para o Computador o valor de 1 a 12 (ÁS ao REI)");
gotoxy(10,15);textcolor(LIGHTRED);system("echo Randomizar um valor mínimo para o computador jogar");
gotoxy(10,16);textcolor(LIGHTRED);printf("Realizar teste de Estouro (pontos acima de 21)");
gotoxy(30,17);textcolor(LIGHTRED);system("echo para o Jogador e a Máquina.");
textcolor(LIGHTGRAY);
getch();

}


void TELA(player *Jogador, int valor_carta, maquina *MAQ)
{
system("cls");
int linha=15,coluna=6;
gotoxy(15,5);printf("____________________________________________");
for(coluna;coluna<17;coluna++)
{
gotoxy(14,coluna);printf("|");
gotoxy(36,coluna);printf("|");
gotoxy(59,coluna);printf("|");
}
for(linha;linha<59;linha++)
{
gotoxy(linha,17);printf("%c", 238);
}
// Mostra dados do Jogador
gotoxy(20,7);system("echo Você: ");
gotoxy(26,7);printf("%s",Jogador->nome);
gotoxy(18,8);printf("Pontos: ");
gotoxy(26,8);printf("%2d",Jogador->pontos);
gotoxy(16,15);printf("Carta Recebida [ ]");
gotoxy(32,15);printf("%2d",valor_carta);
gotoxy(0,23);

gotoxy(40,7);system("echo Adversário:");
gotoxy(52,7);printf("PC");
gotoxy(40,8);printf("Pontos:");
gotoxy(48,8);printf("%2d",MAQ->pontos);

}

int MENU()
{

int posicao = 6, tecla;
int i;
int aux;
do{
system("cls");
textcolor(LIGHTGRAY);
gotoxy(24,5);printf("____________MENU____________");
gotoxy(23,6);printf("| Nova Partida |");
gotoxy(23,7);printf("| Info do Jogo |");
gotoxy(23,8);printf("| Terminar |");
for(i=24;i<52;i++)
{
gotoxy(i,9);printf("%c", 238);
}
gotoxy(24,posicao);printf("%c%c",16,16);gotoxy(50,posicao);printf("%c%c",17,17);
tecla=getch();
if(tecla == ABAIXO)
{
posicao=posicao+1;
if(posicao==9)
{
posicao=6;
}
}
if (tecla == ACIMA)
{
posicao=posicao-1;
if(posicao==5)
{
posicao=8;
}
}

}while(tecla!= ENTER);
aux=posicao;
return aux;
}

int MENU_DIFICULDADE()
{

int posicao = 6, tecla;
int i;
int aux;
do{
system("cls");
textcolor(LIGHTGRAY);
gotoxy(24,5);printf("____________MENU____________");
gotoxy(23,6);printf("| fácil |");
gotoxy(23,7);printf("| Normal |");
gotoxy(23,8);printf("| difícil |");
for(i=24;i<52;i++)
{
gotoxy(i,9);printf("%c", 238);
}
gotoxy(24,posicao);printf("%c%c",16,16);gotoxy(50,posicao);printf("%c%c",17,17);
tecla=getch();
if(tecla == ABAIXO)
{
posicao=posicao+1;
if(posicao==9)
{
posicao=6;
}
}
if (tecla == ACIMA)
{
posicao=posicao-1;
if(posicao==5)
{
posicao=8;
}
}

}while(tecla!= ENTER);
aux=posicao;
return aux;
}



int RANDOMIZA_CARTA(int *valor_carta)
{
Randomize();
*valor_carta = 0;
*valor_carta = rand();
if(*valor_carta == 0);
{
*valor_carta = (rand()%12)+1;
}


}

int TESTA_ESTOURO(player *Jogador)
{
if(Jogador->pontos>21)
{
return 1;
}
else{
return 0;
}
}

void RESULTADO(player *Jogador, maquina *Maquina)
{
if(resultado == 1 && dificuldade == 1)
{
Jogador->T_V = Jogador->T_V +1;
Jogador->V_F = Jogador->V_F +1;
Maquina->T_D = Maquina->T_D +1;
Maquina->D_F = Maquina->D_F +1;
}

if(resultado == 1 && dificuldade == 2)
{
Jogador->T_V = Jogador->T_V +1;
Jogador->V_N = Jogador->V_N +1;
Maquina->T_D = Maquina->T_D +1;
Maquina->D_N = Maquina->D_N +1;
}

if(resultado == 1 && dificuldade == 3)
{
Jogador->T_V = Jogador->T_V +1;
Jogador->V_D = Jogador->V_D +1;
Maquina->T_D = Maquina->T_D +1;
Maquina->D_D = Maquina->D_D +1;
}

// Resultados Maquina

if(resultado == 0 && dificuldade == 1)
{
Maquina->T_V = Jogador->T_V +1;
Maquina->V_F = Jogador->V_F +1;
Jogador->T_D = Maquina->T_D +1;
Jogador->D_F = Maquina->D_F +1;
}

if(resultado == 0 && dificuldade == 2)
{
Maquina->T_V = Jogador->T_V +1;
Maquina->V_N = Jogador->V_N +1;
Jogador->T_D = Maquina->T_D +1;
Jogador->D_N = Maquina->D_N +1;
}

if(resultado == 0 && dificuldade == 3)
{
Maquina->T_V = Jogador->T_V +1;
Maquina->V_D = Jogador->V_D +1;
Jogador->T_D = Maquina->T_D +1;
Jogador->D_D = Maquina->D_D +1;
}



}


void TESTE(player *Jogador, maquina *MAQ)
{
if(Jogador->pontos > MAQ->pontos && Jogador->estora == 0)
{
system("cls");
gotoxy(20,15);textcolor(YELLOW);printf(" O Jogador %s ganhou com %2d Pontos!!",Jogador->nome,Jogador->pontos);
resultado = 1;

}

if(Jogador->pontos < MAQ->pontos && Jogador->estora == 0 && MAQ->estora ==1)
{
system("cls");
gotoxy(20,15);textcolor(YELLOW);printf(" O Jogador %s ganhou com %2d Pontos!!",Jogador->nome,Jogador->pontos);
resultado = 1;

}
if(MAQ->pontos < Jogador->pontos && Jogador->estora == 1 && MAQ->estora ==0)
{
resultado = 0;
system("cls");
gotoxy(10,15);textcolor(YELLOW);printf(" O Jogador %s perdeu. Estorou. e Maquina teve %2d Pontos !!",Jogador->nome,MAQ->pontos);

}

if(Jogador->pontos < MAQ->pontos && MAQ->estora == 0)
{
resultado = 0;
system("cls");
gotoxy(10,15);textcolor(YELLOW);printf(" O Jogador %s perdeu por %2d Pontos a %2d Pontos !!",Jogador->nome,Jogador->pontos,MAQ->pontos);

}

if(Jogador->estora == 1 && MAQ->pontos<21 && MAQ->estora ==0)
{
resultado = 0;
system("cls");
gotoxy(20,15);textcolor(YELLOW);printf(" O Jogador %s perdeu. Estorou. e Maquina teve %2d Pontos !!",Jogador->nome,MAQ->pontos);

}
if(Jogador->pontos == MAQ->pontos)
{
resultado = 2;
system("cls");
gotoxy(20,15);textcolor(YELLOW);printf(" Empate. Ambos Tiveram %d Pontos!",Jogador->pontos);
}
if(Jogador->pontos == MAQ->pontos && Jogador->estora == 1 && MAQ->estora == 1)
{
resultado = 2;
system("cls");
gotoxy(20,15);textcolor(YELLOW);printf(" Empate. Ambos Tiveram %d Pontos e Ultrapassaram 21 Pontos!",Jogador->pontos);
}

if (Jogador->estora == 1 && MAQ->estora == 1)
{
resultado = 2;
system("cls");
gotoxy(20,15);textcolor(YELLOW);printf(" Empate. Ambos Ultrapassaram 21 Pontos");
}



}


void PC_JOGA_FACIL(maquina *MAQ)
{
int min=0;
int max=0;
int carta =0;

Randomize();

MAQ->minimo = rand()%21;

do
{
carta = rand()%12;
MAQ->pontos = MAQ->pontos + carta;
}while(MAQ->pontos <= MAQ->minimo);

if(MAQ->pontos > 21)
{
MAQ->estora = 1;
}
}

void PC_JOGA_NORMAL(maquina *MAQ)
{
int min=0;
int max=0;
int carta =0;
int random =0;
int i;
Randomize();

for (i=1;i<3;i++)
{
random =0;
random = rand()%12;
MAQ->minimo = MAQ->minimo + random;
}

do
{
carta = rand()%8;
MAQ->pontos = MAQ->pontos + carta;
}while(MAQ->pontos <= MAQ->minimo);

if(MAQ->pontos > 21)
{
MAQ->estora = 1;
}
}

void PC_JOGA_DIFICIL(maquina *MAQ)
{
int min=0;
int max=0;
int carta =0;
int random =0;
int a;
Randomize();

for (a = 0;a<7;a++)
{

random = (rand()%4) + 1;
MAQ->minimo = MAQ->minimo + random;
}


do
{
carta = rand()%4;
MAQ->pontos = MAQ->pontos + carta;

}while(MAQ->pontos <= MAQ->minimo);

if(MAQ->pontos > 21)
{
MAQ->estora = 1;
}
}


void ESTATISTICA(player *Jogador, maquina *Maquina, int jogos)
{
int m_v = Maquina->T_V;
int j_v = Jogador->T_V;

system("cls");
gotoxy(30,9); printf(" Total de Jogos: %d",jogos);
gotoxy(10,11);printf("Jogador Venceu: %d (%d%%)",Jogador->T_V,Jogador->T_V*100/jogos);
gotoxy(10,12);printf("Jogador Perdeu: %d (%d%%)",Jogador->T_D,Jogador->T_D*100/jogos);
gotoxy(40,11);printf("Computador Venceu: %d (%d%%)",Maquina->T_V,Maquina->T_V*100/jogos);
gotoxy(40,12);printf("Computador Perdeu: %d (%d%%)",Maquina->T_D,Maquina->T_D*100/jogos);


gotoxy(7,15);printf("Jogador Vitorias: %d",j_v);
printf("\n Nivel fácil: %d",Jogador->V_F);
printf("\n Nivel Normal: %d",Jogador->V_N);
printf("\n Nivel difícil: %d",Jogador->V_D);

gotoxy(45,15);printf("Computador Vitorias: %d",m_v);
gotoxy(48,16);printf("Nivel fácil: %d",Maquina->V_F);
gotoxy(48,17);printf("Nivel Normal: %d",Maquina->V_N);
gotoxy(48,18);printf("Nivel difícil: %d",Maquina->V_D);



gotoxy(26,22);
textcolor(WHITE);printf("Presione ");
textcolor(RED);printf("ENTER ");
textcolor(WHITE);system("echo para Continuar");
getch();
}

main()
{


int op;
int carta=0;;
int sair=1;
srand(time(0));
player *PPL = NULL;
PPL = (player *)malloc(sizeof(player));
maquina *MAQ = NULL;
MAQ = (maquina *)malloc(sizeof(maquina));
FILE *Player;
FILE *Computer;


Aprensenta();
Novo(PPL,MAQ);
system("cls");
gotoxy(30,8);printf("Informe seu Nome: ");
scanf("%s",PPL->nome);
do
{
switch(MENU())
{
case 6:
{



switch(MENU_DIFICULDADE())
{
case 6: dificuldade =1;break;
case 7: dificuldade =2;break;
case 8: dificuldade =3;break;
}


INICIA_PARTIDA(PPL,MAQ);
resultado = 0;
TELA(PPL,carta,MAQ);
do
{
gotoxy(1,21);printf("Deseja Receber uma Carta?");
gotoxy(1,22);printf("Sim - Tecle ENTER");
gotoxy(1,23);printf("Nao - Tecle ESC");
op = getch();


switch (op)
{
case ENTER:
{
carta = 0;
carta = rand()%13;
PPL->pontos = (PPL->pontos + carta);
TELA(PPL,carta,MAQ);
if(TESTA_ESTOURO(PPL))
{
gotoxy(1,20);textcolor(RED);printf("\n\n\nvoce ultapassou de 21!");
getch();
PPL->estora = 1;
op = 0;
textcolor(LIGHTGRAY);


}
break;
}
case ESC:
{
op = 0;
break;
}
}

}while(op!=0);
carta =0;
if(dificuldade == 1)
{
PC_JOGA_FACIL(MAQ);
}
if(dificuldade == 2)
{
PC_JOGA_NORMAL(MAQ);
}
if(dificuldade == 3)
{
PC_JOGA_DIFICIL(MAQ);
}

TELA(PPL,carta,MAQ);
getch();
system("cls");
gotoxy(27,16);
textcolor(LIGHTBLUE);printf("Gerando Final da Disputa...");
Sleep(2000);
gotoxy(26,17);
textcolor(WHITE);printf("Presione ");
textcolor(RED);printf("ENTER ");
textcolor(WHITE);system("echo para Continuar");
getch();
TESTE(PPL,MAQ);
RESULTADO(PPL,MAQ);
getch();
total_jogos = total_jogos +1;
ESTATISTICA(PPL,MAQ,total_jogos);

break;
}
case 7:
{
INFO_GAME();
getch();
break;
}
case 8:
{
printf("Saindo.");
sair=0;
break;
}


}
}while(sair!=0);
}

Espero que gostem, e aproveitem bem, caso tenham dúvida de como foi implementado. Pode perguntar.

  • Curtir 1
  • 3 anos depois...
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!