[Ajuda] JOGO DO GALO em C

Started by mjordan, July 20, 2007, 10:54:32 AM

Previous topic - Next topic

mjordan

ola boas a todos,

preciso de ajuda para Jogo do Galo. é um projecto para apresentar.

o código que tenho ja o exponho, e queria ajuda em 2 aspectos, no código abaixo onde faço ? :

- 3 niveis de dificuldade : 3x3 , 5x5, 7x7  como acrescento isto ?

- registar as vitorias, empates e derrotas de cada jogador pedindo nome do jogador no fim.

aviso sou muito basico em linguagem C e preciso de ajuda. e ajudas concretas s.f.f. algo que facilite mesmo a fazer ou que me digam mesmo o que fazer. fico agradecido.

CODIGO:

#include <stdio>
#include <stdlib>
#include <time>

// custom game result messages
#define DRAW_MSG "nenhum de voces ganhou.n"
#define LOST_MSG "tu perdes-te.n"
#define WON_MSG "Voce ganhou!n"


/* prototypes */
void display_prompt(int player);  // mostra a linha comando proximo movimento
void display_grid(int x, int y);  // mostra o quadro e correntes posições
void ai_engine(int player);       // temporário
void play_again(void);            // pergunta ao jogador se quer jogar outra vez
int winner_check(void);           // ver se alguem ganhou, e quem

/* global variables */
char matrix[3][3] = {\\'\0\\'};       // armazena as posições actuais do jogador
char user_choice;                 // guardar escolha do jogador
int user_o;                       // escolha do jogador que vai jogar com O? 1=yes, 0=no
int user_x;                       // escolha do jogador que vai jogar com X? 1=yes, 0=no
int turns = 0;                    // examina total de jogadas
int flag  = 0;                    // estabelece quem é a vez de jogar

int main()
{
    while (1) {
        system("CLS");
        char input[10];           //
                                  // para jogar outra vez
        printf("Voce quer jogar com X ou O ? ");
        fgets(input, sizeof(input), stdin);
        sscanf(input, "%c", &user_choice);
   
        switch (user_choice) {
            case \\'o\\':        
            case \\'O\\':
                user_o = 1;
                break;
            case \\'x\\':        
            case \\'X\\':
                user_x = 1;
                break;
            default:
                printf("Erro: por favor digite X ou O.nn");
                continue;
        }
        break;
    }
   
    /* primeira jogada do jogo */
    while (1) {
        // se for a primeira vez, selecçao aleatoria de quem começa
        if (turns == 0) {
            time_t seconds;
            time(&seconds);
            srand((unsigned int) seconds);
            flag = rand() % 2;
        }
       
        turns++;

        // se ninguem ganhou
        if ((turns >= 10) && (winner_check() == 0)) {
            system("CLS");
            display_grid(30, 1);
            printf("%sn", DRAW_MSG);
            play_again();
            break;
        }

        if (flag == 1) {                            // inicio das jogadas dos jogadores
            system("CLS");
            display_grid(30, 1);
           
            if (user_o == 1) {
                if (winner_check() == 1) {
                    printf("%sn", WON_MSG);
                    play_again();
                    break;  
                } else if (winner_check() == 2) {
                    printf("%sn", LOST_MSG);
                    play_again();
                    break;
                }
                printf("Voce esta jogando como: \\'%c\\'n", (user_o == 1) ? \\'O\\' : \\'X\\');
                display_prompt(1);
                flag = 0;
            } else if (user_x == 1) {
                if (winner_check() == 2) {
                    printf("%sn", WON_MSG);
                    play_again();
                    break;  
                } else if (winner_check() == 1) {
                    printf("%sn", LOST_MSG);
                    play_again();
                    break;
                }
                printf("You are playing as: \\'%c\\'n", (user_x == 1) ? \\'X\\' : \\'O\\');
                display_prompt(0);
                flag = 0;
            }                                       // fim das jogadas dos jogadores
        } else if (flag == 0) {                     // inicio da volta do PC
            if (user_o == 1) {
                // pára o computador se o jogador ja ganhou
                if (winner_check() == 0) ai_engine(2);
                flag = 1;
            } else if (user_x == 1) {
                // pára o computador se o jogador ja ganhou
                if (winner_check() == 0) ai_engine(1);
                flag = 1;
            }
        }                                           // fim da jogada do PC
    }
    /* fim da primeira jogada do jogo */

    system("PAUSE");
    return(0);  
}

