A máquina nao perdoa (jogo da velha em c -arquivo correto, agora)
Publicado por Marcos Melo 24/02/2005
[ Hits: 18.485 ]
Demorou, mas consegui fazer a máquina analisar o jogo satisfatoriamente.
O programa, Às vezes, "se distrai", mas na maoir parte do tempo joga corretamente.
eu já havia postado esse programa antes, mas cometi um erro no upload, e postei o arquivo de outro cara, que eu havia baixado. Era um jogo da velha, tambem, mas diferente do meu.
#include <stdio.h> int jogarx = 0; int jogary = 0; struct jogada { int x; int y; long jogador; }; struct jogo { int casa[3][3]; int valor[3][3]; } pou; long contador = 0; main() { int pontos_maq = 0; int pontos_hom = 0; long decr = 1024; int falso; int x, y; struct jogada teste; struct jogada *pega = &teste; int verifica; int jogador = -1; int primeiro = -1; pega->jogador = 0; pega->x = 0; pega->y = 0; while (1 > 0) { verifica = ver_se_ganhou(pou, 0); if (verifica == (1)) pontos_maq++; if (verifica == -1) pontos_hom++; primeiro = primeiro * (-1); jogador = primeiro; for (x = 0; x < 3; x++) for (y = 0; y < 3; y++) pou.casa[x][y] = 0; while (ver_se_ganhou(pou, 0) == 0 && empate(pou) == 0) { imprime(pou, 0); printf("---\n"); if (jogador == 1) { // printf("maquina\n"); escolhe(pou, 0, decr); x = jogarx; y = jogary; pou.casa[x][y] = 1; imprime(pou, 0); sleep(1); jogador = (-1); } else { falso = 0; while (falso == 0) { printf("maquina: %i\nhomem: %i\n", pontos_maq, pontos_hom); printf("faça sua jogada:"); scanf("%1d%1d", &x, &y); if (pou.casa[x][y] == 0) falso = 1; } printf("x: %i y: %i\n", x, y); pou.casa[x][y] = -1; imprime(pou, 0); jogador = 1; } } } printf("asfdas"); } int empate(struct jogo tab) { int x, y; for (x = 0; x < 3; x++) { for (y = 0; y < 3; y++) { if (tab.casa[x][y] == 0) { return (0); } } } return (1); } //struct jogo //zerar() //{ // int x, y; // struct jogo tab; // for (x = 0; x < 3; x++) // for (y = 0; y < 3; y++) // tab.casa[x][y] = 0; // return tab; //} escolhe(struct jogo tabula, int decr) { int dee = 2000; struct jogo tabe = tabula; struct jogada maior; long valor = 0; int x, y; maior.jogador=-123456789; for (x = 0; x < 3; x++) { for (y = 0; y < 3; y++) { if (tabe.casa[x][y] == 0) { if (contador == 0) { } contador = 0; rodar(tabe, x, y, 1, 2000, 3); valor = contador; // printf // ("(valor %i)\t(contador %i)\t(%i,%i)\t(maior:%i)", // valor, contador, x, y, maior.jogador); if (valor >= maior.jogador) { maior.jogador = valor; jogarx = x; jogary = y; // printf("\t(%i,%i)", jogarx, jogary); } // putchar('\n'); } } } } rodar(struct jogo tabula, int x, int y, int player, int decr, int rr) { int valor = 0; struct jogo tab = tabula; int resultado; int ddd = decr; int a, b; tab.casa[x][y] = player; player = player * (-1); resultado = ver_se_ganhou(tab, ddd); if (ddd > 0) { ddd = (ddd - 1000); } if (resultado != 0) return resultado; for (a = 0; a < 3; a++) { for (b = 0; b < 3; b++) { if (tab.casa[a][b] == 0) { rodar(tab, a, b, player, ddd, 2); } } } return valor; } imprime(struct jogo taba, double valor) { struct jogo tab = taba; int x, y; system("clear"); printf(" 0 1 2\n"); // printf(" _____\n"); for (x = 0; x < 3; x++) { putchar(x + '0'); putchar('|'); for (y = 0; y < 3; y++) { int aa; switch (tab.casa[y][x]) { case -1: aa = 'X'; break; case 1: aa = 'O'; break; case 0: aa = ' '; break; } putchar(aa); putchar('|'); } printf("\n"); } printf(" ---\n"); printf("contador: %i\n", contador); if (ver_se_ganhou(tab, 9) != 0) { } } int ver_se_ganhou(struct jogo tab, long decr) { /*ver vertical */ int x, y; int casinha; for (x = 0; x < 3; x++) { casinha = tab.casa[x][0]; for (y = 0; casinha != 0 && tab.casa[x][y] == casinha; y++) if (y == 2) { contador += casinha; contador = contador + (casinha * decr); return casinha; } } /* ver horiaontal*/ for (y = 0; y < 3; y++) { casinha = tab.casa[0][y]; for (x = 0; casinha != 0 && tab.casa[x][y] == casinha; x++) if (x == 2) { contador += casinha; contador = contador + (casinha * decr); return casinha; } } /*ver primeira diagonal*/ if (tab.casa[0][0] != 0 && (tab.casa[0][0] == tab.casa[1][1]) && (tab.casa[1][1] == tab.casa[2][2])) { contador += tab.casa[0][0]; contador = contador + (tab.casa[0][0] * decr); return tab.casa[0][0]; } /*ver segunda diagonal*/ if (tab.casa[2][0] != 0 && (tab.casa[2][0] == tab.casa[1][1]) && (tab.casa[1][1] == tab.casa[0][2])) { contador += tab.casa[2][0]; contador = contador + (tab.casa[0][0] * decr); return tab.casa[2][0]; } return 0; }
primeirafuncao.c - Criando uma função
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Youtube e networkmeneger para de funcionar (0)
Minha rede tem um espaço invisível que não dá pra digitar o nome da re... (1)
Pedagogia no brasil não passa de alfabetização por m4sturbação mental ... (2)
compilação samba 4.22 rock linux 9.5 (3)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (7)