Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

TAB

jogo da velha

Recommended Posts

afff, hj meu professor pediu pra eu fazer um algoritmo do jogo da velha em portugol usando se , senão e enquanto, e travei no meio dele... :) gostaria de saber se alguem poderia me ajudar... please...

Compartilhar este post


Link para o post
Compartilhar em outros sites

já que tu travou no meio dele, mostra pra gente o que já foi feito...assim posso ajudá-lo a continuar seu algoritmo.a idéia basica é usar uma matriz 3x3 e 2 caracteres diferentes para preencher a matriz. (X e O por exemplo)ai vai fazendo as verificações.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o f*** é q eu naum posso usar matrizessó os comandos se e senão, dai fode tudo...eu tentei fazer por matrizes mas o professor naum aceitoudai apaguei tudo e to desde o zero de novoto ferrado:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cypher

O jogo da velha é o seguinte...

 

tem-se uma cerca com 9 posições, tipo de sustenido "#"

 

Ai os jogadores marcam uma posição de cada vez com um caracter: Jogador 1 - "X", jogador 2 - "O"

 

Quem fizer uma linha com seus respectivos caracteres primeiro, vence o jogo. Pode ser na horizontal, vertical ou diagonal.

 

TAB

 

Seu professor deve ter problema então. Qual o problema de usar matrizes?! ele não ensinou ainda?!

Como que eu vou verificar a posição dos caracteres na tela sem a matriz?! Pixel por pixel?!

 

Aguarde mais alguma ajuda aí, pq sem matriz eu não consegui imaginar mais nd.

 

Se seu professor passar a resposta do exercício, coloca aqui pra gente, porque eu fiquei curioso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem matrizes você teria que ter 9 variáveis, uma para cada posição, de forma que elas teriam valores que indicariam se a posição está marcada (1) ou não (0). O trabalhoso é fazer os Ses neste caso, já que com uma matriz seria bem mais simples.

 

Abraços,

 

Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza TAB,

 

... meu professor pediu pra eu fazer um algoritmo do jogo da velha ...

Como o prof não explicitou o q ele queria vamos fazer um algoritmo beeeem rapidão aproveitando a idéia do Tomás Frota ...

L1C1 | L1C2 | L1C3

-----+------+-----

L2C1 | L2C2 | L2C3

-----+------+-----

L3C1 | L3C2 | L3C3

O algoritmo pode servir como uma subrotina que verifica se alguém ganhou o jogo pois desenvolver TODO o algoritmo do jogo foge um pouco do nosso objetivo ;) Por ex., esse algoritmo pode rodar logo em seguida que um dos jogadores termina a sua jogada, então ele calcula se houve um vencedor, a idéia é essa !

Mãos à obra, note que para ganhar devem ocorrer uma das seguintes situações:

 

1) Completar uma linha (horizontal)

1.1) L1C1 = L1C2 = L1C3 = "X" ou "O"

1.2) L2C1 = L2C2 = L2C3 = "X" ou "O"

1.3) L3C1 = L3C2 = L3C3 = "X" ou "O"

 

2) Completar uma coluna (vertical)

2.1) L1C1 = L2C1 = L3C1 = "X" ou "O"

2.2) L1C2 = L2C2 = L3C3 = "X" ou "O"

2.3) L1C3 = L2C3 = L3C3 = "X" ou "O"

 

3) Completar uma diagonal

3.1) L1C1 = L2C2 = L3C3

3.2) L3C1 = L2C2 = L1C3

 

Agora usamos os SE-ENTÃO e verificamos se alguém ganhou, fica assim:

 

' comentário: 1) Testando se completou uma linha (horizontal)

 

SE L1C1 = L1C2 = L1C3 = "X" ENTAO "X GANHOU"

SE L1C1 = L1C2 = L1C3 = "O" ENTAO "O GANHOU"

 

SE L2C1 = L2C2 = L2C3 = "X" ENTAO "X GANHOU"

SE L2C1 = L2C2 = L2C3 = "O" ENTAO "O GANHOU"

 

SE L3C1 = L3C2 = L3C3 = "X" ENTAO "X GANHOU"

SE L3C1 = L3C2 = L3C3 = "O" ENTAO "O GANHOU"

 

' comentário: 2) Testando se completou uma coluna (vertical)

 

SE L1C1 = L2C1 = L3C1 = "X" ENTAO "X GANHOU"

SE L1C1 = L2C1 = L3C1 = "O" ENTAO "O GANHOU"

 

SE L1C2 = L2C2 = L3C3 = "X" ENTAO "X GANHOU"

SE L1C2 = L2C2 = L3C3 = "O" ENTAO "O GANHOU"

 

SE L1C3 = L2C3 = L3C3 = "X" ENTAO "X GANHOU"

SE L1C3 = L2C3 = L3C3 = "O" ENTAO "O GANHOU"

 

' comentário: 3) Testando se completou uma diagonal

 

SE L1C1 = L2C2 = L3C3 = "X" ENTAO "X GANHOU"