/***************************************************************************
  display_prompt - faz exame de um inteiro,ou 1 ou 0 isto determina que  
                   marca vai para a pilha; \\'O\\' ou \\'X\\'. mostra um alerta  
                   para o jogador fazer proximo movimento                
 ***************************************************************************/
void display_prompt(int player)
{
    char input[10];
    int row, column;
   
    while (1) {
        printf("Por favor digite coordenadas, linha coluna (ex: 1 3): ");
        fgets(input, sizeof(input), stdin);
        sscanf(input, "%d %d", &row, &column);
   
        // validar entrada
        if ((row <1> 3) || (column <1> 3)) {
            printf("Erro: por favor somente 1-3.n");
            continue;        
        }

        if ((matrix[row-1][column-1] == \\'X\\') || (matrix[row-1][column-1] == \\'O\\')) {
            //
            // os índices da pilha com seu caracter.
            printf("A pilha esta ocupada, por favor escolha outra.n");
            continue;
        } else if (matrix[row-1][column-1] == \\'\0\\') {
            if (player == 1) {                         // jogador jogando com \\'O\\'
                matrix[row-1][column-1] = \\'O\\';
                break;
            } else {                                   // jogador jogando com \\'X\\'
                matrix[row-1][column-1] = \\'X\\';
                break;
            }
        }
    }
}



