Jump to content
Sign in to follow this  
Eirax

Erro em Programa

Recommended Posts

Eirax

Tenho trabalho quase pronto mas está com um erro para o qual preciso de ajuda.

O programa é um jogo do galo e está a dar os resultados como esperava, mas quando adicionei um menu, o jogo corre mas não termina e fica preso.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication2
{
    class Program
    {
        public class GlobalVars
        {
            public static int contador;
            public static string quadrado;
            public static string opcao;
            public static bool invalida = false;
            public static bool vitoria = false;
            //public static bool sair = true;

            public static int jogador = 1;

            public static string[] Tabela = new string[9];
            public static string[] Simbolo = new string[2];
        }

        static void cabecalho()
        {
            Console.WriteLine(" ----------------------------------------------------------------------------- ");
            Console.WriteLine("|*****************************************************************************|");
            Console.WriteLine("|*");
            Console.SetCursorPosition(77, 2);
            Console.WriteLine("*|");
            Console.WriteLine("|*");
            Console.SetCursorPosition(77, 3);
            Console.WriteLine("*|");
            Console.WriteLine("|*");
            Console.SetCursorPosition(32, 4);
            Console.WriteLine("JOGO DO GALO ");
            Console.SetCursorPosition(77, 4);
            Console.WriteLine("*|");
            Console.WriteLine("|*");
            Console.SetCursorPosition(77, 5);
            Console.WriteLine("*|");
            Console.WriteLine("|*");
            Console.SetCursorPosition(77, 6);
            Console.WriteLine("*|");
            Console.WriteLine("|*****************************************************************************|");
            Console.WriteLine(" ----------------------------------------------------------------------------- ");
        }
        static void desenhar_tabela()
        {
            Console.WriteLine(" " + GlobalVars.Tabela[0] + " | " + GlobalVars.Tabela[1] + " | " + GlobalVars.Tabela[2] + " ");
            Console.WriteLine("---+---+---");
            Console.WriteLine(" " + GlobalVars.Tabela[3] + " | " + GlobalVars.Tabela[4] + " | " + GlobalVars.Tabela[5] + " ");
            Console.WriteLine("---+---+---");
            Console.WriteLine(" " + GlobalVars.Tabela[6] + " | " + GlobalVars.Tabela[7] + " | " + GlobalVars.Tabela[8] + " ");
        }
        static void verificar_vitoria()
        {
            GlobalVars.contador = 10;
            Console.WriteLine("O jogador " + GlobalVars.jogador + " ganhou!!!");
            GlobalVars.vitoria = true;
            //GlobalVars.sair = true;
            Console.ReadLine();
        }
        static void jogo_do_galo()
        {


                Console.Clear();
                cabecalho();
                Console.WriteLine();
                desenhar_tabela();

                Console.WriteLine("");
                Console.WriteLine("O jogardor 1 joga com o O e o jogador 2 com o X");
                GlobalVars.contador = 0;

                while (GlobalVars.contador < 9)
                {
                    Console.WriteLine("Jogador " + GlobalVars.jogador + " é a sua vez:");
                    GlobalVars.invalida = false;

                    GlobalVars.quadrado = Console.ReadLine();

                    if (GlobalVars.jogador == 1)
                        GlobalVars.Simbolo[0] = "O";
                    else
                        GlobalVars.Simbolo[0] = "X";


                    switch (GlobalVars.quadrado)
                    {
                        case "1":

                            if (GlobalVars.Tabela[0] == "1")
                            {
                                GlobalVars.Tabela[0] = GlobalVars.Simbolo[0];
                                GlobalVars.contador = GlobalVars.contador + 1;
                            }
                            else
                            {
                                GlobalVars.invalida = true;
                            }
                            break;

                        case "2":

                            if (GlobalVars.Tabela[1] == "2")
                            {
                                GlobalVars.Tabela[1] = GlobalVars.Simbolo[0];
                                GlobalVars.contador = GlobalVars.contador + 1;
                            }
                            else
                            {
                                GlobalVars.invalida = true;
                            }
                            break;

                        case "3":

                            if (GlobalVars.Tabela[2] == "3")
                            {
                                GlobalVars.Tabela[2] = GlobalVars.Simbolo[0];
                                GlobalVars.contador = GlobalVars.contador + 1;
                            }
                            else
                            {
                                GlobalVars.invalida = true;
                            }
                            break;

                        case "4":

                            if (GlobalVars.Tabela[3] == "4")
                            {
                                GlobalVars.Tabela[3] = GlobalVars.Simbolo[0];
                                GlobalVars.contador = GlobalVars.contador + 1;
                            }
                            else
                            {
                                GlobalVars.invalida = true;
                            }
                            break;

                        case "5":

                            if (GlobalVars.Tabela[4] == "5")
                            {
                                GlobalVars.Tabela[4] = GlobalVars.Simbolo[0];
                                GlobalVars.contador = GlobalVars.contador + 1;
                            }
                            else
                            {
                                GlobalVars.invalida = true;
                            }
                            break;

                        case "6":

                            if (GlobalVars.Tabela[5] == "6")
                            {
                                GlobalVars.Tabela[5] = GlobalVars.Simbolo[0];
                                GlobalVars.contador = GlobalVars.contador + 1;
                            }
                            else
                            {
                                GlobalVars.invalida = true;
                            }
                            break;

                        case "7":

                            if (GlobalVars.Tabela[6] == "7")
                            {
                                GlobalVars.Tabela[6] = GlobalVars.Simbolo[0];
                                GlobalVars.contador = GlobalVars.contador + 1;
                            }
                            else
                            {
                                GlobalVars.invalida = true;
                            }
                            break;

                        case "8":

                            if (GlobalVars.Tabela[7] == "8")
                            {
                                GlobalVars.Tabela[7] = GlobalVars.Simbolo[0];
                                GlobalVars.contador = GlobalVars.contador + 1;
                            }
                            else
                            {
                                GlobalVars.invalida = true;
                            }
                            break;

                        case "9":

                            if (GlobalVars.Tabela[8] == "9")
                            {
                                GlobalVars.Tabela[8] = GlobalVars.Simbolo[0];
                                GlobalVars.contador = GlobalVars.contador + 1;
                            }
                            else
                            {
                                GlobalVars.invalida = true;
                            }
                            break;


                        default:
                            GlobalVars.invalida = true;
                            break;

                    }
                    if (GlobalVars.invalida == false)
                    {
                        Console.Clear();
                        cabecalho();
                        Console.WriteLine();
                        desenhar_tabela();
                    }
                    else
                    {
                        Console.Clear();
                        cabecalho();
                        Console.WriteLine();
                        desenhar_tabela();
                        Console.WriteLine("Opção inválida. Insira novamente a jogada:");
                    }
                    if (GlobalVars.Tabela[0] != "1")
                    {
                        if (GlobalVars.Tabela[1] == GlobalVars.Tabela[0] && GlobalVars.Tabela[2] == GlobalVars.Tabela[0])
                        {
                            verificar_vitoria();
                        }
                        if (GlobalVars.Tabela[3] == GlobalVars.Tabela[0] && GlobalVars.Tabela[6] == GlobalVars.Tabela[0])
                        {
                            verificar_vitoria();
                        }
                    }
                    if (GlobalVars.Tabela[4] != "5")
                    {
                        if (GlobalVars.Tabela[0] == GlobalVars.Tabela[4] && GlobalVars.Tabela[8] == GlobalVars.Tabela[4])
                        {
                            verificar_vitoria();
                        }
                        if (GlobalVars.Tabela[1] == GlobalVars.Tabela[4] && GlobalVars.Tabela[7] == GlobalVars.Tabela[4])
                        {
                            verificar_vitoria();
                        }
                        if (GlobalVars.Tabela[3] == GlobalVars.Tabela[4] && GlobalVars.Tabela[5] == GlobalVars.Tabela[4])
                        {
                            verificar_vitoria();
                        }
                        if (GlobalVars.Tabela[2] == GlobalVars.Tabela[4] && GlobalVars.Tabela[6] == GlobalVars.Tabela[4])
                        {
                            verificar_vitoria();
                        }
                    }
                    if (GlobalVars.Tabela[8] != "9")
                    {
                        if (GlobalVars.Tabela[2] == GlobalVars.Tabela[8] && GlobalVars.Tabela[5] == GlobalVars.Tabela[8])
                        {
                            verificar_vitoria();
                        }
                        if (GlobalVars.Tabela[6] == GlobalVars.Tabela[8] && GlobalVars.Tabela[7] == GlobalVars.Tabela[8])
                        {
                            verificar_vitoria();
                        }
                    }

                    if (GlobalVars.invalida == false)
                    {
                        if (GlobalVars.jogador == 1)
                            GlobalVars.jogador = 2;

                        else
                            GlobalVars.jogador = 1;
                    }
                }
                if (GlobalVars.vitoria == false)
                {
                    Console.WriteLine("Os jogadores Empataram!!!");
                    //GlobalVars.sair = true;
                    Console.ReadLine();
                }
            }

        static void Main(string[] args)
        {

            GlobalVars.Tabela[0] = "1";
            GlobalVars.Tabela[1] = "2";
            GlobalVars.Tabela[2] = "3";
            GlobalVars.Tabela[3] = "4";
            GlobalVars.Tabela[4] = "5";
            GlobalVars.Tabela[5] = "6";
            GlobalVars.Tabela[6] = "7";
            GlobalVars.Tabela[7] = "8";
            GlobalVars.Tabela[8] = "9";

            GlobalVars.Simbolo[0] = "O";
            GlobalVars.Simbolo[1] = "X";

            cabecalho();
            Console.WriteLine();
            Console.WriteLine("1-Começar o Jogo");
            Console.WriteLine("2-Sair do Programa");
            Console.WriteLine("Introduza a opção pretendida: ");
            GlobalVars.opcao = Console.ReadLine();
            while (GlobalVars.opcao != "2")
            {
                switch (GlobalVars.opcao)
                {
                    case "1":
                        {
                            jogo_do_galo();
                        }
                        break;

                    default:
                        {
                            Console.Clear();
                            cabecalho();
                            Console.WriteLine();
                            Console.WriteLine("Opção Invalida");
                            Console.WriteLine();
                            Console.WriteLine("1-Começar o Jogo");
                            Console.WriteLine("2-Sair do Programa");
                            Console.WriteLine("Introduza a opção pretendida: ");
                            GlobalVars.opcao = Console.ReadLine();
                            break;
                     
                        }
                }

            }
            
        }
    }
}

