Ejemplo n.º 1
0
        private static void HandleMove(WumpusLogic wumpusLogic)
        {
            IEnumerator enumerator;
            string      input;
            ICollection movementResults;

            input = string.Empty;
            do
            {
                Console.Write("WHERE TO ");
                input = Console.ReadLine().Trim();
                Console.Write("\n");
                if (!wumpusLogic.PlayerNode.IsAdjacentNode(input))
                {
                    Console.Write("NOT POSSIBLE - {0}\n", input);
                    Console.ReadLine();
                    input = string.Empty;
                }
            } while (input == string.Empty);

            movementResults = wumpusLogic.Move(input);
            enumerator      = movementResults.GetEnumerator();

            while (enumerator.MoveNext())
            {
                switch ((WumpusLogic.MovementResult)enumerator.Current)
                {
                case WumpusLogic.MovementResult.BumpedAWumpus:
                    Console.Write("... OOPS! BUMPED A WUMPUS!\n");
                    break;

                case WumpusLogic.MovementResult.FellInAPit:
                    Console.Write("YYYIIIEEEE . . . FELL IN A PIT\n");
                    break;

                case WumpusLogic.MovementResult.GotByWumpus:
                    Console.Write(GOT_BY_WUMPUS_STRING);
                    break;

                case WumpusLogic.MovementResult.SuperBatSnatch:
                    Console.Write(
                        "ZAP--SUPER BAT SNATCH! ELSEWHERESVILLE FOR YOU!\n");
                    break;
                }
            }
        }
Ejemplo n.º 2
0
        private static void PrintHazardWarningsAndLocation(WumpusLogic wumpusLogic)
        {
            IEnumerator enumerator;

            WumpusLogic.SurroundingHazards hazards;
            WumpusLogic.Node node;

            Console.Write("\n");

            hazards = wumpusLogic.GetSurroundingHazards();
            if ((hazards & WumpusLogic.SurroundingHazards.WumpusNearby) != 0)
            {
                Console.Write("I SMELL A WUMPUS!\n");
            }
            if ((hazards & WumpusLogic.SurroundingHazards.PitNearby) != 0)
            {
                Console.Write("I FEEL A DRAFT!\n");
            }
            if ((hazards & WumpusLogic.SurroundingHazards.BatNearby) != 0)
            {
                Console.Write("BATS NEARBY!\n");
            }

            Console.Write("YOU ARE IN ROOM {0}\n", wumpusLogic.PlayerNode.Name);

            Console.Write("TUNNELS LEAD TO");
            enumerator = wumpusLogic.PlayerNode.LinkedNodes.GetEnumerator();
            while (enumerator.MoveNext())
            {
                node = enumerator.Current as WumpusLogic.Node;
                if (node != null)
                {
                    Console.Write(" {0}", node.Name);
                }
            }
            Console.Write("\n\n");
        }