void display_grid(int x, int y) {
     int i;                     // loop index
     
     // ASCII caracteres para construir grelha
    char v_line = (char) 186;   // vertical "double line"
    char h_line = (char) 205;   // horizontal "double line"
    char c_sect = (char) 206;   // secção "double cross"
     
    printf("Author:  goncalo e paulonnn");
   
    for (i = 0; i < y; i++) {
        printf("n");
    }

    // iniciar grelha    
    for (i = 0; i < x; i++) printf(" ");
    printf("     %c     %c     n", v_line, v_line);
   
    // iniciar primeira linha
    for (i = 0; i < x; i++) printf(" ");
    if (matrix[0][0] == \\'O\\') {
        printf("  O");
    } else if (matrix[0][0] == \\'X\\') {
        printf("  X");
    } else {
        printf("   ");
    }
    printf("  %c  ", v_line);
    if (matrix[0][1] == \\'O\\') {
        printf("O");
    } else if (matrix[0][1] == \\'X\\') {
        printf("X");
    } else {
        printf(" ");
    }
    printf("  %c  ", v_line);
    if (matrix[0][2] == \\'O\\') {
        printf("O  n");
    } else if (matrix[0][2] == \\'X\\') {
        printf("X  n");
    } else {
        printf("   n");
    }
    // fim da primeira linha
   
    // ---
    for (i = 0; i < x; i++) printf(" ");
    printf("     %c     %c     n", v_line, v_line);
    // ---
   
    // ---
    for (i = 0; i < x; i++) printf(" ");
    for (i = 0; i < 5; i++) printf("%c", h_line);
    printf("%c", c_sect);
    for (i = 0; i < 5; i++) printf("%c", h_line);
    printf("%c", c_sect);
    for (i = 0; i < 5; i++) printf("%c", h_line);
    printf("n");
    // ---

    // ---
    for (i = 0; i < x; i++) printf(" ");
    printf("     %c     %c     n", v_line, v_line);
    // ---
   
    // iniciar segunda linha
    for (i = 0; i < x; i++) printf(" ");
    if (matrix[1][0] == \\'O\\') {
        printf("  O");
    } else if (matrix[1][0] == \\'X\\') {
        printf("  X");
    } else {
        printf("   ");
    }
    printf("  %c  ", v_line);
    if (matrix[1][1] == \\'O\\') {
        printf("O");
    } else if (matrix[1][1] == \\'X\\') {
        printf("X");
    } else {
        printf(" ");
    }
    printf("  %c  ", v_line);
    if (matrix[1][2] == \\'O\\') {
        printf("O  n");
    } else if (matrix[1][2] == \\'X\\') {
        printf("X  n");
    } else {
        printf("   n");
    }
    // fim da segunda linha
   
    // ---
    for (i = 0; i < x; i++) printf(" ");
    printf("     %c     %c     n", v_line, v_line);
    // ---
   
    // ---
    for (i = 0; i < x; i++) printf(" ");
    for (i = 0; i < 5; i++) printf("%c", h_line);
    printf("%c", c_sect);
    for (i = 0; i < 5; i++) printf("%c", h_line);
    printf("%c", c_sect);
    for (i = 0; i < 5; i++) printf("%c", h_line);
    printf("n");
    // ---
   
    // ---
    for (i = 0; i < x; i++) printf(" ");
    printf("     %c     %c     n", v_line, v_line);
    // ---
   
    // iniciar terceira linha
    for (i = 0; i < x; i++) printf(" ");
    if (matrix[2][0] == \\'O\\') {
        printf("  O");
    } else if (matrix[2][0] == \\'X\\') {
        printf("  X");
    } else {
        printf("   ");
    }
    printf("  %c  ", v_line);
    if (matrix[2][1] == \\'O\\') {
        printf("O");
    } else if (matrix[2][1] == \\'X\\') {
        printf("X");
    } else {
        printf(" ");
    }
    printf("  %c  ", v_line);
    if (matrix[2][2] == \\'O\\') {
        printf("O  n");
    } else if (matrix[2][2] == \\'X\\') {
        printf("X  n");
    } else {
        printf("   n");
    }
    // fim da terceira linha
   
    // ---
    for (i = 0; i < x; i++) printf(" ");
    printf("     %c     %c     n", v_line, v_line);
    // ---

    printf("nnn");
}

/******************************************************************************
  winner_check - verificar se alguém ganhou com uma linha de 3 \\'O\\'s ou \\'X\\'s,
                 retorna 2 se \\'X\\' ganhou, 1 se \\'O\\' ganhou e zero se          
                 ninguem ganhou.                                            
                                                                             
                 
 ******************************************************************************/
