Jogo da Velha (corrigido)
Publicado por Hunz 02/09/2004
[ Hits: 20.545 ]
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");
}
Algoritmo de ordenação: Selection Sort
Tabela hash com classes e tratamento de colisões por encadeamento
Calculo de Diagonais de Triangulo
Papagaiando o XFCE com temas e recursos
WhatsApp com Chamadas no Linux via Waydroid
XFCE - quase um Gnome ou Plasma mas muito mais leve
LXQT - funcional para máquinas pererecas e usuários menos exigentes
Como cortar as partes de um vídeo com passagens de áudio em branco
Tiling automático no KDE Plasma
SNMP Scan no OCS Inventory só funciona com HTTPS corretamente configurado
Links importantes de usuários do vol (4)
GOG confirma suporte oficial ao sistema Linux: "o trabalho começo... (2)
Para os fãs de DOOM, um vídeo do Romero (com dublagem em pt-br disponí... (2)









