Jogo do galo em código C

SamuSLB

Membro
Na escola tenho que fazer o em código C, o jogo do galo alguém me ajuda?
Tenho que fazer neste formato:

Código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LINHAS  3
#define COLUNAS 3

char matrix[COLUNAS][LINHAS];

void delay(unsigned int mseconds){
   clock_t goal=mseconds+clock();
   while(goal>clock());
}

void InitMatrix(void){
   char i,j;
   for(i=0;i<LINHAS;++i){
      for(j=0;j<COLUNAS;++j){
         matrix[j]=0;
      }
   }
}

void printMatrix(void){
   char i,j;
   for(i=0;i<LINHAS;++i){
      for(j=0;j<COLUNAS;++j){
         printf(" %d ",matrix[j]);
         if(j<(COLUNAS-1)) printf("|");
      }
      printf("\n");
      if(i<(LINHAS-1)){
         for(j=0;j<COLUNAS;++j){
            if(j<COLUNAS-1) printf("----");
            else printf("---");
         }
      }
      printf("\n");
   }
}

char makeMove(char position, char player){
   //devolve 0 caso tenha sido uma jogada inválida
   //devolve 1 caso tenha sido uma jogada válida
   //Valida a jogada e afecta a matriz com a jogada
}

char checkVictory(char player){
   //devolve 0 caso não exista vitória.
   //devolve 1 caso tenha vencido o player 1
   //devolve 2 caso tenha vencido o player 2
}

void main(void){
   char jogada;
   InitMatrix();
   printMatrix();
   printf("Insere a jogada -> ");
   scanf("%d",&jogada);
   printf("Jogaste %d",jogada);


}
 
Última edição pelo moderador:
Eu sei que ngm vai, o meu problema é que não sei por onde começar esse é o meu problema
primeiro tens de pensar no algoritmo, como se joga o jogo.
segundo escreves uma forma de fazer o jogo em linguagem portuguesa, por ex: ler jogada jogador 1 (colocar peça coluna 1), validar se pode, inserir jogada, validar se fez linha (horizontal, vertical, diagonal)
terceiro não ganhou? pedir jogada jogador 2, repetir passos. voltar ao jogado 1

Escreve em portguês, desenha um fluxograma. Depois é que começas a escrever coisas em C. Mas se te mandaram fazer um trabalho nessa linguagem é porque já foi dado nas aulas a linguagem, certo?
 
@reise esse fluxograma foi me dado mas eu não sei por onde pegar, não sei o que fazer estou um pouco perdido o meu primeiro trabalho foi fazer um relógio que me consegui desenrascar mais ou menos agr aqui nem sei o que meter estou mesmo atoa nem sei o que fazer para conseguir meter o jogo a dar
 
Estou a ver que é recorrente nas escolas darem estes problemas à alunos da área sem darem matéria /s

Há 21 anos atrás passei pelo mesmo. O jogo do galo em C++. Parece-me que o problema passa pelo método de ensino, ensinam pouco como pensar, como ter um olhar lógico para os problemas. A esta distância temporal compreendo agora tudo isso. Pensamento abstracto fraco, pouco matemático.
 
O /s era de sarcasmo.

Não é propriamente responsabilidade do professor ensinar a pensar, muitas vezes quando se apresenta este problema é após já se ter ensinado todas as tools necessárias, e ver se os alunos conseguem da sua própria cabeça resolver o problema.

Descartando pascal, a primeira linguagem que aprendi na escola foi assembly a 8bits e tive problemas semelhantes onde o professor propunha problemas complexos, já tínhamos todos as ferramentas e datasheet, daí consegues ver depois quem sabe pensar por si mesmo ou não.
 
O /s era de sarcasmo.

Não é propriamente responsabilidade do professor ensinar a pensar, muitas vezes quando se apresenta este problema é após já se ter ensinado todas as tools necessárias, e ver se os alunos conseguem da sua própria cabeça resolver o problema.

Descartando pascal, a primeira linguagem que aprendi na escola foi assembly a 8bits e tive problemas semelhantes onde o professor propunha problemas complexos, já tínhamos todos as ferramentas e datasheet, daí consegues ver depois quem sabe pensar por si mesmo ou não.

