Ir para conteúdo
Fórum Script Brasil
  • 0

ajuda no jogo da velha em c++


hack.eng

Pergunta

sou novo aki no forum

galera meu professor mandou um jogo da velha para nois implementar-mos

já tentei de varias formas, já procurei na net, mais n sei trabalhar com matriz

se algum de vocês podecem me da essa ajuda ficarei muito grato

vo posta o codigo-fonte logo abaixo, o prof quer feito a partir desse, mais pode ser usada só a matriz as jogadas n precisam ser feitas nakele estilo n

se alguém postasse um parecido já ajuda

tenho ate essa segunda para entregar, se n reprovo

se alguém também tiver a paciencia de ficaria muito grato mesmo

contato rondinelly69@hotmail.com

codigo-fonte

#include <conio.h>

#include <conio.c>

#include <stdio.h>

#include <dos.h>

int matriz[3][3];

void escrevexy (int coluna, int linha, char *texto) {

gotoxy(coluna, linha);

printf(texto);

}

void jogador_1 () {

int linha, coluna;

gotoxy(10, 4);

scanf("%i", &linha);

gotoxy(10, 5);

scanf("%i", &coluna);

escrevexy(33, 12, "X"); // apenas para teste

}

void jogador_2 () {

int linha, coluna;

gotoxy(10, 8);

scanf("%i", &linha);

gotoxy(10, 9);

scanf("%i", &coluna);

escrevexy(33, 16, "O"); // apenas para teste

}

void escreveInformacoes() {

escrevexy(0, 0, "Jogo da Velha\nFeche a janela para encerrar\n");

escrevexy(0, 3, "JOGADOR 1"); // coluna, linha, texto

escrevexy(0, 4, "Linha...: ");

escrevexy(0, 5, "Coluna..: ");

escrevexy(0, 7, "JOGADOR 2");

escrevexy(0, 8, "Linha...: ");

escrevexy(0, 9, "Coluna..: ");

escrevexy(30, 10, " 1 2 3");

escrevexy(30, 11, " | |");

escrevexy(30, 12, "1 | |");

escrevexy(30, 13, " | |");

escrevexy(30, 14, " -----+-----+-----");

escrevexy(30, 15, " | |");

escrevexy(30, 16, "2 | |");

escrevexy(30, 17, " | |");

escrevexy(30, 18, " -----+-----+-----");

escrevexy(30, 19, " | |");

escrevexy(30, 20, "3 | |");

escrevexy(30, 21, " | |");

}

int main() {

int fim = 0;

textcolor(WHITE);

textbackground(BLUE);

system("cls");

escreveInformacoes();

do {

jogador_1 ();

jogador_2 ();

} while (fim == 0);

getch();

}

ahhh ele também passou esse tal de jogo genius se alguém também poder ajudar

codigo-fonte

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <stdlib.h>

#include <time.h>

#include <conio.c>

void escreveBloco (int cor) {

if (cor == 0) {

textbackground(BLACK);

}

printf(" ");

}

int main() {

int numero_aleatorio, coluna, linha, fim = 0;

printf("Jogo GENIUS\nFeche a janela para encerrar\n");

srand(time(NULL));

do {

numero_aleatorio = rand() % 4; // gera um numero entre 0 (inclusive) e 3 (inclusive)

switch (numero_aleatorio) {

case 0: {

textbackground(BLUE);

coluna = 0;

linha = 10;

break;

}

case 1: {

textbackground(RED);

coluna = 0;

linha = 12;

break;

}

case 2: {

textbackground(GREEN);

coluna = 10;

linha = 10;

break;

}

case 3: {

textbackground(YELLOW);

coluna = 10;

linha = 12;

break;

}

}

gotoxy(coluna, linha);

escreveBloco(1);

wait(1);

gotoxy(coluna, linha);

escreveBloco(0);

} while (fim == 0);

}

Editado por hack.eng
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

cara, eu já fiz um jogo da velha desse quando eu tava estudando lógica de programação, mas tá em pascal... :rolleyes:

Eu sei que essa não é seção de Pascal, mas já que você pediu:

