Ir ao conteúdo

Erro jogo da velha !!!


yagoftware

Posts recomendados

Postado

olha ta quase terminado

o programa que criei do jogo da velha !!

so falta achar o erro quando ele verifica se as casas ja tem X ou O, pois

parece que se ocorrer uma vez que esteja ocupado

a casa linha 1 coluna 3 fica invisivel

e depois um simples erro de logica da ordem de X e O que não acho.....

que quando se esta assim

| X |

---------

| |X

---------

| | X

ou assim

| |

-------

| X | X

--------

| | X

(tanto pra X ou O )

ele mostra que ganhou também..... "/

#include "stdio.h"

main()

{ char tik, v1[3], v2[3], v3[3], occ;

int l, c, s, i=0;

clrscr();

printf("\n\t\t\tJOGO DA COROCA, quer dizer, DA VELHA !!");

printf("\n\t\t\t---------------------------------------");

printf("\n\n");

printf(" | | \n");

printf("-----------\n");

printf(" | | \n");

printf("-----------\n");

printf(" | | \n");

printf("\n====================================================");

printf("\n\n");

do{i++;

if(i%2!=0){tik='X';}

if(i%2==0){tik='O';}

do{do{occ='n';

printf("\n\nJogador %c, digite linha: ", tik);

scanf("%i", &l);

if(l<1||l>3)

{printf("Essa linha não existe deeer!!");}}

while(l<1||l>3);

do{

printf("\n\nJogador %c, digite coluna: ", tik);

scanf("%i", &c);

if(c<1||c>3)

{printf("Essa coluna não existe deeer!!");}}

while(c<1||c>3);

if(l==1)

{ if(v1[c]=='X'||v1[c]=='O')

{ occ='s';

printf("Esta casa tá ocupada !!");}}

if(l==2)

{ if(v2[c]=='X'||v2[c]=='O')

{ occ='s';

printf("Esta casa tá ocupada !!");}}

if(l==3)

{ if(v3[c]=='X'||v3[c]=='O')

{ occ='s';

printf("Esta casa tá ocupada !!");}}

}while(occ=='s');

occ='n';

if(l==1)

{ if(c==1)

{ v1[1]=tik;

gotoxy(2,5);

printf("%c", tik);}

if(c==2)

{ v1[2]=tik;

gotoxy(6,5);

printf("%c", tik);}

if(c==3)

{ v1[3]=tik;

gotoxy(10,5);

printf("%c", tik);}

}

if(l==2)

{ if(c==1)

{ v2[1]=tik;

gotoxy(2,7);

printf("%c", tik);}

if(c==2)

{ v2[2]=tik;

gotoxy(6,7);

printf("%c", tik);}

if(c==3)

{ v2[3]=tik;

gotoxy(10,7);

printf("%c", tik);}

}

if(l==3)

{ if(c==1)

{ v3[1]=tik;

gotoxy(2,9);

printf("%c", tik);}

if(c==2)

{ v3[2]=tik;

gotoxy(6,9);

printf("%c", tik);}

if(c==3)

{ v3[3]=tik;

gotoxy(10,9);

printf("%c", tik);}

}

gotoxy(1,13);

for(s=1;s<=35;s++)

{ printf(" \n");}

gotoxy(1,13);

if( v1[1]=='X'&&v1[2]=='X'&&v1[3]=='X' ||

v2[1]=='X'&&v2[2]=='X'&&v2[3]=='X' ||

v3[1]=='X'&&v3[2]=='X'&&v3[3]=='X' ||

v1[1]=='X'&&v2[1]=='X'&&v3[1]=='X' ||

v1[2]=='X'&&v2[2]=='X'&&v3[2]=='X' ||

v1[3]=='X'&&v2[3]=='X'&&v3[3]=='X' ||

v1[1]=='X'&&v2[2]=='X'&&v3[3]=='X' ||

v1[3]=='X'&&v2[2]=='X'&&v3[1]=='X' )

{ printf("\n\nJOGADOR XIS VENCEU !!");break;}

if( v1[1]=='O'&&v1[2]=='O'&&v1[3]=='O' ||

v2[1]=='O'&&v2[2]=='O'&&v2[3]=='O' ||

v3[1]=='O'&&v3[2]=='O'&&v3[3]=='O' ||

v1[1]=='O'&&v2[1]=='O'&&v3[1]=='O' ||

v1[2]=='O'&&v2[2]=='O'&&v3[2]=='O' ||

v1[3]=='O'&&v2[3]=='O'&&v3[3]=='O' ||

v1[1]=='O'&&v2[2]=='O'&&v3[3]=='O' ||

v1[3]=='O'&&v2[2]=='O'&&v3[1]=='O' )

{ printf("\n\nJOGADOR CIRCULO VENCEU !!");break;}

}while(i<9);

if(i==9)

{printf("\n\n DEU VELHAAA !!!!");}

getche();

}

alguem pode me ajudar a corrigir esses ultimos dois erros??

Postado

Um dica pra facilitar sua vida:

por que não usa uma matriz 3x3?

int v[3][3];

Outra dica:

Use funções.

Por exemplo, uma função pra escrever os tiks na tela, substituindo todos aqueles do ... while: void marcar(coluna, linha); facilitaria sua vida também.

void marcar(int l, int c, char tik) {
int linha, coluna;
linha = (2+ l) *2 -1;
//(2+1)*2 -1 = 5
//(2+2)*2 -1 = 7
//(2+3)*2 -1 = 9

coluna = (4* c) -2;
//4*1 -2 = 2
//4*2 -2 = 6
//4*3 -2 = 10

gotoxy(linha, coluna);
printf("%c", tik);
}

Um erro que eu achei aqui é que você tá acessando o elemento [3] desses vetores, quando na verdade eles variam de [0] ate [2] apenas.

Na próxima manda o codigo identado que fica melhor pra ver.

[]s

Postado
Um dica pra facilitar sua vida:

por que não usa uma matriz 3x3?

int v[3][3];

Outra dica:

Use funções.

Por exemplo, uma função pra escrever os tiks na tela, substituindo todos aqueles do ... while: void marcar(coluna, linha); facilitaria sua vida também.

void marcar(int l, int c, char tik) {
int linha, coluna;
linha = (2+ l) *2 -1;
//(2+1)*2 -1 = 5
//(2+2)*2 -1 = 7
//(2+3)*2 -1 = 9

coluna = (4* c) -2;
//4*1 -2 = 2
//4*2 -2 = 6
//4*3 -2 = 10

gotoxy(linha, coluna);
printf("%c", tik);
}

Um erro que eu achei aqui é que você tá acessando o elemento [3] desses vetores, quando na verdade eles variam de [0] ate [2] apenas.

Na próxima manda o codigo identado que fica melhor pra ver.

[]s

entendi!!!! verdade !! Obrigado so agora vi o erro, a matriz começa do 0 !! rsrs tinha esquecido!! Nisso resolveu os dois problemas de uma vez!!

Eu teria que mudar 1 p/ 0 , 2 p/ 1, e 3 p/ 2 , mas ai teria mudar o programa todo.... Ai pra facilitar, so aumentei a matriz pra 4 :P

Bom, ee respondendo sua pergnta: é que estou aprendendo ainda no colegio comecinho de matrizes ^_^ , funções então nem se fala ne rsrs vou aprender ainda !! So to aqui treinando e o que aprendi ate hj :D

>>> Ae, um Mod fecha o topico , please

Arquivado

Este tópico foi arquivado e está fechado para 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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!