Eu na altura tinha dificuldades em desenhar o problema e depois programar, mesmo depois de ter andado a desenhar fluxogramas nas primeiras aulas e isto porque o método de ensino era mau. Senti as mesmas dificuldades com o Pascal, como com o C++. Onde estive mais à vontade foi a desenhar base de dados e a trabalhar com o Flash.

Mas fiz o jogo do galo. Aliás, trabalhávamos dois a dois, fez mais o meu colega, que eu. Os alunos têm distintos níveis de aprendizagem e o professor está lá para ajudar, para dar ferramentas, se for somente para dar um exercício e resolver erros, não está lá a fazer nada.

Bem, isto no início do secundário. Quanto mais avançado o ensino, obviamente que o papel do professor passará a ser outro.
 
Boas preciso de ajuda, já tentei 1000 e umas formas e não consigo fazer loop este é o meu programa no momento.

Código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LINHAS  3
#define COLUNAS 3

char matrix[COLUNAS][LINHAS];

void delay(unsigned int mseconds){
   clock_t goal=mseconds+clock();
   while(goal>clock());
}

void InitMatrix(void){
   char i,j;
   for(i=0;i<LINHAS;++i){
      for(j=0;j<COLUNAS;++j){
         matrix[j]=0;
      }
   }
}
void apagar(){
    system("@cls||clear");
    }

void InicioDeJogo (void){
    char Enter;
    printf("--------------------------- \n");
    printf("| Jogo Do Galinho by Muuh | \n");
    printf("--------------------------- \n \n");
    printf("Digita Enter --->\t");
    scanf("%c", &Enter);
    apagar();
}

void JogadasPossiveis(void){
    char entendeu;
    printf("--------------------- \n");
    printf("| Jogadas Possiveis | \n");
    printf("--------------------- \n \n");
    printf(" 0 | 3 | 6 \n");
    printf("----------- \n");
    printf(" 1 | 4 | 7 \n");
    printf("----------- \n");
    printf(" 2 | 5 | 8 \n \n");
    printf("--------------------------- \n \n");
    printf("Entendes? \n");
    printf("Se Nao, Digita Enter So Quando Entenderes \n");
    printf("Se Sim, Digita Enter --->\t");
    scanf("%c", &entendeu);
    apagar();
}
void MatrizDeJogo(void){
    char i,j;
    for(i=0;i<LINHAS;++i){
      for(j=0;j<COLUNAS;++j){
          if(matrix[j]==1)printf(" X ");
            else if(matrix[j]==2) printf(" O ");
            else printf("   ");
         // printf(" %c ",matrix[j]);
         if(j<(COLUNAS-1)) printf("|");
      }
      printf("\n");
      if(i<(LINHAS-1)){
         for(j=0;j<COLUNAS;++j){
            if(j<COLUNAS-1) printf("----");
            else printf("---");
         }
      }
      printf("\n");
   }
}

int makeMove(int posicao, int Jogador){
    int linha = posicao /3;
    int coluna = posicao %3;
    if (linha>LINHAS || linha<0 || coluna>COLUNAS || coluna<0) return 0;
    if (matrix[coluna][linha]==0){
        matrix[coluna][linha]=Jogador;
    }
}

char checkVictory(char player){
    }



void main(void){
    int Jogador=1;
    int jogada=COLUNAS*LINHAS;
    InicioDeJogo();
    JogadasPossiveis();
        InitMatrix();
        printf("--------------- \n");
        printf("| EL TABULERO | \n");
        printf("--------------- \n \n");
            MatrizDeJogo();
            printf("E A Tua Vez Jogador %d ---> \t", Jogador);
            scanf("%d",&jogada);
            makeMove(jogada,Jogador);
                MatrizDeJogo();
                printf("Jogador %d",Jogador );
                printf(" Mais Valia Nao Teres Jogado %d",jogada);

}
 
Última edição pelo moderador:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LINHAS  3
#define COLUNAS 3

char matrix[COLUNAS][LINHAS];

void delay(unsigned int mseconds){
   clock_t goal=mseconds+clock();
   while(goal>clock());
}

void InitMatrix(void){
   int i,j;
   for(i=0;i<LINHAS;++i){
      for(j=0;j<COLUNAS;++j){
         *matrix[j]=0;
      }
   }
}
void apagar(){
    system("@cls||clear");
    }