Program jogodavelha;
uses crt;
VAR
   campo: array[1..3, 1..3] of integer;
   vencedor: integer;
   empate: boolean;
   tecla: char;
Procedure tela;
VAR lin,col: integer;
Begin
     for lin:=13 to 19 do
        begin
           gotoxy(35,lin);
           write(#177);
           gotoxy(37,lin);
           write(#177);
           gotoxy(39,lin);
           write(#177);
           gotoxy(41,lin);
           write(#177);
        end;
     for col:=35 to 41 do
        begin
           gotoxy(col,13);
           write(#177);
           gotoxy(col,15);
           write(#177);
           gotoxy(col,17);
           write(#177);
           gotoxy(col,19);
           write(#177);
        end;
End;
Procedure joga;
VAR lin, lin2, lin3, col, col2, col3: integer;
    para: boolean;
Begin
     lin:=16; {linha da tela}
     col:=38; {coluna da tela}
     lin2:=2; {linha da matriz}
     col2:=2; {coluna da matriz}
     gotoxy(col,lin);
     repeat
     tecla:=readkey;
     if (tecla='w') and (lin>14){limitacao de linhas pra matriz} then
        begin
          lin:=lin-2;
          lin2:=lin2-1;
        end;
     if (tecla='a') and (col>36){limita coluna esq} then
        begin
          col:=col-2;
          col2:=col2-1;
        end;
     if (tecla='d') and (col<40){limite coluna dir} then
        begin
          col:=col+2;
          col2:=col2+1;
        end;
     if (tecla='s') and (lin<18){limita lin baixo} then
        begin
          lin:=lin+2;
          lin2:=lin2+1;
        end;
     if (tecla='b') AND (campo[lin2,col2]=0) {tem que tar zerado pra preencher}then
        begin
           campo[lin2,col2]:=2; {2 por convencao}
           gotoxy(col,lin);
           write('o');
        end;
     if (tecla='x') AND (campo[lin2,col2]=0){mesma coisa} then
     { e campo[lin2,col2]=0 para só preencher uma vez, pra não trapacear XD }
        begin
           campo[lin2,col2]:=1;  {1 por convencao}
           gotoxy(col,lin);
           write('x');
        end;
     gotoxy(col,lin);
     if (campo[1,1]<>0) AND (campo[1,1]=campo[1,2]) AND (campo[1,2]=campo[1,3]) then
        vencedor:=campo[1,1];
     if (campo[1,1]<>0) and (campo[1,1]=campo[2,1]) AND (campo[2,1]=campo[3,1]) then
        vencedor:=campo[1,1];
     if (campo[3,1]<>0) and (campo[3,1]=campo[3,2]) AND (campo[3,2]=campo[3,3]) then
        vencedor:=campo[3,1];
     if (campo[1,3]<>0) and (campo[1,3]=campo[2,3]) AND (campo[2,3]=campo[3,3]) then
        vencedor:=campo[1,3];
     if (campo[1,1]<>0) and (campo[1,1]=campo[2,2]) AND (campo[2,2]=campo[3,3]) then
        vencedor:=campo[1,1];
     if (campo[1,3]<>0) and (campo[3,1]=campo[2,2]) AND (campo[2,2]=campo[1,3]) then
        vencedor:=campo[1,3];
     if (campo[1,2]<>0) and (campo[1,2]=campo[2,2]) and (campo[2,2]=campo[3,2]) then
        vencedor:=campo[1,2];
     if (campo[2,1]<>0)and(campo[2,1]=campo[2,2])and(campo[2,2]=campo[2,3]) then
        vencedor:=campo[2,1];
     para:=True;
     lin3:=1;
     while lin3<=3 do
      begin
        col3:=1;
        while col3<=3 do
         begin
           if (campo[lin3,col3]<>0) then
             para:=True
           else
            begin
              para:=False;
              col3:=3;
              lin3:=3;
            end;
           col3:=col3+1;
         end;
         lin3:=lin3+1;
       end;
 until (tecla=#27) OR (vencedor<>0) OR (para);
End;
Begin
     repeat
           clrscr;
           tela;
           joga;
           if vencedor<>0 then
              begin
                 if vencedor=1 then
                    begin
                       gotoxy(40,23);
                       write('O jogador X venceu!');
                    end;
                 if vencedor=2 then
                    begin
                       gotoxy(40,23);
                       write('O jogador O venceu!');
                    end;
              end;
           if (tecla<>#27) and (vencedor=0) then
              begin
                 gotoxy(40,23);
                 write('DEU EMPATE!!!');
              end;
           readkey;
     until tecla<>#27;
 readkey;
End.

Se você precisar de mais alguma ajuda com o algorítmo e/ou como implementar em C, ficarei grato em ajudar.

Abraço.

Editado por Ark
Link para o comentário
Compartilhar em outros sites

  • 0

hehehe, desculpa pelo pascal cara, mas o lado bom é que é bem compreenssível, já que pascal seria como um portugol, espero que dê pra ajudar em alguma coisa, mas você já sabe como fazer pra pegar os resultados? O seu jogo de velha vai ser Humano x Humano?

Abraço.

Link para o comentário
Compartilhar em outros sites

  • 0
hehehe, desculpa pelo pascal cara, mas o lado bom é que é bem compreenssível, já que pascal seria como um portugol, espero que dê pra ajudar em alguma coisa, mas você já sabe como fazer pra pegar os resultados? O seu jogo de velha vai ser Humano x Humano?

Abraço.

eu n sei fazer nds, como já havia dito, n aprendi a mexer com matriz, e os 2 jogos usam matrizes

como o prof começou um HUMANO X HUMANO todos iram fazer assim

Editado por hack.eng
Link para o comentário
Compartilhar em outros sites

  • 0

O da velha como você já deve saber vai ter uma matriz [3][3] na qual o seu jogo vai ficar registrado, você pode fazer a movimentação entre as células da matriz de duas formas, pedindo as coordenadas da jogada ou fazendo a movimentação mais interativa mesmo. Tipo, quando ele vai movimentar via teclado com o auxílio do gotoxy você vai movimentando também na matriz ao mesmo tempo, daí quando ele apertar tal tecla você vai preencher a posicião atual da matriz e vai escrever na tela a jogada dele. Prefiro a segunda maneira, embora a primeira seja mais simples. Na primeira maneira você só ia ter que ficar atualizando o estado do jogo após cada jogada. você ia precisar também obviamente de uma função pra checar se há vencedor e se houver retornar o código, por exempo 1 para jogador 1 vence, 2 para jogador 2 vence e -1 ou 0 para empate, fica a seu critério. Sem mencionar é claro as funções das jogadas do player 1 e do player 2.

Editado por Ark
Link para o comentário
Compartilhar em outros sites

  • 0
O da velha como você já deve saber vai ter uma matriz [3][3] na qual o seu jogo vai ficar registrado, você pode fazer a movimentação entre as células da matriz de duas formas, pedindo as coordenadas da jogada ou fazendo a movimentação mais interativa mesmo. Tipo, quando ele vai movimentar via teclado com o auxílio do gotoxy você vai movimentando também na matriz ao mesmo tempo, daí quando ele apertar tal tecla você vai preencher a posicião atual da matriz e vai escrever na tela a jogada dele. Prefiro a segunda maneira, embora a primeira seja mais simples. Na primeira maneira você só ia ter que ficar atualizando o estado do jogo após cada jogada. você ia precisar também obviamente de uma função pra checar se há vencedor e se houver retornar o código, por exempo 1 para jogador 1 vence, 2 para jogador 2 vence e -1 ou 0 para empate, fica a seu critério. Sem mencionar é claro as funções das jogadas do player 1 e do player 2.

vo ter q usar o primeiro caso, pois foi assim q ele começou

o tempo todo no jogo só aparece um "tabuleiro" , n fica aparecendo um a cada jogada como vi em um outro tópico daki

o codigo ta ali em cima, é só copiar e colar pra ter uma ideia

vo durmi, amanha respondo

vlws

Link para o comentário
Compartilhar em outros sites

  • 0

Qual é o erro?

#include <conio.h>

#include <conio.c>

#include <stdio.h>

#include <dos.h>

#include<stdlib.h>

char matriz[3][3];

char check(void)

{

int i;

for(i=0; i<3; i++) //verifica as linhas

if(matrix[0]==matrix[1] &&

matrix[0]==matrix[2]) return matrix[0];

for(i=0; i<3; i++) //verifica as colunas

if(matrix[0]==matrix[1] &&

matrix[0]==matrix[2]) return matrix[0];

for(i=0; i<3; i++) // verifica a diagonal

if(matrix[0][0]==matrix[1][1] &&

matrix[1][1]==matrix[2][2]) return matrix[0][0];

for(i=0; 1<3; i++)// verifica a diagonal

if(matrix[0][2]==matrix[1][1] &&

matrix[1][1]==matrix[2][0]) return matrix[0][2];

for(i=0; i<3; i++) // verifica se há empate

if(matrix[0][0]!=' ' && matrix[0][1] !=' ' &&

matrix[0][2]!=' ' && matrix[1][0] !=' ' &&

matrix[1][1]!=' ' && matrix[1][2] !=' ' &&

matrix[2][0]!=' ' && matrix[2][1] !=' ' &&

matrix[2][2]!=' ') return 'v';

return ' ';

}

void init_matrix(void) //inicializa a matriz

{

int i, j;

for(i=0; i<3; i++)

for(j=0; j<3; j++) matrix[j]=' ';

}

void jogador1(void)

{

int x,y;

printf("Jogador 1 digite a linha e coluna para o 'x': ");

scanf("%d%d", &x, &y);

x--; y--;

if(matrix[x][y] !=' ')

{

printf("Posicao invalida, tente novamente. \n");

jogador1();

}

else matrix[x][y]='x';

}

void disp_matrix(void) {

printf(0, 0, "Jogo da Velha\nFeche a janela para encerrar\n");

printf(0, 3, "JOGADOR 1"); // coluna, linha, texto

printf(0, 4, "Linha...: ");

printf(0, 5, "Coluna..: ");

printf(0, 7, "JOGADOR 2");

printf(0, 8, "Linha...: ");

printf(0, 9, "Coluna..: ");

printf(30, 10, " 1 2 3 ");

printf(30, 11, " | | ");

printf(30, 12, "1 %c | %c | %c "),matriz[1][1],matriz[1][2],matriz[1][3]);

printf(30, 13, " | | ");

printf(30, 14, " -----+-----+-----");

printf(30, 15, " | | ");

printf(30, 16, "2 %c | %c | %c "),matriz[2][1],matriz[2][2],matriz[2][3]);

printf(30, 17, " | | ");

printf(30, 18, " -----+-----+-----");

printf(30, 19, " | | ");

printf(30, 20, "3 %c | %c | %c "),matriz[3][1],matriz[3][2],matriz[3][3]);

escrevexy(30, 21, " | | ");

}

void jogador2(void)

{

disp_matrix();

int x,y;

printf("Jogador 2 digite a linha e coluna para a 'o': ");

scanf("%d%d", &x, &y);

x--; y--;

if(matrix[x][y] !=' ')

{

printf("Posicao invalida, tente novamente. \n");

jogador2();

}

else matrix[x][y]='o';

}

int main (void)

{

char done;

done=' ';

init_matrix();

do

{

printf("Este e o jogo-da-velha.\n");

printf("Divirta-se com seu amigo\n");

disp_matrix();

jogador1();

done=check(); //verifica se há vencedor

system("cls");

printf("Este e o jogo-da-velha.\n");

printf("Divirta-se com seu amigo\n");

if(done!=' ')break; //vencedor

jogador2();

done = check(); // verifica se há vencedor

system("cls");

}while(done==' ');

if(done=='x')

{printf("Jogador 1 venceu!\n");

getch();}

else if(done=='o')

{printf("Jogador 2 venceu\n");

getch();}

else

{printf("Velha!");

getch();}

getch();

main();

}

Link para o comentário
Compartilhar em outros sites

  • 0

cara tenta trocar os printf da linha 63 à 80 pela tua função escrevexy();

Pelo que eu percebi tua função escrevexy recebe as coodenadas onde o gotoxy() vai escrever a string que você passa como argumento, então você trocou, onde era pra colocar escrevexy(), você colocou printf();

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...