Psycop Posted April 1, 2012 at 03:24 PM Report #446879 Posted April 1, 2012 at 03:24 PM Olá Estou a tentar exercitar a minha programação em C de modo a aprender mais e evoluir, so que tenho sentido dificuldades no campo das funções, nomeadamente com os parâmetros e argumentos. Ultimamente tenho andado a tentar fazer o jogo do galo, e estava a tentar implementar uma função para fazer a leitura das coordenadas, mas não estou a conseguir. Aqui fica o código: ************************************************ Nome: Nuno Santos Data: 31-03-2012 Projecto: Jogo do Galo_1.03 ************************************************/ #include <stdio.h> #include <stdlib.h> #define DIM 3 void posicoes(int posicoes(int posx, int posy)) { int n_jogadas = 0; // Acção Jogador - Coordenadas printf("\nDigite as coordenadas do X: "); scanf("%d", &posx); fflush(stdin); printf("\nDigite as coordenadas do Y: "); scanf("%d", &posy); fflush(stdin); posx--; posy--; n_jogadas ++; } int main() { char Galo [DIM][DIM] = {{' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '}}; int i, j, n; int posx, posy; // Inicia a Matriz for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { Galo[i][j] = ' '; } } posicoes(posx, posy); if(Galo[posx][posy] != ' ') { printf("\nPosicao invalida, tente novamente.\n"); } else { Galo[posx][posy] = 'X'; } // Apresenta a Matriz printf("\n"); for(n = 0; n < 3; n++) { printf(" %c | %c | %c ", Galo[n][0], Galo[n][1], Galo[n][2]); if(n != 2) { printf("\n---|---|---\n"); } } printf("\n"); system("PAUSE"); } Se fosse possível gostaria que me ajudassem a entender melhor esta questão das funções e como implementar correctamente o que pretendo. Cumps
pikax Posted April 1, 2012 at 03:57 PM Report #446885 Posted April 1, 2012 at 03:57 PM //void posicoes(int posicoes(int posx, int posy)) //errado void posicoes(int posx, int posy) { int n_jogadas = 0; // Acção Jogador - Coordenadas printf("\nDigite as coordenadas do X: "); scanf("%d", &posx); fflush(stdin); printf("\nDigite as coordenadas do Y: "); scanf("%d", &posy); fflush(stdin); posx--; posy--; n_jogadas ++; } http://www.cplusplus.com/doc/tutorial/functions/ as funcoes teem um tipo de retorno(ex: void, char,int,etc), tem um nome(exemplo:main,posicoes,etc) e tem argumentos(sao variaveis que irao ser passadas para essa funcao). Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
Psycop Posted April 2, 2012 at 10:25 AM Author Report #447021 Posted April 2, 2012 at 10:25 AM Consegui implementar a função desejada, mas tive de recorrer a variáveis globais pois não consegui de outra forma, o que acontece é que eu não sei como contornar o problema das variáveis globais. Quanto ao código do jogo, queria pedir ajuda também na parte de apresentar as posições no tabuleiro, que serão x entradas, mas a cada nova entrada de coordenadas a anterior desaparece, como posso contornar isso? Aqui fica o código: /************************************************ Nome: Nuno Santos Data: 02-04-2012 Projecto: Jogo do Galo_1.03 ************************************************/ #include <stdio.h> #include <stdlib.h> #define DIM 3 int x, y; int n_jogadas; void posicoes() { // Acção Jogador - Coordenadas printf("\nDigite as coordenadas do X: "); scanf("%d", &x); fflush(stdin); printf("\nDigite as coordenadas do Y: "); scanf("%d", &y); fflush(stdin); x--; y--; } int main() { char Galo [DIM][DIM] = {{' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '}}; int i, j, n; // Inicia a Matriz while(n_jogadas < DIM*DIM) { for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { Galo[i][j] = ' '; } } posicoes(x, y); if(Galo[x][y] != ' ') { printf("\nPosicao invalida, tente novamente.\n"); } else { Galo[x][y] = 'X'; } // Apresenta a Matriz printf("\n"); for(n = 0; n < 3; n++) { printf(" %c | %c | %c ", Galo[n][0], Galo[n][1], Galo[n][2]); if(n != 2) { printf("\n---|---|---\n"); } } n_jogadas++; printf("\n"); } system("PAUSE"); } Cumps
pmg Posted April 2, 2012 at 10:32 AM Report #447024 Posted April 2, 2012 at 10:32 AM ... eu não sei como contornar o problema das variáveis globais. Usa variáveis locais na função main e passa o endereço dessas variaveis para as funções que as precisam de alterar. O operador & serve para isso mesmo: funcao_que_muda_variavle(&x); void posicoes() { /* ... */ } int main() { /* ... */ posicoes(x, y); /* ... */ } Sugestão: aumenta o nível de warnings do teu compilador, e faz o máximo possível de compilações limpas. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
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