void InicioDeJogo (void){
    char Enter;
    printf("--------------------------- \n");
    printf("| Jogo Do Galinho by Muuh | \n");
    printf("--------------------------- \n \n");
    printf("Digita Enter --->\t");
    scanf("%c", &Enter);
    apagar();
}

void JogadasPossiveis(void){
    char entendeu;
    printf("--------------------- \n");
    printf("| Jogadas Possiveis | \n");
    printf("--------------------- \n \n");
    printf(" 0 | 3 | 6 \n");
    printf("----------- \n");
    printf(" 1 | 4 | 7 \n");
    printf("----------- \n");
    printf(" 2 | 5 | 8 \n \n");
    printf("--------------------------- \n \n");
    printf("Entendes? \n");
    printf("Se Nao, Digita Enter So Quando Entenderes \n");
    printf("Se Sim, Digita Enter --->\t");
    scanf("%c", &entendeu);
    apagar();
}
void MatrizDeJogo(void){
    int i,j;
    for(i=0;i<LINHAS;++i){
      for(j=0;j<COLUNAS;++j){
          if(*matrix[j]==1)printf(" X ");
            else if(*matrix[j]==2) printf(" O ");
            else printf("   ");
         // printf(" %c ",matrix[j]);
         if(j<(COLUNAS-1)) printf("|");
      }
      printf("\n");
      if(i<(LINHAS-1)){
         for(j=0;j<COLUNAS;++j){
            if(j<COLUNAS-1) printf("----");
            else printf("---");
         }
      }
      printf("\n");
   }
}

int makeMove(int posicao, int Jogador){
    int linha = posicao /3;
    int coluna = posicao %3;
    if (linha>LINHAS || linha<0 || coluna>COLUNAS || coluna<0) return 0;
    if (matrix[coluna][linha]==0){
        matrix[coluna][linha]=Jogador;
    }

    return 0;
}

char checkVictory(char player){
    return 0;
}



int main(void){
    int Jogador=1;
    int jogada=COLUNAS*LINHAS;
    InicioDeJogo();
    JogadasPossiveis();
        InitMatrix();
        printf("--------------- \n");
        printf("| O TABULERIO | \n");
        printf("--------------- \n \n");
            MatrizDeJogo();
            printf("E A Tua Vez Jogador %d ---> \t", Jogador);
            scanf("%d",&jogada);
            makeMove(jogada,Jogador);
                MatrizDeJogo();
                printf("Jogador %d",Jogador );
                printf(" Mais Valia Nao Teres Jogado %d\n",jogada);

    return 0;
}

fiz correção dos erros que tinhas, agora precisas de terminar a implementação
 
Que correções é que fizeste?
O programa continua sem fazer Loop, estou com muitas dificuldades preciso que me ajudem como fazer um pequeno loop.
 
faz diff para comparares as versões. tinhas funções que esperavam retorno e não retornavam nada. pelos vistos estás a usar um código que não foste tu que desenvolveste, então, na minha opinião, primeiro devias lê-lo e tentar perceber como funciona, e provavelmente vais conseguir alterá-lo da forma que pretendes.
 
faz diff para comparares as versões. tinhas funções que esperavam retorno e não retornavam nada. pelos vistos estás a usar um código que não foste tu que desenvolveste, então, na minha opinião, primeiro devias lê-lo e tentar perceber como funciona, e provavelmente vais conseguir alterá-lo da forma que pretendes.

Como é que eu posso fazer diff?
 
Como é que eu posso fazer diff?

Abres dois notepads, copias um código para um deles e o outro código para o outro. Metes aquilo lado a lado no ecrã e depois vês onde houve diferenças.

Ainda não acredito que tive explicar a alguém como encontrar as diferenças entre dois bocados de código :facepalm:
 
Tenho aqui o meu código não sei o que se está a passar aqui, preciso de ajuda alguém por aí?
Basicamente o meu programa não está a assumir os números mas está a mudar de jogador.
De resto está tudo meio orientado tirando o check victory que não tenho a certeza se está certo, acho que tenho algum erro com a programação


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LINHAS 3
#define COLUNAS 3

int matrix[COLUNAS][LINHAS];

void delay(unsigned int mseconds){
clock_t goal=mseconds+clock();
while(goal>clock());
}

void InitMatrix(void){
char i,j;
for(i=0;i<LINHAS;++i){
for(j=0;j<COLUNAS;++j){
matrix[j]=0;
}
}
}
void apagar(){
system("@cls||clear");
}