int winner_check(void)
{
    // combinaçoes para \\'X\\'s ganhar
    if ((matrix[0][0] == \\'X\\') && (matrix[0][1] == \\'X\\') && (matrix[0][2] == \\'X\\')) return(2);
    if ((matrix[0][0] == \\'X\\') && (matrix[1][0] == \\'X\\') && (matrix[2][0] == \\'X\\')) return(2);
    if ((matrix[0][0] == \\'X\\') && (matrix[1][1] == \\'X\\') && (matrix[2][2] == \\'X\\')) return(2);
    if ((matrix[0][1] == \\'X\\') && (matrix[1][1] == \\'X\\') && (matrix[2][1] == \\'X\\')) return(2);
    if ((matrix[0][2] == \\'X\\') && (matrix[1][2] == \\'X\\') && (matrix[2][2] == \\'X\\')) return(2);
    if ((matrix[0][2] == \\'X\\') && (matrix[1][1] == \\'X\\') && (matrix[2][0] == \\'X\\')) return(2);
    if ((matrix[1][0] == \\'X\\') && (matrix[1][1] == \\'X\\') && (matrix[1][2] == \\'X\\')) return(2);
    if ((matrix[2][0] == \\'X\\') && (matrix[2][1] == \\'X\\') && (matrix[2][2] == \\'X\\')) return(2);
   
    // combinaçoes para \\'O\\'s ganhar
    if ((matrix[0][0] == \\'O\\') && (matrix[0][1] == \\'O\\') && (matrix[0][2] == \\'O\\')) return(1);
    if ((matrix[0][0] == \\'O\\') && (matrix[1][0] == \\'O\\') && (matrix[2][0] == \\'O\\')) return(1);
    if ((matrix[0][0] == \\'O\\') && (matrix[1][1] == \\'O\\') && (matrix[2][2] == \\'O\\')) return(1);
    if ((matrix[0][1] == \\'O\\') && (matrix[1][1] == \\'O\\') && (matrix[2][1] == \\'O\\')) return(1);
    if ((matrix[0][2] == \\'O\\') && (matrix[1][2] == \\'O\\') && (matrix[2][2] == \\'O\\')) return(1);
    if ((matrix[0][2] == \\'O\\') && (matrix[1][1] == \\'O\\') && (matrix[2][0] == \\'O\\')) return(1);
    if ((matrix[1][0] == \\'O\\') && (matrix[1][1] == \\'O\\') && (matrix[1][2] == \\'O\\')) return(1);
    if ((matrix[2][0] == \\'O\\') && (matrix[2][1] == \\'O\\') && (matrix[2][2] == \\'O\\')) return(1);
   
    // se ninguem ganhou retorna zero
    return(0);
}

/*******************************************************************************
   
                                                                             
  argumentos - single int: 1 significa que o computador esta jogando com \\'O\\',
                2 significa \\'X\\'
                                                                           
  nota     - global variable \\'matrix\\'                          
 ******************************************************************************/
