Jump to content

Erro em Programa


Eirax

Recommended Posts

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.

Link to post
Share on other sites

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."

 

Link to post
Share on other sites

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?

Link to post
Share on other sites

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.

Link to post
Share on other sites

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.

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
×
×
  • 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.