SE L1C1 = L2C2 = L3C3 = "O" ENTAO "O GANHOU"

 

SE L3C1 = L2C2 = L1C3 = "X" ENTAO "X GANHOU"

SE L3C1 = L2C2 = L1C3 = "O" ENTAO "O GANHOU"

 

Detalhe: numa linguagem "normal" de programação o teste de 3 variáves simultaneamente não dá, então onde lemos SE L3C1=L2C2=L1C3="O"... leia-se SE L3C1="O" E L2C2="O" E L1C3="O"...

 

{}

Palc

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas ainda é mais rápido com a matriz!!!

o f*** é q eu naum posso usar matrizessó os comandos se e senão, dai fode tudo...eu tentei fazer por matrizes mas o professor naum aceitoudai apaguei tudo e to desde o zero de novoto ferrado:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

ae cara td certo?dá uma olhada nesse codigo e vê se consegue beleza!?esse código é em C abraços e boa sorte!!bom fim de semana!!!#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <conio.h>//#define DEBUG//----TECLAS-------#define ACIMA 72#define ABAIXO 80#define ESQUERDA 75#define DIREITA 77#define ESC 27#define ENTER 13#define ESPACO ' 'int main(){ char tab[3][4]={" "," "," "}; int jog=1, rod=0, sair=0, posx=0, posy=0, venc=0; int y,x; char key; while(!sair) { printf("\n\nJogador %d\n\n",jog); if(tab[posx][posy]!='X'&&tab[posx][posy]!='O') if(jog==1) tab[posx][posy]='x'; else tab[posx][posy]='o'; else { for(posx=0;posx<=2;posx++){ for(posy=0;posy<2;posy++) if(tab[posx][posy]!='X'&&tab[posx][posy]!='O') break; if(tab[posx][posy]!='X'&&tab[posx][posy]!='O') break; } if(jog==1) tab[posx][posy]='x'; else tab[posx][posy]='o'; } printf("\t\t %c|%c|%c\n",tab[0][0],tab[1][0],tab[2][0]); printf("\t\t-------\n"); printf("\t\t %c|%c|%c\n",tab[0][1],tab[1][1],tab[2][1]); printf("\t\t-------\n"); printf("\t\t %c|%c|%c\n",tab[0][2],tab[1][2],tab[2][2]); printf("\nUse os direcionais ou as teclas \"W A S D\" para posicionar.\n"); printf("Aperte as teclas \"Barra de Espaco\" ou \"Enter\" para jogar.\n"); printf("\nAperte a telca \"Esc\" para sair.\n");#ifdef DEBUG printf("\nPosx = %d Posy =%d\n",posx,posy);#endif do{ key=toupper(getch()); switch(key) { //---------------------------- case 'W': if(posy>0){ if(tab[posx][posy-1]!='X'&&tab[posx][posy-1]!='O'){ tab[posx][posy]=' '; posy--; } else if(tab[posx][posy-2]!='X'&&tab[posx][posy-2]!='O'){ tab[posx][posy]=' '; if(posy-2>=0) posy-=2; } key=0; } break; case ACIMA: if(posy>0){ if(tab[posx][posy-1]!='X'&&tab[posx][posy-1]!='O'){ tab[posx][posy]=' '; posy--; } else if(tab[posx][posy-2]!='X'&&tab[posx][posy-2]!='O'){ tab[posx][posy]=' '; if(posy-2>=0) posy-=2; } key=0; } break; //---------------------------- case 'S': if(posy<2){ if(tab[posx][posy+1]!='X'&&tab[posx][posy+1]!='O'){ tab[posx][posy]=' '; posy++; } else if(tab[posx][posy+2]!='X'&&tab[posx][posy+2]!='O'){ tab[posx][posy]=' '; if(posy+2<=2) posy+=2; } key=0; } break; case ABAIXO: if(posy<2){ if(tab[posx][posy+1]!='X'&&tab[posx][posy+1]!='O'){ tab[posx][posy]=' '; posy++; } else if(tab[posx][posy+2]!='X'&&tab[posx][posy+2]!='O'){ tab[posx][posy]=' '; if(posy+2<=2) posy+=2; } key=0; } break; //---------------------------- case 'A': if(posx>0){ for(y=posy;y>=0;--y){ for(x=posx-1;x>=0;--x) if(tab[x][y]!='X'&&tab[x][y]!='O'){ tab[posx][posy]=' '; posy=y; posx=x; break; } if(tab[posx][posy]==' '){ break; } } key=0; } else{ for(y=posy-1;y>=0;--y){ for(x=2;x>=0;--x) if(tab[x][y]!='X'&&tab[x][y]!='O'){ tab[posx][posy]=' '; posy=y; posx=x; break; } if(tab[posx][posy]==' '){ break; } } key=0; } break; case ESQUERDA: if(posx>0){ for(y=posy;y>=0;--y){ for(x=posx-1;x>=0;--x) if(tab[x][y]!='X'&&tab[x][y]!='O'){ tab[posx][posy]=' '; posy=y; posx=x; break; } if(tab[posx][posy]==' '){ break; } } /*if(tab[posx-1][posy]!='X'&&tab[posx-1][posy]!='O'){ tab[posx][posy]=' '; posx--; } else if(tab[posx-2][posy]!='X'&&tab[posx-2][posy]!='O'){ tab[posx][posy]=' '; if(posx-2>=0) posx-=2; }*/ key=0; } else{ for(y=posy-1;y>=0;--y){ for(x=2;x>=0;--x) if(tab[x][y]!='X'&&tab[x][y]!='O'){ tab[posx][posy]=' '; posy=y; posx=x; break; } if(tab[posx][posy]==' '){ break; } } key=0; } break; //---------------------------- case 'D': if(posx<2){ for(y=posy;y<=2;y++){ for(x=posx+1;x<=2;x++) if(tab[x][y]!='X'&&tab[x][y]!='O'){ tab[posx][posy]=' '; posy=y; posx=x; break; } if(tab[posx][posy]==' '){ break; } } key=0; } else{ for(y=posy+1;y<=2;y++){ for(x=0;x<=2;x++) if(tab[x][y]!='X'&&tab[x][y]!='O'){ tab[posx][posy]=' '; posy=y; posx=x; break; } if(tab[posx][posy]==' '){ break; } } key=0; } break; case DIREITA: if(posx<2){ for(y=posy;y<=2;y++){ for(x=posx+1;x<=2;x++) if(tab[x][y]!='X'&&tab[x][y]!='O'){ tab[posx][posy]=' '; posy=y; posx=x; break; } if(tab[posx][posy]==' '){ break; } } /*if(tab[posx+1][posy]!='X'&&tab[posx+1][posy]!='O'){ tab[posx][posy]=' '; posx++; } else if(tab[posx+2][posy]!='X'&&tab[posx+2][posy]!='O'){ tab[posx][posy]=' '; if(posx+2<=2) posx+=2; }*/ key=0; } else{ for(y=posy+1;y<=2;y++){ for(x=0;x<=2;x++) if(tab[x][y]!='X'&&tab[x][y]!='O'){ tab[posx][posy]=' '; posy=y; posx=x; break; } if(tab[posx][posy]==' '){ break; } } key=0; } break; //---------------------------- case ESPACO: if(jog==1){ tab[posx][posy]='X'; jog=2; } else { tab[posx][posy]='O'; jog=1; } rod++; key=0; break; case ENTER: if(jog==1){ tab[posx][posy]='X'; jog=2; } else { tab[posx][posy]='O'; jog=1; } rod++; key=0; break; //---------------------------- case ESC: sair=1; key=0; break; } }while(key!=0); if(rod>8) venc=-1; for(x=0;x<3;x++) if(tab[x][0]=='X'&&tab[x][1]=='X'&&tab[x][2]=='X') venc=1; else if(tab[x][0]=='O'&&tab[x][1]=='O'&&tab[x][2]=='O') venc=2; for(y=0;y<3;y++) if(tab[0][y]=='X'&&tab[1][y]=='X'&&tab[2][y]=='X') venc=1; else if(tab[0][y]=='O'&&tab[1][y]=='O'&&tab[2][y]=='O') venc=2; if((tab[0][0]=='X'&&tab[1][1]=='X'&&tab[2][2]=='X')|| (tab[0][2]=='X'&&tab[1][1]=='X'&&tab[2][0]=='X')) venc=1; else if((tab[0][0]=='O'&&tab[1][1]=='O'&&tab[2][2]=='O')|| (tab[0][2]=='O'&&tab[1][1]=='O'&&tab[2][0]=='O')) venc=2; if(venc>0){ printf("\n------------------------------"); printf("\n|----------------------------|"); printf("\n|| Jogador %d Venceu!!! ||",venc); printf("\n|----------------------------|"); printf("\n------------------------------"); printf("\n\n Iniciar nova partida?(S/N) "); key = toupper(getche()); if(key!='N'&&key!=ESC){ for(x=0;x<3;x++) for(y=0;y<3;y++) tab[x][y]=' '; rod=0; venc=0; posy=0; posx=0; } else sair=1; } else if(venc<0){ printf("\n------------------------------"); printf("\n|----------------------------|"); printf("\n|| Deu Velha!!! Empatou!!! ||"); printf("\n|----------------------------|"); printf("\n------------------------------"); printf("\n\n Iniciar nova partida?(S/N) "); key = toupper(getche()); if(key!='N'&&key!=ESC){ for(x=0;x<3;x++) for(y=0;y<3;y++) tab[x][y]=' '; rod=0; venc=0; posy=0; posx=0; } else sair=1; } system("cls"); } return 0;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

prontos são estes os professores de informática que não percebem muito :D Temos pena pois os professores devem preparar os alunos da melhor maneira e não andar a complicar...E é mesmo com uma matriz que se deve fazer!!!Há coisas que só se deve fazer de uma maneira a mais simples neste caso!!!Cá para mim o professor não sabe é fazer por uma matriz !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.