Esempio n. 1
0
        private static void gameLoop(Player player)
        {
            // Asetetaan console-ikkunan koko, luodaan olio consoleWindow
            int           windowWidth = 100, windowHeight = 30, messageBufferSize = 5;
            ConsoleWindow consoleWindow = new ConsoleWindow(windowWidth, windowHeight, messageBufferSize);

            // Kehykset
            consoleWindow.DrawBorders();

            // Alustetaan ja piirretään kartta
            // Kehitysidea: Käyttäjä voi ladata haluamanssa karttatiedoston
            //consoleWindow.InitMap();
            consoleWindow.InitMapFromFile("map_default_98x23.txt");
            consoleWindow.DrawMap();
            consoleWindow.AddMessage("Welcome! Press H for help.");

            // Luodaan viholliset ja lisätään viholliset-listaan
            List <Character> enemies = CreateEnemiesFromFile();

            // Pelisilmukka
            while (true)
            {
                // Otetaan tileBelow talteen pelialueelta (kartalta)
                player.TileBelow = consoleWindow.GetMapTile(player.X, player.Y);

                // Piirretään pelaaja-olio
                consoleWindow.DrawTile(player.X, player.Y, player);

                // Otetaan tileBelow talteen kaikkien vihollisten osalta (kartalta)
                foreach (Character enemy in enemies)
                {
                    enemy.TileBelow = consoleWindow.GetMapTile(enemy.X, enemy.Y);
                }

                // Piirretään viholliset
                foreach (Character enemy in enemies)
                {
                    consoleWindow.DrawTile(enemy.X, enemy.Y, enemy);
                }

                // Viestien kirjoitus alalaiden viestialueelle
                consoleWindow.WriteMessages();

                // Pelaajan statuksen kirjoitus alalaiden status-alueelle
                consoleWindow.WritePlayerStatus(player);

                // Odotetaan käyttäjän inputtia:
                // Nuolinäppäimet liikuttaa hahmoa.
                // ESC sulkee sovelluksen.
                // O avaa oven halutusta suunnasta (Open).
                var key = Console.ReadKey(true).Key;

                switch (key)
                {
                case ConsoleKey.UpArrow:
                    if (player.Move(0, -1, consoleWindow, enemies))
                    {
                        consoleWindow.AddMessage(player.Name + " moves north.");
                    }
                    break;

                case ConsoleKey.DownArrow:
                    if (player.Move(0, 1, consoleWindow, enemies))
                    {
                        consoleWindow.AddMessage(player.Name + " moves south.");
                    }
                    break;

                case ConsoleKey.LeftArrow:
                    if (player.Move(-1, 0, consoleWindow, enemies))
                    {
                        consoleWindow.AddMessage(player.Name + " moves west.");
                    }
                    break;

                case ConsoleKey.RightArrow:
                    if (player.Move(1, 0, consoleWindow, enemies))
                    {
                        consoleWindow.AddMessage(player.Name + " moves east.");
                    }
                    break;

                case ConsoleKey.O:
                    player.Open(consoleWindow);
                    break;

                case ConsoleKey.H:
                    consoleWindow.AddMessage("Use arrow keys to move.");
                    consoleWindow.AddMessage("Press O to open doors.");
                    consoleWindow.AddMessage("Walk towards enemies to attack them.");
                    break;

                case ConsoleKey.Escape:
                    // Pelin lopettaminen, tallennetaan pelaaja-olion tilanne
                    player.SerializePlayer();
                    // Rajapinnan toteuttamista harjoituksen vuoksi, tuhotaan characterit ja player
                    player.Destroy();
                    foreach (Character enemy in enemies)
                    {
                        enemy.Destroy();
                    }
                    return;

                default:
                    break;
                }

                // Liikutellaan vihollisia
                Random random = new Random();
                foreach (Character enemy in enemies)
                {
                    int seed = random.Next(1000);
                    enemy.Move(consoleWindow, seed);
                }
            }
        }