void InicioDeJogo (void){
char Enter;
printf("--------------------------- \n");
printf("| Jogo Do Galinho by Muuh | \n");
printf("--------------------------- \n \n");
printf("Digita Enter --->\t");
scanf("%c", &Enter);
apagar();
}

void JogadasPossiveis(void){
char entendeu;
printf("--------------------- \n");
printf("| Jogadas Possiveis | \n");
printf("--------------------- \n \n");
printf(" 0 | 1 | 2 \n");
printf("----------- \n");
printf(" 3 | 4 | 5 \n");
printf("----------- \n");
printf(" 6 | 7 | 8 \n \n");
printf("--------------------------- \n \n");
printf("Entendes? \n");
printf("Se Nao, Digita Enter So Quando Perceberes \n");
printf("Se Sim, Digita Enter --->\t");
scanf("%c", &entendeu);
apagar();
}
void MatrizDeJogo(void){
char i,j;
for(i=0;i<LINHAS;++i){
for(j=0;j<COLUNAS;++j){
if(matrix[j] == 0 ) printf(" ");
else if(matrix[j] == 1 ) printf(" X ");
else printf(" 0 ");
if(j<(COLUNAS-1)) printf("|");
}
printf("\n");
if(i<(LINHAS-1)){
for(j=0;j<COLUNAS;++j){
if(j<COLUNAS-1) printf("----");
else printf("---");
}
}
printf("\n");
}
}

int makeMove(int posicao, int Jogador){
int linha = posicao /3;
int coluna = posicao %3;
if (linha>LINHAS || linha>0 || coluna>COLUNAS || coluna<0) return 0;
if (linha>LINHAS || linha>8 || coluna>COLUNAS || coluna<8) return 0;
if (matrix[coluna][linha]==0){
matrix[coluna][linha]=Jogador;
return 1;
}
return 0;

}

char checkVictory(char jogador){
int a;
if (jogador%2!=0){
for (a=0;a<3;++a){
if ((matrix[0][a]==1 && matrix[1][a]==1 && matrix[2][a]==1) ||
(matrix[0][0]==1 && matrix[1][1]==1 && matrix[2][2]==1) ||
(matrix[a][0]==1 && matrix[a][1]==1 && matrix[a][2]==1) ||
(matrix[0][2]==1 && matrix[1][1]==1 && matrix[0][2]==1));
return 1;
}
}

else if (jogador%2==0){
for (a=0;a<3;++a){
if ((matrix[0][a]==2 && matrix[1][a]==2 && matrix[2][a]==2) ||
(matrix[0][0]==2 && matrix[1][1]==2 && matrix[2][2]==2) ||
(matrix[a][0]==2 && matrix[a][1]==2 && matrix[a][2]==2) ||
(matrix[0][2]==2 && matrix[1][1]==2 && matrix[0][2]==2));
return 2;
}

}
return 0;
}

void main(void){
int Jogador;
int simbolo;
int Rondas = 0;
int jogada;
InicioDeJogo();
JogadasPossiveis();
InitMatrix();
while (Rondas<=9){
++Rondas;
if (Rondas%2!=0){
Jogador=1;
}
else{
Jogador=2;
}
printf("--------------- \n");
printf("| EL TABULERO | \n");
printf("--------------- \n \n");
MatrizDeJogo();
printf("E A Tua Vez Jogador %d ---> \t", Jogador);
scanf("%d",&jogada);
makeMove(jogada,Jogador);
if (makeMove==1){
if (checkVictory(Rondas) ==1){
printf("O Jogador 1 Venceu A Espanholada!!! \n");
}
else if (checkVictory (Rondas) ==2){
printf("O Jogador 2 Venceu A Espanholada!!! \n");
}
else if (checkVictory (Rondas) ==0){
printf("Tudo Burro Nem Sabem Ganhar, Mais Vale Se Dedicarem Aos Videos Porno");
}
}
else if (makeMove==0){
--Rondas;
}
apagar();
}
}
 
Código:
MatrizDeJogo -> if (matrix[j] == 0)

Falta ai o "" algures.

Código:
        makeMove(jogada, Jogador);
        if (makeMove == 1)

Isso tb nao ira funcionar. ou chamas a rotina dentro do if ou guardas o valor retornado algures.
 
Back
Topo