void ai_engine(int player)
{
    char me = (player == 2) ? \\'X\\' : \\'O\\'; // o computador joga como?
    char he = (player == 2) ? \\'O\\' : \\'X\\'; // jogador está jogando como oponente
   
    int flag = 0;                        // verifica se ha ou nao movimento
    time_t seconds;                      // gerar um número aleatório
    int x, y;                            // coordenadas da disposição de matriz

    while (1) {
        // inicio: verificar se podemos ganhar com proximo movimento
        if ((matrix[0][0] == me) && (matrix[0][1] == me) && (matrix[0][2] == \\'\0\\')) {matrix[0][2] = me; flag = 1; break;}
        if ((matrix[0][0] == me) && (matrix[1][0] == me) && (matrix[2][0] == \\'\0\\')) {matrix[2][0] = me; flag = 1; break;}
        if ((matrix[0][0] == me) && (matrix[1][1] == me) && (matrix[2][2] == \\'\0\\')) {matrix[2][2] = me; flag = 1; break;}
        if ((matrix[0][1] == me) && (matrix[1][1] == me) && (matrix[2][1] == \\'\0\\')) {matrix[2][1] = me; flag = 1; break;}
        if ((matrix[0][2] == me) && (matrix[1][2] == me) && (matrix[2][2] == \\'\0\\')) {matrix[2][2] = me; flag = 1; break;}
        if ((matrix[0][2] == me) && (matrix[1][1] == me) && (matrix[2][0] == \\'\0\\')) {matrix[2][0] = me; flag = 1; break;}
        if ((matrix[1][0] == me) && (matrix[1][1] == me) && (matrix[1][2] == \\'\0\\')) {matrix[1][2] = me; flag = 1; break;}
        if ((matrix[2][0] == me) && (matrix[2][1] == me) && (matrix[2][2] == \\'\0\\')) {matrix[1][2] = me; flag = 1; break;}
        if ((matrix[0][0] == me) && (matrix[0][1] == \\'\0\\') && (matrix[0][2] == me)) {matrix[0][1] = me; flag = 1; break;}
        if ((matrix[0][0] == me) && (matrix[1][0] == \\'\0\\') && (matrix[2][0] == me)) {matrix[1][0] = me; flag = 1; break;}
        if ((matrix[0][0] == me) && (matrix[1][1] == \\'\0\\') && (matrix[2][2] == me)) {matrix[1][1] = me; flag = 1; break;}
        if ((matrix[0][1] == me) && (matrix[1][1] == \\'\0\\') && (matrix[2][1] == me)) {matrix[1][1] = me; flag = 1; break;}
        if ((matrix[0][2] == me) && (matrix[1][2] == \\'\0\\') && (matrix[2][2] == me)) {matrix[1][2] = me; flag = 1; break;}
        if ((matrix[0][2] == me) && (matrix[1][1] == \\'\0\\') && (matrix[2][0] == me)) {matrix[1][1] = me; flag = 1; break;}
        if ((matrix[1][0] == me) && (matrix[1][1] == \\'\0\\') && (matrix[1][2] == me)) {matrix[1][1] = me; flag = 1; break;}
        if ((matrix[2][0] == me) && (matrix[2][1] == \\'\0\\') && (matrix[2][2] == me)) {matrix[2][1] = me; flag = 1; break;}
        if ((matrix[0][0] == \\'\0\\') && (matrix[0][1] == me) && (matrix[0][2] == me)) {matrix[0][0] = me; flag = 1; break;}
        if ((matrix[0][0] == \\'\0\\') && (matrix[1][0] == me) && (matrix[2][0] == me)) {matrix[0][0] = me; flag = 1; break;}
        if ((matrix[0][0] == \\'\0\\') && (matrix[1][1] == me) && (matrix[2][2] == me)) {matrix[0][0] = me; flag = 1; break;}
        if ((matrix[0][1] == \\'\0\\') && (matrix[1][1] == me) && (matrix[2][1] == me)) {matrix[0][1] = me; flag = 1; break;}
        if ((matrix[0][2] == \\'\0\\') && (matrix[1][2] == me) && (matrix[2][2] == me)) {matrix[0][2] = me; flag = 1; break;}
        if ((matrix[0][2] == \\'\0\\') && (matrix[1][1] == me) && (matrix[2][0] == me)) {matrix[0][2] = me; flag = 1; break;}
        if ((matrix[1][0] == \\'\0\\') && (matrix[1][1] == me) && (matrix[1][2] == me)) {matrix[1][0] = me; flag = 1; break;}
        if ((matrix[2][0] == \\'\0\\') && (matrix[2][1] == me) && (matrix[2][2] == me)) {matrix[2][0] = me; flag = 1; break;}
        // fim: movimento de vitoria
       
        // inicio: verificar se se pode bloquear proximo movimento
        if ((matrix[0][0] == he) && (matrix[0][1] == he) && (matrix[0][2] == \\'\0\\')) {matrix[0][2] = me; flag = 1; break;}
        if ((matrix[0][0] == he) && (matrix[1][0] == he) && (matrix[2][0] == \\'\0\\')) {matrix[2][0] = me; flag = 1; break;}
        if ((matrix[0][0] == he) && (matrix[1][1] == he) && (matrix[2][2] == \\'\0\\')) {matrix[2][2] = me; flag = 1; break;}
        if ((matrix[0][1] == he) && (matrix[1][1] == he) && (matrix[2][1] == \\'\0\\')) {matrix[2][1] = me; flag = 1; break;}
        if ((matrix[0][2] == he) && (matrix[1][2] == he) && (matrix[2][2] == \\'\0\\')) {matrix[2][2] = me; flag = 1; break;}
        if ((matrix[0][2] == he) && (matrix[1][1] == he) && (matrix[2][0] == \\'\0\\')) {matrix[2][0] = me; flag = 1; break;}
        if ((matrix[1][0] == he) && (matrix[1][1] == he) && (matrix[1][2] == \\'\0\\')) {matrix[1][2] = me; flag = 1; break;}
        if ((matrix[2][0] == he) && (matrix[2][1] == he) && (matrix[2][2] == \\'\0\\')) {matrix[1][2] = me; flag = 1; break;}
        if ((matrix[0][0] == he) && (matrix[0][1] == \\'\0\\') && (matrix[0][2] == he)) {matrix[0][1] = me; flag = 1; break;}
        if ((matrix[0][0] == he) && (matrix[1][0] == \\'\0\\') && (matrix[2][0] == he)) {matrix[1][0] = me; flag = 1; break;}
        if ((matrix[0][0] == he) && (matrix[1][1] == \\'\0\\') && (matrix[2][2] == he)) {matrix[1][1] = me; flag = 1; break;}
        if ((matrix[0][1] == he) && (matrix[1][1] == \\'\0\\') && (matrix[2][1] == he)) {matrix[1][1] = me; flag = 1; break;}
        if ((matrix[0][2] == he) && (matrix[1][2] == \\'\0\\') && (matrix[2][2] == he)) {matrix[1][2] = me; flag = 1; break;}
        if ((matrix[0][2] == he) && (matrix[1][1] == \\'\0\\') && (matrix[2][0] == he)) {matrix[1][1] = me; flag = 1; break;}
        if ((matrix[1][0] == he) && (matrix[1][1] == \\'\0\\') && (matrix[1][2] == he)) {matrix[1][1] = me; flag = 1; break;}
        if ((matrix[2][0] == he) && (matrix[2][1] == \\'\0\\') && (matrix[2][2] == he)) {matrix[2][1] = me; flag = 1; break;}
        if ((matrix[0][0] == \\'\0\\') && (matrix[0][1] == he) && (matrix[0][2] == he)) {matrix[0][0] = me; flag = 1; break;}
        if ((matrix[0][0] == \\'\0\\') && (matrix[1][0] == he) && (matrix[2][0] == he)) {matrix[0][0] = me; flag = 1; break;}
        if ((matrix[0][0] == \\'\0\\') && (matrix[1][1] == he) && (matrix[2][2] == he)) {matrix[0][0] = me; flag = 1; break;}
        if ((matrix[0][1] == \\'\0\\') && (matrix[1][1] == he) && (matrix[2][1] == he)) {matrix[0][1] = me; flag = 1; break;}
        if ((matrix[0][2] == \\'\0\\') && (matrix[1][2] == he) && (matrix[2][2] == he)) {matrix[0][2] = me; flag = 1; break;}
        if ((matrix[0][2] == \\'\0\\') && (matrix[1][1] == he) && (matrix[2][0] == he)) {matrix[0][2] = me; flag = 1; break;}
        if ((matrix[1][0] == \\'\0\\') && (matrix[1][1] == he) && (matrix[1][2] == he)) {matrix[1][0] = me; flag = 1; break;}
        if ((matrix[2][0] == \\'\0\\') && (matrix[2][1] == he) && (matrix[2][2] == he)) {matrix[2][0] = me; flag = 1; break;}
        // fim: movimento de defesa
       
        //
        break;
    }
   
    // escolha um quadrado aleatório
    if (flag == 0) {
        while (1) {
            time(&seconds);
            srand((unsigned int) seconds);
   
            // jogando numeros aleatórios entre 0 e 2
            x = rand() % 3;
            y = rand() % 3;
       
            // ter certezas de pilha vazia antes de mudar seu indice
            if ((matrix
  • [y] == me) || (matrix
  • [y] == he)) {
               continue;
            } else if (matrix
  • [y] == \\'\0\\') {
               if (player == 1) {           // jogando como \\'O\\'s
                    matrix
  • [y] = \\'O\\';
                   break;
                } else if (player == 2) {    // jogando como \\'X\\'s
                    matrix
  • [y] = \\'X\\';
                   break;
                }
            }
        }
    }
}


