Jogo da Velha (corrigido)
Publicado por Hunz 02/09/2004
[ Hits: 20.464 ]
Homepage: http://tnegri.com/
O velha.c corrigido..
* Sem o uso de "goto" agora.. :)
* Com o uso do "for" para economizar várias linhas de código repetitivo :)
* Adicionei uma função que mostra se um número é divisivel por outro (retirada de um script aqui no site do VOL). Função usada para determinar de quem é a vez de jogar.
Abraços,
Fiquem com Deus;
/* *****************************************
AUTOR: Thiago ( hunz )
EMAIL / MSN: tn_negri@hotmail.com
ESPAÇO VOL: www.vivaolinux.com.br/~hunz
***************************************** */
#include <stdio.h>
#include <stdlib.h>
char set;
int linha=0,coluna=0,win,casa[3][3];
void draw(int x, int y) {
if (casa[x][y] == '{FONTE}') printf(" ");
if (casa[x][y] == 1) printf("X");
if (casa[x][y] == 2) printf("O");
}
void limpa() {
printf("\e[H\e[2J");
}
void jogo() {
printf(" 1 2 3\n");
printf("1 ");
draw(0,0);
printf(" | ");
draw(0,1);
printf(" | ");
draw(0,2);
printf("\n ---+---+---\n2 ");
draw(1,0);
printf(" | ");
draw(1,1);
printf(" | ");
draw(1,2);
printf("\n ---+---+---\n3 ");
draw(2,0);
printf(" | ");
draw(2,1);
printf(" | ");
draw(2,2);
}
void check() {
int i=0;
for (i=0;i<3;i++) { /* Horizontal */
if (casa[i][0] == casa[i][1] && casa[i][0] == casa[i][2]) {
if (casa[i][0] == 1) win=1;
if (casa[i][0] == 2) win=2;
}
}
for (i=0;i<3;i++) { /* Vertical */
if (casa[0][i] == casa[1][i] && casa[0][i] == casa[2][i]) {
if (casa[0][i] == 1) win=1;
if (casa[0][i] == 2) win=2;
}
}
if (casa[0][0] == casa[1][1] && casa[0][0] == casa[2][2]) { /* Diagonal Cima->Baixo*/
if (casa[0][0] == 1) win=1;
if (casa[0][0] == 2) win=2;
}
if (casa[0][2] == casa[1][1] && casa[0][2] == casa[2][0]) { /* Diagonal Baixo->Cima */
if (casa[0][2] == 1) win=1;
if (casa[0][2] == 2) win=2;
}
}
void play(int player) {
int i=0;
if (player==1) set=1;
if (player==2) set=2;
play:
while (i==0) {
linha=0;
coluna=0;
while (linha<1 || linha>3) {
printf("\nJogador %d. Escolha a Linha (1,2,3): ",set);
scanf("%d",&linha);
getchar();
}
while (coluna<1 || coluna>3) {
printf("\nJogador %d. Escolha a Coluna (1,2,3): ",set);
scanf("%d",&coluna);
getchar();
}
linha--;
coluna--;
if (casa[linha][coluna] != 1 && casa[linha][coluna] != 2) {
casa[linha][coluna]=set;
i=1;
}
else {
printf("A casa está em uso! Jogue Novamente..\n");
sleep(2);
limpa();
jogo();
}
}
}
char divi(int a, int b) {
return (!(a%b));
}
void main() {
int i=0;
for (i=0;i<9;i++) {
limpa();
jogo();
if(!divi(i,2)) play(2);
else play(1);
check();
if (win == 1 || win == 2) i=10;
}
limpa();
jogo();
if (win == 1 || win == 2) printf("\nJogador %d venceu o jogo!\n",win);
else printf("\nEmpate!\n");
}
Conta e substitui caracteres de uma frase
Arquivo introdutório para chamadas de funções
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Ativando e usando "zoom" no ambiente Cinnamon
Vídeo Nostálgico de Instalação do Conectiva Linux 9
Como realizar um ataque de força bruta para desobrir senhas?
Estou tentando ser legalista, mas tá complicado! (6)
Queda no serviços da Cloudflare, alguns sites estão fora do ar. (1)
Perfil criado no samba ad dc não loga no Windows 10 e 11 (11)