Ejemplo n.º 3
0
        public static int Main(string[] argv)
        {
            string       input;
            bool         playAgain;
            int          result;
            string       setupFileName;
            StreamReader streamReader;
            WumpusLogic  wumpusLogic;

            result = 0;

            Console.Write(
                "*** Wumpus .NET ***\n\nBased on:\n\n\n{0}\n{1}\n{2}\n\n\n\n",
                "WUMPUS 2".PadLeft(33), "CREATIVE COMPUTING".PadLeft(38),
                "MORRISTOWN  NEW JERSEY".PadLeft(40));

            Console.Write("INSTRUCTIONS");
            input = Console.ReadLine().ToUpper();
            if (input.StartsWith("Y"))
            {
                Console.Write(INSTRUCTIONS);
            }

            playAgain   = false;
            wumpusLogic = null;
            do
            {
                if (wumpusLogic == null)
                {
                    setupFileName = string.Empty;
                    do
                    {
                        Console.Write("CAVE #(0-6) ");
                        input = Console.ReadLine();
                        Console.Write("\n");
                        input = input.Trim();
                        if (input == string.Empty)
                        {
                            input = "X";
                        }
                        switch (input[0])
                        {
                        case '0':
                            setupFileName = DODECAHEDRON_FILENAME;
                            break;

                        case '1':
                            setupFileName = MOBIUS_FILENAME;
                            break;

                        case '2':
                            setupFileName = BEADS_FILENAME;
                            break;

                        case '3':
                            setupFileName = TORUS_FILENAME;
                            break;

                        case '4':
                            setupFileName = DENDRITE_FILENAME;
                            break;

                        case '5':
                            setupFileName = LATTICE_FILENAME;
                            break;

                        case '6':
                            Console.Write("Wumpus XML Filename: ");
                            setupFileName = Console.ReadLine().Trim();
                            break;

                        default:
                            Console.Write("ERROR  \n");
                            Console.ReadLine();
                            Console.Write("\n");
                            break;
                        }
                    } while (setupFileName == string.Empty);

                    if (!File.Exists(setupFileName))
                    {
                        setupFileName = Path.Combine(Environment.CurrentDirectory, "..\\..\\" + setupFileName);
                    }

                    streamReader = null;
                    try
                    {
                        streamReader = File.OpenText(setupFileName);
                        wumpusLogic  = new WumpusLogic(streamReader);
                    }
                    catch
                    {
                        Console.Write(
                            "{0}:\nError: Unable to read Wumpus XML file, {1}.\n",
                            APP_NAME, setupFileName);
                        result = INPUT_FILE_ERROR;
                    }
                    finally
                    {
                        if (streamReader != null)
                        {
                            streamReader.Close();
                        }
                    }
                }

                if ((result == 0) && (wumpusLogic != null))
                {
                    Console.Write("HUNT THE WUMPUS\n");
                    try
                    {
                        while (wumpusLogic.Status ==
                               WumpusLogic.GameStatus.InPlay)
                        {
                            PrintHazardWarningsAndLocation(wumpusLogic);
                            Console.Write("SHOOT OR MOVE ");
                            input = Console.ReadLine().TrimStart().ToUpper();
                            if (input.StartsWith("M"))
                            {
                                HandleMove(wumpusLogic);
                            }
                            else if (input.StartsWith("S"))
                            {
                                HandleShoot(wumpusLogic);
                            }
                            else
                            {
                                Console.Write("ERROR   ");
                                Console.ReadLine();
                            }
                        }
                        if (wumpusLogic.Status ==
                            WumpusLogic.GameStatus.Lost)
                        {
                            Console.Write(
                                "HA HA HA - YOU LOOSE!\n");
                        }
                        else
                        {
                            Console.Write(
                                "HEE HEE HEE - THE WUMPUS'LL GET YOU NEXT TIME!!\n");
                        }
                        Console.Write("PLAY AGAIN");
                        input     = Console.ReadLine().TrimStart().ToUpper();
                        playAgain = input.StartsWith("Y");
                        Console.Write("\n\n");
                        if (playAgain)
                        {
                            Console.Write("SAME SET-UP ");
                            input = Console.ReadLine().TrimStart().ToUpper();
                            if (input.StartsWith("Y"))
                            {
                                wumpusLogic.RestartGame();
                            }
                            else
                            {
                                wumpusLogic = null;
                            }
                        }
                    }
                    catch
                    {
                        Console.Write(
                            "{0}:\nError: Game error.\n");
                        result = GAME_ERROR;
                    }
                }
            } while (playAgain && (result == 0));

            return(result);
        }
Ejemplo n.º 4
0
        public static void HandleShoot(WumpusLogic wumpusLogic)
        {
            string input;

            WumpusLogic.Node node;
            int   numShots;
            Queue shots;

            numShots = -1;
            do
            {
                Console.Write("NO. OF ROOMS ");
                input = Console.ReadLine().Trim();
                try
                {
                    numShots = Convert.ToInt32(input);
                }
                catch
                {
                    numShots = -1;
                }

                if ((numShots < 1) ||
                    (numShots > WumpusLogic.MaxShots))
                {
                    numShots = -1;
                    Console.Write("ERROR   ");
                    Console.ReadLine();
                }
            } while (numShots < 1);

            shots = new Queue();
            while (numShots > 0)
            {
                Console.Write("ROOM #");
                input = Console.ReadLine().Trim();
                Console.Write("\n");
                node = wumpusLogic.GetNodeByName(input);

                if (node == null)
                {
                    Console.Write("ERROR   ");
                    Console.ReadLine();
                }
                else
                {
                    shots.Enqueue(node);
                    numShots--;
                }
            }

            switch (wumpusLogic.Shoot(shots))
            {
            case WumpusLogic.ShotResult.GotByWumpus:
                Console.Write(GOT_BY_WUMPUS_STRING);
                break;

            case WumpusLogic.ShotResult.Missed:
                Console.Write("MISSED\n");
                break;

            case WumpusLogic.ShotResult.NoMoreArrows:
                Console.Write("YOU HAVE USED ALL YOUR ARROWS.\n");
                break;

            case WumpusLogic.ShotResult.ShotSelf:
                Console.Write("OUCH! ARROW GOT YOU!\n");
                break;

            case WumpusLogic.ShotResult.ShotWumpus:
                Console.Write(
                    "AHA! YOU GOT THE WUMPUS! HE WAS IN ROOM {0}\n",
                    wumpusLogic.WumpusNode.Name);
                break;
            }
        }