void play_again(void) {
    // repor disposição para novo começo
    matrix[0][0] = \\'\0\\'; matrix[0][1] = \\'\0\\'; matrix[0][2] = \\'\0\\';
    matrix[1][0] = \\'\0\\'; matrix[1][1] = \\'\0\\'; matrix[1][2] = \\'\0\\';
    matrix[2][0] = \\'\0\\'; matrix[2][1] = \\'\0\\'; matrix[2][2] = \\'\0\\';
   
    // repoe voltas para novo começo
    turns = 0;
   
    char answer;
     
    printf("Deseja jogar de novo (Y/N)? ");
    answer = getchar();
   
    while (1) {
        switch (answer) {
            case \\'y\\':   // escolher
            case \\'Y\\':
                main();
            case \\'n\\':   // escolher
            case \\'N\\':
                exit(0);
            default:
                continue;
        }
    }
}

ajudem-me s.f.f.  fico a aguardar até sabado de noite. é o prazo!  

Editado por southafrikanse (tag colocada)

nDray

vejo que fizeste uma análise por força bruta..... Isso até nem é assim tão mau, para 3x3, mas impensável para 5x5, muito pior para 7x7...

Além disso podias usar ciclos for... tinham-te poupado trabalho....

Eu também tenho uma implementação "parecida com a tua", mas o utilizador nunca ganha... xD
posso enviar-te o programa para veres.....