Agradeço toda a ajuda porque tenho que entregar até amanha e não consigo falar com o prof.

Cumprimentos, Eirax.

Share this post


Link to post
Share on other sites
M6

Pelo que descreves parece que o jogo deve estar num loop infinito.

Corre em debug e manda parar quando ele ficar preso, vê que rotina está a executar e verifica o porquê de não terminar. Se for um loop, verifica a condição de paragem, é normal que esta falhe e por isso não termina.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Eirax

Eu construi o menu com um while e um switch. Quando eu corro uma versão simples sem menu, ele da o resultado e termina. Mas quando eu ponho dentro do case do switch ele da o 1• resultado mas continua a dar sempre resultados infinitos. Eu não estou a perceber porque e que ele não me termina o case como na versão sem menu. Não era suposto ele terminar e voltar ao loop do menu?

Share this post


Link to post
Share on other sites
daj

GlobalVars.opcao = Console.ReadLine();
while (GlobalVars.opcao != "2")
{
      switch (GlobalVars.opcao)
      {
            case "1":
            {
                  jogo_do_galo();
            }
            break;
...

Se o utilizador escolher 1 e começar um jogo do galo, nunca mais voltas a pedir uma nova opção do utilizador, ficando GlobalVars.opcao sempre a 1.

Share this post


Link to post
Share on other sites
softklin

Na tua função onde verificas a vitória, tens de criar umas rotinas adicionais para te limpar a tabela (GlobalVars.Tabela) e chamar a função jogo_do_galo. Também deves fazer isso para o caso do empate.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
Eirax

Ok, simples como era de esperar...

Já fiz as duas alterações e está 100%.

Obrigado, Eirax.

Share this post


Link to post
Share on other sites
Eirax

Como é que defino o fundo da janela de uma determinada cor? Se usar

Console.BackgroundColor = ConsoleColor.DarkBlue;

só me muda a cor a volta das letras.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.