Jogo da velha reverso
Publicado por Djames Suhanko 12/12/2008
[ Hits: 6.599 ]
Homepage: www.phantomsystem.com.br
Um jogo da velha que você deve obrigar o computador a ganhar.
Dessa vez, sem gambiarra de "goto", usando apenas funções recursivas.
#ifdef HAVE_CONFIG_H #include <config.h> #endif #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i; // As onze linhas que compoe a matriz // Linha 3 e 6 sao preenchidas por "_" // Indices de pipe: 5 e 11 // As linhas com 18 posicoes sao para coordenadas numericas char linha1[17], linha2[18], linha3[17], linha4[17], linha5[18], linha6[17]; char linha7[17], linha8[18], linha9[17]; //Definicao das coordenadas //Se limitarmos em 2 casas, havera erro se a digitacao passar de duas posicoes //Deixar esse excesso elimina tal bug char posicao[10]; char vez = 'X'; /* //Zeras as posicoes char zera(){ linha2[2] = ' '; linha2[8] = ' '; linha2[14] = ' '; linha5[2] = ' '; linha5[8] = ' '; linha5[14] = ' '; linha8[2] = ' '; linha8[8] = ' '; linha8[14] = ' '; } zera(); */ char matriz(){ system("clear"); //imprime a matriz linha2[17] = '1'; linha5[17] = '2'; linha8[17] = '3'; printf(" A B C\n"); for (i=0;i<17;i++) { printf("%c", linha1[i]); } printf("\n"); for (i=0;i<18;i++) { printf("%c", linha2[i]); } printf("\n"); for (i=0;i<17;i++) { printf("%c", linha3[i]); } printf("\n"); for (i=0;i<17;i++) { printf("%c", linha4[i]); } printf("\n"); for (i=0;i<18;i++) { printf("%c", linha5[i]); } printf("\n"); for (i=0;i<17;i++) { printf("%c", linha6[i]); } printf("\n"); for (i=0;i<17;i++) { printf("%c", linha7[i]); } printf("\n"); for (i=0;i<18;i++) { printf("%c", linha8[i]); } printf("\n"); for (i=0;i<17;i++) { printf("%c", linha9[i]); } printf("\n"); } //Gera numeros aleatorios de 1 a 9 //Computador joga int j=0; int computador(){ int myrand( int N ) { return random() % N; } unsigned int seed; seed=time(0); srandom(seed); int compopt = random()%10; if (compopt == 0) { compopt = 1; } int numeros[10]; numeros[j] = compopt; //Esse printf abaixo debuga o random printf("%d",numeros[j]); int x; if (j != 0) { for (x=j;x>-1;x--) { if (j != 0) { if (numeros[j] == numeros[j-1]) { sleep(1); computador(); } j = j-1; } } } j = j+1; //Posicoes 1 2 e 3 da primeira linha if (compopt == 1) { if (linha2[2] == '*' || linha2[2] == 'X') { sleep(1); computador(); } else { linha2[2] = vez; } } else if (compopt == 2) { if (linha2[8] == '*' || linha2[8] == 'X') { sleep(1); computador(); } else { linha2[8] = vez; } } else if (compopt == 3) { if (linha2[14] == '*' || linha2[14] == 'X') { sleep(1); computador(); } else { linha2[14] = vez; } } // Posicoes 1 2 e 3 da segunda linha else if (compopt == 4) { if (linha5[2] == '*' || linha5[2] == 'X') { sleep(1); computador(); } else { linha5[2] = vez; } } else if (compopt == 5) { if (linha5[8] == '*' || linha5[8] == 'X') { sleep(1); computador(); } else { linha5[8] = vez; } } else if (compopt == 6) { if (linha5[14] == '*' || linha5[14] == 'X') { sleep(1); computador(); } else { linha5[14] = vez; } } //Posicoes 1 2 e 3 da terceira linha else if (compopt == 7) { if (linha8[2] == '*' || linha8[2] == 'X') { sleep(1); computador(); } else { linha8[2] = vez; } } else if (compopt == 8) { if (linha8[8] == '*' || linha8[8] == 'X') { sleep(1); computador(); } else { linha8[8] = vez; } } else if (compopt == 9) { if (linha8[14] == '*' || linha8[14] == 'X') { sleep(1); computador(); } else { linha8[14] = vez; } } }//fim da funcao //humano joga char humano(){ printf("Entre com a coordenada: >> "); fflush(NULL); scanf("%s",&posicao); if (!strcmp(posicao,"a1")) { if (!(linha2[2] == '*' || linha2[2] == 'X')) { linha2[2] = '*'; } else { printf("Casa ocupada. tente de novo\n"); humano(); } } else if (!strcmp(posicao,"b1")) { if (!(linha2[8] == '*' || linha2[8] == 'X')) { linha2[8] = '*'; } else { printf("Casa ocupada. tente de novo\n"); humano(); } } else if (!strcmp(posicao,"c1")) { if (!(linha2[14] == '*' || linha2[14] == 'X')) { linha2[14] = '*'; } else { printf("Casa ocupada. tente de novo\n"); humano(); } } else if (!strcmp(posicao,"a2")) { if (!(linha5[2] == '*' || linha5[2] == 'X')) { linha5[2] = '*'; } else { printf("Casa ocupada. tente de novo\n"); humano(); } } else if (!strcmp(posicao,"b2")) { if (!(linha5[8] == '*' || linha5[8] == 'X')) { linha5[8] = '*'; } else { printf("Casa ocupada. tente de novo\n"); humano(); } } else if (!strcmp(posicao,"c2")) { if (!(linha5[14] == '*' || linha5[14] == 'X')) { linha5[14] = '*'; } else { printf("Casa ocupada. tente de novo\n"); humano(); } } else if (!strcmp(posicao,"a3")) { if (!(linha8[2] == '*' || linha8[2] == 'X')) { linha8[2] = '*'; } else { printf("Casa ocupada. tente de novo\n"); humano(); } } else if (!strcmp(posicao,"b3")) { if (!(linha8[8] == '*' || linha8[8] == 'X')) { linha8[8] = '*'; } else { printf("Casa ocupada. tente de novo\n"); humano(); } } else if (!strcmp(posicao,"c3")) { if (!(linha8[14] == '*' || linha8[14] == 'X')) { linha8[14] = '*'; } else { printf("Casa ocupada. tente de novo\n"); humano(); } } else { printf("Opcoes validas:\n"); printf("a1,a2,a3,b1,b2,b3,c1,c2,c3\n"); printf("Tente novamente:\n"); humano(); } } //Preenche as posicoes de pipe for (i=5;i<12;i++) { if (i == 5 || i == 11) { linha1[i] = '|'; linha2[i] = '|'; linha3[i] = '|'; linha4[i] = '|'; linha5[i] = '|'; linha6[i] = '|'; linha7[i] = '|'; linha8[i] = '|'; linha9[i] = '|'; } } //Preenche as linhas 3 e 6 for (i=0;i<17;i++) { if (i == 5 || i == 11) { i = i+1; } linha3[i] = '_'; linha6[i] = '_'; } // Preenche os espacos em branco de todas as linhas for (i=0;i<17;i++) { if(i == 5 || i == 11) { i = i+1; } linha1[i] = ' '; linha2[i] = ' '; linha4[i] = ' '; linha5[i] = ' '; linha7[i] = ' '; linha8[i] = ' '; linha9[i] = ' '; } //imprime a matriz //linha2[2] = '*'; //linha2[8] = '*'; //linha2[14] = '*'; matriz(); int a; for (a=0;;a++) { humano(); sleep(1); computador(); sleep(1); matriz(); } }
Calcular dia da semana a partir de uma data sugerida
Gerando uma "number list" de 6 digitos
Função que converte números decimais em binários
Nenhum comentário foi encontrado.
Como agendar um backup automático do PostgreSQL no Cron evitando o problema de senha
Como preparar o Vim/Neovim para corrigir ortografia em português
Dark Web e Malwares na internet, quanto custa?
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Como verificar o hash de um arquivo baixado da Internet e como criar um hash
Debian 12 - IPTABLES - removendo NFTABLES
OverWatch 2 - Abrindo portas do jogo no Iptables.
Como instalar o adaptador wifi USB Intelbras ACtion A1200 no Linux Mint
Como normalizar seus arquivos MP3 para que fiquem no mesmo volume
Tela branca. Como faço para aparecer a imagem novamente? (1)
O que você está ouvindo agora? [2] (129)
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba
[Shell Script] Tire screenshots com Scrot facilmente com Zscrot
[Shell Script] DioPSI - Script multidistro para instalar programas
[Shell Script] ARS Vídeos - Cortador de vídeos e webcam shooter