Quanto à inteligencia artificial, será boa ideia recorreres a "minimax" (google it)...

De resto, as dúvidas que tens são, elementares.... A matriz crias com tamanhos diferentes, consoante o nivel de dificuldade, e depois as funções têm que variar em função dessa escolha... mais uma vez, os ciclos ajudam, usando variaveis e nao valores fixos.....

Quanto a vitórias/derrotas, bastam 3 variaveis... vitorias derrotas e total.


Let\'s communicate one byte at a time :)

southafrikanse

Ao pedires ao utilizador para escolher o nível de dificuldade pedes para ele escolher 1,2 ou 3.

Consoante, a opção introduzida crias uma função que receba essa variável (1,2 ou 3) e fazes um swich:

Por exemplo:

opcao (a)
{
    switch a
    {
      case: 1                 // Nível 1 Crias matriz 3x3
      break;
      case: 2                // Nível 2 Crias matrix 5x5
      break;
      case: 3                // Nível 3 Crias matriz 7x7
      break
        }
          }
Blog Pessoal | Tugatrónica | Fórum Webtuga
"Knowledge is knowing that a tomato is a fruit, but Wisdom is knowing not to put it in a fruit salad."

arkangath

QuoteAo pedires ao utilizador para escolher o nível de dificuldade pedes para ele escolher 1,2 ou 3.

Consoante, a opção introduzida crias uma função que receba essa variável (1,2 ou 3) e fazes um swich:

Por exemplo:

opcao (a)
{
    switch a
    {
      case: 1                 // Nível 1 Crias matriz 3x3
      break;
      case: 2                // Nível 2 Crias matrix 5x5
      break;
      case: 3                // Nível 3 Crias matriz 7x7
      break
        }
          }
Mais simples ainda

switch (getch())
{
case 1: (...)
case 2: (..)
case 3: (..)
default: print("Escolheu opçao errada");
}

nDray

Acho que se a função de analisar as matrizes for genérica, fica mais fácil não fazer quaisquer switches...

escolha:


// ...



inline int opcaoInvalida(char a)

{

return (1 > a || 3 < a);

}



// ...



int main()

{

// ...



char opcao;

printf("1 - faciln2 - medion3 - dificilnopcao: ");



while(opcaoInvalida(opcao = getchar() - \\'0\\'))

{

fflush(stdin); // porque o new line continua no buffer,

  // ou caso se introduza mais que um caracter....

printf("opcao invalida, introduza novamente: ");

}

int lado = (opcao * 2) + 1; // podia meter a conta logo dentro dos "[ ]", mas pronto...

char matriz[lado][lado];



// ...



return (0);

}

para ver com highlight... http://ndray.pastebin.com/d79b0540c


Let\'s communicate one byte at a time :)