Localhost Posted December 21, 2009 at 10:27 PM Report Share #301746 Posted December 21, 2009 at 10:27 PM Olá pessoal, hoje lembrei-me de fazer o jogo tic-tac ou mais conhecido por jogo do galo. O jogo já está praticamente feito, só falta mesmo fazer a parte da verificação de quem ganha mas isso penso que seja fácil e que faço rapidamente. O problema é que o meu jogo tem dois bugs por enquanto que eu não consigo resolver. Antes de mais nada está aqui o código: #include <stdio.h> int table(); int get_move(); int get_c_move(); int startup(); int help(); int check(); int tablex[2][2]; int startup() { int num; printf("################################\n##Game Programmed by Localhost##\n################################\n\n"); printf("What do you want to do?\n"); printf("1- Play\n2- Get Help\n3- Be an asshole and exit\n"); printf("You choose: "); scanf("%i", &num); switch(num) { case 1: table(); get_move(); return(0); case 2: help(); return(0); case 3: system("clear"); return(0); } } int main() { system("clear"); startup(); return(0); } int help() { printf("This is a game develped by Localhost, is a very well-known game. You will play against your computer. Just put three x's in a row.\n"); } int table() { system("clear"); printf(" _%c_|_%c_|_%c_\n", tablex[0][0],tablex[0][1],tablex[0][2]); printf(" _%c_|_%c_|_%c_\n", tablex[1][0],tablex[1][1],tablex[1][2]); printf(" %c | %c | %c\n\n", tablex[2][0], tablex[2][1], tablex[2][2]); } int get_move() { int l,c; printf("Qual é a linha que quer jogar? "); scanf("%i", &l); printf("Qual é a coluna que quer jogar? "); scanf("%i", &c); c-=1; l-=1; if(l > 3 || c > 3) { printf("Não existe essa posição no tabuleiro\n"); get_move(); } if(l < 0 || c < 0) { printf("Não existe essa posição no tabuleiro\n"); get_move(); } if(tablex[l][c] == 'X' || tablex[l][c] == 'O') { printf("Posição ocupada.Tente novamente\n"); get_move(); } else { tablex[l][c] = 'X'; table(); get_c_move(); } return(0); } int get_c_move() { int lc,cc; srand(time(NULL)); lc = rand() % 3 + 0; cc = rand() % 3 + 0; if(tablex[lc][cc] == 'X' || tablex[lc][cc] == 'O') { get_c_move(); } else { tablex[lc][cc] = 'O'; table(); get_move(); } return(0); } Os problemas são os seguintes: - Quando eu escolho uma sitio para colocar o X ou o pc escolhe um sitio para colocar o O o tabuleiro fica desfigurado, já tentei pensar em como resolver isso mas não sei. - O outro problema é quando eu jogo numa determinada posição (ou o pc) o X ou o O ficam em dois sitios (em dois quadrados) ficando como se jogasse duas vezes, este aqui nem percebo porque é que acontece. Alguém me podia ajudar com isto? Obrigado (: here since 2009 Link to comment Share on other sites More sharing options...
pedrix21 Posted December 22, 2009 at 02:58 AM Report Share #301780 Posted December 22, 2009 at 02:58 AM Uma coisa que me chamou logo atenção foi no tipo de matriz(int)! Estás a colocar caracteres num array de inteiros. Não tive a ver mais a fundo, porque já se faz um pouco tarde =) EDIT:Há e eu pelo menos no switch case uso no fim de cada case um break; Tu tens return(0) não sei se isso de alguma forma possa prejudicar o jogo :S Já foi uma ajuda 🙂 Cumps @Pedro Lopes Link to comment Share on other sites More sharing options...
Localhost Posted December 22, 2009 at 09:55 AM Author Report Share #301791 Posted December 22, 2009 at 09:55 AM LOL, tipo isso do int da matriz é porque se puseres do tipo char na verdade estás a declarar uma matriz mas é uma matriz de strings onde são dois vectores, ou seja, o primeiro [ ] é o número de chars e o segundo [ ] é o numero de strings, ou seja isso ia dar errado. Quanto ao break, se reparares eu no final de cada função tenho um return 0, o que o break ia fazer era quebrar o laço, ou seja, ia ter ao return 0, sendo exactamente a mesma coisa. Eu acho que do código que tenho está tudo certo, só falta mesmo é esses dois problemas que eu tenho. Mas obrigado (: EDIT: Desculpa eu quando disse que ao pôr uma matriz de chars ia dar errado não tenho a certeza mas penso que é exactamente a mesma coisa... Mas vou experimentar. EDIT[2]: Acabei agora de experimentar mudar para char, o jogo manteve-se igual inclusive o segundo problema. O primeiro é mesmo um problema de estética eheheh here since 2009 Link to comment Share on other sites More sharing options...
pedrosorio Posted December 22, 2009 at 10:07 AM Report Share #301792 Posted December 22, 2009 at 10:07 AM if(tablex[lc][cc] == 'X' || tablex[lc][cc] == 'O') { get_c_move(); } Péssimo. Faz um ciclo while com isso sff. LOL, tipo isso do int da matriz é porque se puseres do tipo char na verdade estás a declarar uma matriz mas é uma matriz de strings onde são dois vectores, ou seja, o primeiro [ ] é o número de chars e o segundo [ ] é o numero de strings, ou seja isso ia dar errado. Errado. Se queres utilizar uma matriz de caracteres declaras uma matriz de caracteres e não uma matriz de inteiros. Uma matriz de caracteres pode ser interpretada como um vector de strings caso em que cada string terá que ter um '\0' como caracter de terminação que é a convenção do C. Toda a utilização que estás a fazer é de uma matriz de caracteres pelo que não há motivo nenhum para não a declarares como char. Por falar na matriz... Onde é que a inicializas? Em lado nenhum. Inicializar a matriz com um caracter de espaço ' ' em todas as posições era suficiente para te resolver o problema do "tabuleiro desfigurado". Nunca deves utilizar nada que não esteja previamente inicializado em C. E já que estamos com a mão na massa... Porque é que declaras uma matriz 2x2 quando precisas de uma matriz 3x3? Não respondo a dúvidas por mensagem. Link to comment Share on other sites More sharing options...
Localhost Posted December 22, 2009 at 10:48 AM Author Report Share #301797 Posted December 22, 2009 at 10:48 AM Ok, obrigado, deu tudo certo (: Mas só uma coisa? Tanto as matrizes como os vectores nao começam não começam na posição 0? Estou a dizer isto porque (0,1,2) = 3. here since 2009 Link to comment Share on other sites More sharing options...
pedrosorio Posted December 22, 2009 at 11:57 AM Report Share #301807 Posted December 22, 2009 at 11:57 AM Ok, obrigado, deu tudo certo (: Mas só uma coisa? Tanto as matrizes como os vectores nao começam não começam na posição 0? Estou a dizer isto porque (0,1,2) = 3. Sim, começam. Mas não te podes esquecer que quando declaras um array o número que colocas entre parêntesis rectos é a quantidade de posições na memória que queres reservar. Pelo que para um array com as posições (0,1,2) tens que declarar: char arraydechar[3]; Não respondo a dúvidas por mensagem. Link to comment Share on other sites More sharing options...
Localhost Posted December 22, 2009 at 12:21 PM Author Report Share #301809 Posted December 22, 2009 at 12:21 PM Ah, sim tens razão ? here since 2009 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now