Jogo do Galo em C

nielsky

Power Member
Estou a fazer o jogo do galo em C.~

Apos a inserir as coordenadas esta, desde que seja valida tem de ser substituida por X.
Nao estou a conseguir substituir, alguem pode me dar umas luzes ?

ja agora as coordenadas tem te estar na seguinte forma por exemplo 3 3 , como faço para deixar um espaço entre os dois numeros ?

agradeço a ajuda.

ps: ja estive a ver alguns exemplos da net, mas nao consegui compreender.
 
Não percebi bem as tuas dúvidas. Podes tentar ser mais detalhado, sff?

Quanto a substituir um campo da tabela por um "X", acho que não há nenhuma forma standard de o fazer se estiveres na consola, portanto provavelmente tens de redesenhar a tabela a seguir. Se tiveres um array[][] para a tabela e uma função redraw_table(), acho que não é difícil.
 
Por exemplo:

1 1 | 1 2 | 1 3
--------------
2 1 | 2 2 | 2 3
--------------
3 1 | 3 2 | 3 3

Acima está a tabela que aparece.
suponhamos que jogo na coordenada 2 2, etao tem de aparecer o seguinte:

1 1 | 1 2 | 1 3
--------------
2 1 | X | 2 3
--------------
3 1 | 3 2 | 3 3

O que procuro é desenhar esta segunda tabela, contendo o "X".
a minha dificuldade está em após validar a coordenada, inserir o 'X'.
 
Por exemplo:

1 1 | 1 2 | 1 3
--------------
2 1 | 2 2 | 2 3
--------------
3 1 | 3 2 | 3 3

Acima está a tabela que aparece.
suponhamos que jogo na coordenada 2 2, etao tem de aparecer o seguinte:

1 1 | 1 2 | 1 3
--------------
2 1 | X | 2 3
--------------
3 1 | 3 2 | 3 3

O que procuro é desenhar esta segunda tabela, contendo o "X".
a minha dificuldade está em após validar a coordenada, inserir o 'X'.

Como é que estás a desenhar a tabela?
Deverás ter um array de char para o tabuleiro, em que 'O' significa que tem um O e 'X' significa que tem um X e ' ' deverá significar vazio. Ao desenhar, se tiver um ' ' fazes como estás a fazer (desenhar as coordenadas), se tiver outro caracter desenhas o caracter.

Cumps
 
correcto,

tenho um array de char " matriz[3][3] ", e iniciei com os valores das coordenadas.
a sequencia que tenho no jogo é:

1. é feito um printf com o pedido das coordenadas.
2. insiro as coordenadas e é verificado se é ou nao uma coordenada válida, caso seja uma coordenada valida devolve matriz[x][y]= 'X'.

até aqui udo bem.

o problema está no comando ou forma que devo de utilizar para substituir a matriz[x][y] no array de char que vai ser reimpresso.
 
Estás a respeitar algum enunciado em que tenhas que usar esse tipo de coordenadas?

Eu já fiz um jogo do galo em C, mas usei números:

1 | 2 | 3
----------
4 | 5 | 6
----------
7 | 8 | 9

É mais simples para trocares por X ou por O. Talvez as coordenadas simplifique o processo de confirmar os casos de vitória. Depende da forma como o fizeres.

Anyway, se fosse com os números de 1 a 9, era bastante simples de trocar por X ou por O. Guardas os números num vector, e conforme o número que recebes no input vais ao vector trocar e mandas redesenhar o jogo.
 
Estás a respeitar algum enunciado em que tenhas que usar esse tipo de coordenadas?

Eu já fiz um jogo do galo em C, mas usei números:

1 | 2 | 3
----------
4 | 5 | 6
----------
7 | 8 | 9

É mais simples para trocares por X ou por O. Talvez as coordenadas simplifique o processo de confirmar os casos de vitória. Depende da forma como o fizeres.

Anyway, se fosse com os números de 1 a 9, era bastante simples de trocar por X ou por O. Guardas os números num vector, e conforme o número que recebes no input vais ao vector trocar e mandas redesenhar o jogo.

correcto,
estou a seguir o enunciado.

seria possivel me explicares esta parte do procedimento em que guardas no vector e esse é substituido pelo 'X' ?.

e quais a fuçoes usar.
 
Se percebi, estás com problemas em atribuir um caracter a uma posição da matriz?

Anyway, mostra ai o excerto de código em que inicializas a matriz...
 
boas,

obrigado pelas ajudas, mas tive de ignorar essa parte do programa.
agora o meu problema é sair do ciclo do while quando :
1º jogador a ganhar.
2º programa ganhar.

neste caso programei duas mensagens que são escritas após a jogada.
ou seja, dá a mensagem e sai do programa.
 
boas,

obrigado pelas ajudas, mas tive de ignorar essa parte do programa.
agora o meu problema é sair do ciclo do while quando :
1º jogador a ganhar.
2º programa ganhar.

neste caso programei duas mensagens que são escritas após a jogada.
ou seja, dá a mensagem e sai do programa.

Tens de considerar ainda a hipótese de empate.
Em relação a sair do ciclo é simples, verificas se alguém venceu, ou houve empate, e, nesses casos mostras as mensagens que tens a mostrar e fazes break.

Cumps
 
Basicamente tens de verificar se há alguma linha ou coluna com valores iguais (basicamente verificas isso com ciclos For...):

Exemplo
matriz[0][2] = X
matriz[1][2] = X
matriz[2][2] = X

ou
matriz[1][0] = o
matriz[1][1] = o
matriz[1][2] = o


Ficam-te a faltar a verificação das diagonais. Que é o mesmo conceito que acima mostrei:

Verifica Diagonal \
matriz[0][0] = X
matriz[1][1] = X
matriz[2][2] = X

ou

Verifica Diagonal /
matriz[2][0] = X
matriz[1][1] = X
matriz[0][2] = X

Nestes casos todos:
-Houve vencedor - Tens que ter uma variável a dizer qual é o jogador que jogou por último. O último é o vencedor


Se não existir na matriz qualquer número: Houve empate.
 
Última edição:
Boas,
a parte das verificaçoes ja está.
a minha dificuldade está em fazer o programa terminar quando uma das subrotinas forem executadas.
por exemplo

se a linha 1 = X, entao é executado uma rotina em que apenas é feito um printf.
ja tentei com o comando exit, mas deu erro.
entretanto vou a procura de outra forma caso a que eu tenho em mente nao seja possivel.
 
não queres postar essa parte do exit para vermos?

deves ter qualquer coisa como:
Código:
  while(1){
        
     //Efectua todas as rotinas do jogo...
            
     //executa rotina: 
       if( jogoGanho() == 1)
        exit(0);
    }
certo?
 
Amigo Forreta, peço desculpa mas não posso disponibilizar o meu codigo até ser entregue.

basicamente tenho assim:

função main
do
{
minha jogada
jogada do pc
verifica vencedor
contador++
}
while ( contador !=5)

-------------------------------
na rotina verifica vencedor está assim:

if([0][0]==[0][1] && [0][0]==[0][2] && [0][0]=='X'){vencedor_pessoa();}

o que eu pretendo é: quando vencedor_pessoa() for executado o programa termina.
 
Boas,

após algumas horas de pensamento lá consegui descobrir que o meu grande problema era nao incluir a biblioteca stdlib.h e por isso o comando exit na hora da compilação dava sempre erro.

obrigado pelas ajudas.

o programa ja está quase pronto.
 
Back
Topo