kossoski 0 Denunciar post Postado Agosto 14, 2013 #include <stdio.h> #define N 6 // Linhas do tabuleiro #define M 7 // Colunas do tabuleiro /* --------------------------------------------------------- 1. Nome : Esta Cheio 2. Função : Verifica se todas as colunas estão cheias 3. Argumentos : Tabuleiro 4. Retorno : 0 = não cheio / 1 = cheio --------------------------------------------------------- */ int estaCheio(int tab[N][M]) { int i; for (i = 0; i < M; i++) { if (tab[0] == '.') { return 0; } } return 1; } /* --------------------------------------------------------- 1. Nome : Escreve Tabuleiro 2. Função : Exibe as colunas na tela com '.','O' ou 'X' 3. Argumentos : Tabuleiro 4. Retorno : -- NADA -- --------------------------------------------------------- */ void escreveTabuleiro(int tab[N][M]) { int i, j; printf("-------------\n"); for (i = -1; i < N; i++) { for (j = 0; j < M; j++) { if (i == -1) { printf("%d ",(j + 1)); continue; } printf("%c ",tab[j]); } printf("\n"); } printf("-------------\n"); } /* --------------------------------------------------------- 1. Nome : Lê Jogada 2. Função : Exibe quem é o jogador e captura a jogada 3. Argumentos : Jogador 4. Retorno : Coluna escolhida --------------------------------------------------------- */ int leJogada(int jogador) { char coluna; printf("Jogador (%d)\n",jogador); printf("Digite uma coluna: "); scanf("\n%c",&coluna); return ((int) coluna - 48); } /* --------------------------------------------------------- 1. Nome : Jogada Válida 2. Função : Verifica se coluna é válida e ñ está cheia 3. Argumentos : Tabuleiro e Coluna escolhida 4. Retorno : 0 = irregular / 1 = válida --------------------------------------------------------- */ int jogadaValida(int tab[N][M], int coluna) { if (coluna < 1 || coluna > M) { return 0; } if (tab[0][coluna - 1] != '.') { return 0; } return 1; } /* --------------------------------------------------------- 1. Nome : Executa Jogada 2. Função : Preenche tabuleiro com 'O' ou 'X' 3. Argumentos : Tabuleiro, Jogador e Coluna escolhida 4. Retorno : -- NADA -- --------------------------------------------------------- */ void executaJogada(int tab[N][M], int jogador, int coluna) { int i; char pecas[2] = {'O','X'}; coluna--; for (i = N; i >= 0; i--) { if (tab[coluna] == '.') { tab[coluna] = pecas[jogador - 1]; break; } } } /* --------------------------------------------------------- 1. Nome : Direção (AUXILIAR da função: Ganhou) 2. Função : Contagem de caracteres semelhantes em linha 3. Argumentos : Tabuleiro, Caracter, PosX, PosY e Direção 4. Retorno : Quantidade de semelhantes "nesta direção" --------------------------------------------------------- */ int direcao(int tab[][M], char c, int x, int y, char * dir) { int i, p = 0; for (i = 1; i <= 3; i++) { int x_ = x; if (strcmp(dir,"NO") == 0 || strcmp(dir,"SO") == 0 || strcmp(dir,"O") == 0) { x_ = x - i; } else if (strcmp(dir,"NE") == 0 || strcmp(dir,"SE") == 0 || strcmp(dir,"L") == 0) { x_ = x + i; } int y_ = y; if (strcmp(dir,"NO") == 0 || strcmp(dir,"NE") == 0) { y_ = y - i; } else if (strcmp(dir,"SO") == 0 || strcmp(dir,"SE") == 0 || strcmp(dir,"S") == 0) { y_ = y + i; } if ((x_ >= 0) && (x_ < M) && (y_ >= 0) && (y_ < N)) { if (tab[y_][x_] == c) { p++; } } else { return p; } } return p; } /* --------------------------------------------------------- 1. Nome : Ganhou 2. Função : Verifica se houve vencedor na jogada atual 3. Argumentos : Tabuleiro e Coluna Escolhida 4. Retorno : 0 = continuar jogo / 1 = FIM DE JOGO --------------------------------------------------------- */ int ganhou(int tab[][M], int coluna) { int i; char c = 0; coluna--; for (i = 0; i < N; i++) { if (tab[coluna] != 46) { c = tab[coluna]; break; } } if (c == 0) { return 0; } int verificacao = direcao(tab, c, coluna, i, "NO") + direcao(tab, c, coluna, i, "SE"); if (verificacao < 3) { verificacao = direcao(tab, c, coluna, i, "NE") + direcao(tab, c, coluna, i, "SO"); if (verificacao < 3) { verificacao = direcao(tab, c, coluna, i, "O") + direcao(tab, c, coluna, i, "L"); if (verificacao < 3) { verificacao = direcao(tab, c, coluna, i, "S"); if (verificacao < 3) { return 0; } } } } return 1; } /* --------------------------------------------------------- 1. Nome : Principal (main) 2. Função : Gerenciamento das outras funções 3. Argumentos : Numero e Valores de argumentos do PROMPT 4. Retorno : 0 = OK --------------------------------------------------------- */ int main(void) { int tab[N][M]; int i, j; for (i = 0; i < N; i++) { for (j = 0; j < M; j++) { tab[j] = '.'; } } int jogada = 0, jogador, coluna, fim = 0; char tmp, * final = (char *) malloc(50); do { jogador = (jogada % 2) + 1; if (estaCheio(tab)) { final = "EMPATE!"; fim = 1; break; } system("pause"); escreveTabuleiro(tab); coluna = leJogada(jogador); if (jogadaValida(tab, coluna)) { executaJogada(tab, jogador, coluna); fim = ganhou(tab, coluna); if (fim) { sprintf(final," Vencedor: \n [Jogador %c]",jogador + 48); } jogada++; continue; } printf("Jogada inválida!\n"); printf("Tente novamente!\n"); scanf("\n%c",&tmp); } while (!fim); system("pause"); escreveTabuleiro(tab); printf(" (FIM)\n"); printf("%s\n",final); printf("-------------\n"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
reebr 94 Denunciar post Postado Agosto 15, 2013 Utilize a tag CODE. Compartilhar este post Link para o post Compartilhar em outros sites
kossoski 0 Denunciar post Postado Agosto 21, 2013 Ainda naum consegui fazer...mais ideias Compartilhar este post Link para o post Compartilhar em outros sites
reebr 94 Denunciar post Postado Agosto 21, 2013 Falei para usar a tag CODE aqui no fórum para facilitar a leitura do código. Compartilhar este post Link para o post Compartilhar em outros sites
kossoski 0 Denunciar post Postado Agosto 23, 2013 Desculpa mas o que é tag CODE Compartilhar este post Link para o post Compartilhar em outros sites