Exemplo n.º 1
0
        public void Start()
        {
            isRunning = true;
            while (isRunning)
            {
                // Check for scene change
                if (sceneChanged)
                {
                    CurrentScene = newScene;
                    newScene     = null;
                    sceneChanged = false;
                }

                // Check if the game is still running.
                if (TCODConsole.isWindowClosed() || CurrentScene == null)
                {
                    Stop();
                    break;
                }

                // Update
                CurrentScene.Update(TCODSystem.getLastFrameLength());

                // Render
                TCODConsole.root.clear();
                CurrentScene.Render(TCODSystem.getLastFrameLength());
                TCODConsole.flush();

                // Handle user input
                CheckForKeyboardEvents();
                CheckForMouseEvents();
            }
            CleanUp();
        }
Exemplo n.º 2
0
        public void render(bool flush)
        {
            TCODConsole.root.clear();
            if (gameStatus == GameStatus.LOADING)
            {
                loadingGui.render();
            }
            else if (gameStatus == GameStatus.DEFEAT)
            {
                defeatGui.render();
            }
            else
            {
                currentLevel.render();
                if (player != null)
                {
                    player.render();
                }
                if (player != null)
                {
                    TCODConsole.root.print(1, screenHeight - 2, string.Format("HP : {0}/{1}",
                                                                              (int)player.getDestructible().hp, (int)player.getDestructible().maxHp));
                }
                gui.render();
                messageGui.render();
                currentLevel.renderGui();

                menuGui.render();
            }

            TCODConsole.flush();
        }
Exemplo n.º 3
0
        public bool Show()
        {
            var x      = (TCODConsole.root.getWidth() / 2) - (Message.Length / 2 + 2);
            var width  = Math.Max(13, Message.Length + 4);            // Two for padding and two for the border
            var y      = (TCODConsole.root.getHeight() / 2) - 3;
            var height = 6;

            TCODConsole.root.setForegroundColor(Foreground);
            TCODConsole.root.setBackgroundColor(Background);
            TCODConsole.root.printFrame(x, y, width, height, true, TCODBackgroundFlag.Set);
            TCODConsole.root.print(x + 2, y + 2, Message);
            TCODConsole.root.print(x + (width / 2) - 4, y + 3, "[Y] / [N]");
            TCODConsole.flush();

            TCODKey key       = null;
            var     character = 'N';

            do
            {
                key       = TCODConsole.waitForKeypress(true);
                character = char.ToUpper(key.Character);
            } while(character != 'Y' && character != 'N');

            return(character == 'Y');
        }
Exemplo n.º 4
0
 private void end()
 {
     TCODConsole.root.clear();
     TCODConsole.root.setForegroundColor(TCODColor.red);
     TCODConsole.root.print(35, 25, "You died");
     TCODConsole.flush();
     TCODConsole.waitForKeypress(true);
 }
Exemplo n.º 5
0
 private void Draw(uint elapsedTime)
 {
     TCODConsole.root.clear();
     foreach (var window in _windowsStack)
     {
         window.OnDraw();
     }
     TCODConsole.flush();
 }
Exemplo n.º 6
0
 public void debugRender(int iterations)
 {
     for (int i = 0; i < iterations; i++)
     {
         TCODConsole.flush();
     }
     level.render();
     level.update();
 }
Exemplo n.º 7
0
        public DungeonGenerator(Level level)
            : base(level)
        {
            TCODRandom rng = TCODRandom.getInstance();

            roomTries            = rng.getInt(minRoomTries, maxRoomTries);
            windingPercent       = rng.getInt(5, 100);
            roomExtraSize        = rng.getInt(0, 5);
            extraConnectorChance = rng.getInt(10, 100);
            regions = new int[map.width, map.height];

            if (debugDraw)
            {
                map.showAllTiles = true;

                Program.engine.update();
                TCODConsole.root.clear();
                TCODConsole.flush();
            }


            addRooms();
            Program.engine.loadingGui.loading++;
            Program.engine.render();
            roomNumber = currentRegion + 1;
            startRegion();

            for (var y = 1; y < map.height; y += 2)
            {
                for (var x = 1; x < map.width; x += 2)
                {
                    if (map.isWall(x, y))
                    {
                        continue;
                    }

                    growMaze(x, y);
                }
            }
            connectRegions();
            addRandomJuctions();
            Program.engine.loadingGui.loading++;
            Program.engine.render();
            removeDeadEnds();
            Program.engine.loadingGui.loading++;
            Program.engine.render();
            smooth();
            Program.engine.loadingGui.loading = 10;
            Program.engine.render();

            if (debugDraw)
            {
                map.showAllTiles = false;
                Program.engine.update();
            }
        }
Exemplo n.º 8
0
 private void draw()
 {
     TCODConsole.root.clear();
     currentMap.generateFOV(player.getPlayerX(), player.getPlayerY());
     drawMap();
     drawItems();
     drawActors();
     drawText();
     drawTextBox();
     TCODConsole.flush();
 }
Exemplo n.º 9
0
        // Handle the main menu keypresses
        public char HandleMainMenu()
        {
            // Wait for a keypress
            TCODKey key = new TCODKey();

            do
            {
                // Get the keypress
                TCODConsole.flush();
                key = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed);

                if (key.Character == 'S' || key.Character == 's' ||
                    key.Character == 'C' || key.Character == 'c' ||
                    key.Character == 'Q' || key.Character == 'q')
                {
                    string characterPressed = key.Character.ToString().ToUpper();
                    return(characterPressed[0]);
                }
                else if (key.KeyCode == TCODKeyCode.Up || key.KeyCode == TCODKeyCode.KeypadEight)
                {
                    if (currentMenuOption != MenuOption.Start)
                    {
                        currentMenuOption--;
                        return(' ');
                    }
                    else
                    {
                        currentMenuOption = MenuOption.Quit;
                        return(' ');
                    }
                }
                else if (key.KeyCode == TCODKeyCode.Down || key.KeyCode == TCODKeyCode.KeypadTwo)
                {
                    if (currentMenuOption != MenuOption.Quit)
                    {
                        currentMenuOption++;
                        return(' ');
                    }
                    else
                    {
                        currentMenuOption = MenuOption.Start;
                        return(' ');
                    }
                }
                else if (key.KeyCode == TCODKeyCode.KeypadEnter || key.KeyCode == TCODKeyCode.Enter)
                {
                    string KeyCodes = "SCQ";
                    return(KeyCodes[(int)currentMenuOption]);
                }

                PrintMainMenu();
            }while (!TCODConsole.isWindowClosed());
            return(' ');
        }
Exemplo n.º 10
0
        private string getInput(string initial)
        {
            string s = initial;

            Message.Write(s);
            while (true && !TCODConsole.isWindowClosed())
            {
                engine.key = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed);
                engine.render();
                TCODConsole.flush();

                if (engine.key.KeyCode == TCODKeyCode.Enter)
                {
                    break;
                }
                if (engine.key.KeyCode == TCODKeyCode.Backspace)
                {
                    if (s.Length > 0)
                    {
                        s = s.Remove(s.Length - 1);
                        Message.unwriteLastChar();
                    }
                }
                if (engine.key.KeyCode == TCODKeyCode.Up)
                {
                    if (s != "")
                    {
                        record[index] = s;
                    }
                    s = "up";
                    break;
                }
                if (engine.key.KeyCode == TCODKeyCode.Down)
                {
                    if (s != "")
                    {
                        record[index] = s;
                    }
                    s = "down";
                    break;
                }
                if (!char.IsControl(engine.key.Character))
                {
                    Message.Write(engine.key.Character.ToString());
                    s += engine.key.Character;
                    if (engine.key.Character == '|')
                    {
                        break;
                    }
                }
            }
            return(s);
        }
Exemplo n.º 11
0
 public void Update()
 {
     do
     {
         TCODConsole.flush();
         _currentInput = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed);
         if (TCODConsole.isWindowClosed())
         {
             Environment.Exit(0);
         }
     } while (_currentInput.KeyCode == TCODKeyCode.NoKey);
 }
Exemplo n.º 12
0
        static void Main(string[] args)
        {
            const int ScreenHeight = 35;
            const int ScreenWidth  = 80;

            // Set up the main window
            //Window rootWindow = new Window("Md_curses_16x16.png", ScreenWidth, ScreenHeight, "Stygia: The Hidden Depths");
            Window rootWindow = new Window("font_16x16.png", ScreenWidth, ScreenHeight, "Stygia: The Hidden Depths");

            // Display the title screen and wait for a keypress
            rootWindow.ClearScreen();
            rootWindow.DisplayTitleScreen();
            rootWindow.WaitForAnyKeyPress();

            // Then display the main menu
            rootWindow.ClearScreen();
            rootWindow.DisplayMainMenu();

            // Handle main menu keypresses
            bool canQuit = false;

            do
            {
                TCODConsole.flush();
                char keypress = rootWindow.HandleMainMenu();

                switch (keypress)
                {
                case 'S':
                    rootWindow.ClearScreen();
                    rootWindow.DisplayIntro();
                    rootWindow.WaitForAnyKeyPress();
                    rootWindow.ClearScreen();
                    Game newgame = new Game(rootWindow, true);
                    newgame.Start(rootWindow);
                    rootWindow.DisplayMainMenu();
                    break;

                case 'C':
                    rootWindow.ClearScreen();
                    Game oldgame = new Game(rootWindow, false);
                    oldgame.Start(rootWindow);
                    rootWindow.DisplayMainMenu();
                    break;

                case 'Q':
                    rootWindow.ClearScreen();
                    canQuit = true;
                    break;
                }
            }while (!TCODConsole.isWindowClosed() && !canQuit);
        }
Exemplo n.º 13
0
        /// <summary>
        /// Starts the game simulation and set off the normal update life cycle
        /// </summary>
        /// <returns> A code corresponding to how the game exited: 0 = normal quit </returns>
        public int Run()
        {
            if (mainConsole == null || isRunning)
            {
                return(APPLICATION_EXIT_ERROR);
            }

            isRunning = true;
            internalTimer.Start();

            // Main update loop
            while (!TCODConsole.isWindowClosed() && isRunning)
            {
                long current   = internalTimer.ElapsedMilliseconds;
                long frameTime = current - previousUpdateTime;
                previousUpdateTime = current;

                frameLag += frameTime;

                // Actual update / console drawing runs on an inner catchup loop that is also interuptable
                // will run catchup frames or delay so that it closely matches desired FRAME_RATE, that
                // is also synced with the TCODConsoles own render frame rate
                while (frameLag >= MS_PER_UPDATE &&
                       !TCODConsole.isWindowClosed() && isRunning)
                {
                    // TCOD must be flushed immedietly before polling the input channels
                    TCODConsole.flush();
                    lastKey   = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed);
                    mouseData = TCODMouse.getStatus();

                    // Handle transitions between states
                    if (gotoNewState)
                    {
                        EnteredNewState(nextState);
                        gotoNewState = false;
                    }

                    Update();
                    Render();

                    // always allow for core update interrupt
                    if (lastKey.KeyCode == TCODKeyCode.F4)
                    {
                        isRunning = false;
                    }
                }
            }

            internalTimer.Stop();
            return(APPLICATION_EXIT_NORMAL);
        }
Exemplo n.º 14
0
        public void Draw()
        {
            int lightLenght = (int)((1 - _player.Light.Used) * 80);

            _root.setBackgroundColor(TCODColor.black);
            _root.setForegroundColor(TCODColor.white);
            Map.Draw(_mapConsole);
            _messages.Draw();
            TCODConsole.blit(_mapConsole, 0, 0, 80, 50, _root, 0, 1);
            TCODConsole.blit(_messages.Console, 0, 0, 80, 10, _root, 0, 51);
            _root.hline(0, 0, 80, TCODBackgroundFlag.Set);
            _root.setBackgroundColor(TCODColor.amber);
            _root.setForegroundColor(TCODColor.amber);
            _root.hline(0, 0, lightLenght, TCODBackgroundFlag.Set);
            TCODConsole.flush();
        }
Exemplo n.º 15
0
 private void Render()
 {
     TCODConsole.root.setForegroundColor(Foreground);
     TCODConsole.root.setBackgroundColor(Background);
     TCODConsole.root.printFrame(X, Y, Width, Height, true, TCODBackgroundFlag.Set);
     TCODConsole.root.print(X + 2, Y + 2, Message);
     for (int i = 0; i < Options.Length; ++i)
     {
         TCODConsole.root.print(X + 2, Y + 4 + i, Options[i]);
         if (i == SelectedIndex)
         {
             TCODConsole.root.putChar(X + 1, Y + 4 + i, (char)TCODSpecialCharacter.ArrowEast);
             TCODConsole.root.putChar(X + Width - 2, Y + 4 + i, (char)TCODSpecialCharacter.ArrowWest);
         }
     }
     TCODConsole.flush();
 }
Exemplo n.º 16
0
        public void Show()
        {
            var longestLine = MessageLines.Max(line => line.Length);
            var x           = (TCODConsole.root.getWidth() / 2) - (longestLine / 2 + 2);
            var width       = Math.Max(13, longestLine + 4);  // Two for padding and two for the border
            var y           = (TCODConsole.root.getHeight() / 2) - (MessageLines.Length / 2 + 2);
            var height      = MessageLines.Length + 4;        // Two for padding and two for the border

            TCODConsole.root.setForegroundColor(Foreground);
            TCODConsole.root.setBackgroundColor(Background);
            TCODConsole.root.printFrame(x, y, width, height, true, TCODBackgroundFlag.Set);
            for (int i = 0; i < MessageLines.Length; ++i)
            {
                TCODConsole.root.print(x + 2, y + 2 + i, MessageLines[i]);
            }
            TCODConsole.flush();
            TCODConsole.waitForKeypress(true);
        }
Exemplo n.º 17
0
        static void Main()
        {
            TCODConsole.initRoot(80, 50, "my game", false);
            TCODSystem.setFps(25);
            bool endGame = false;

            while (!endGame && !TCODConsole.isWindowClosed())
            {
                TCODConsole.root.print(0, 0, "Hello, world");
                TCODConsole.flush();
                var key = TCODConsole.checkForKeypress();

                if (key.KeyCode == TCODKeyCode.Escape)
                {
                    endGame = true;
                }
            }
        }
Exemplo n.º 18
0
Arquivo: Game.cs Projeto: rezich/zday
        public void Draw()
        {
            TCODConsole r = TCODConsole.root;

            r.clear();

            // world box
            r.printFrame(0, 0, 47, 47);
            r.print(2, 0, "Z-DAY v0.01");
            Point offset = new Point(Player.Position.X - 23, Player.Position.Y - 23);

            Area.Current.Map.computeFov(Player.Position.X, Player.Position.Y, Player.ViewRadius, true, TCODFOVTypes.BasicFov);
            foreach (Terrain t in Area.Current.Terrain)
            {
                if (Area.Current.Map.isInFov(t.Position.X, t.Position.Y))
                {
                    t.Draw(TCODConsole.root, offset);
                }
            }
            foreach (Decal d in Area.Current.Decals)
            {
                if (Area.Current.Map.isInFov(d.Position.X, d.Position.Y))
                {
                    d.Draw(TCODConsole.root, offset);
                }
            }
            foreach (Item i in Area.Current.Items)
            {
                if (Area.Current.Map.isInFov(i.Position.X, i.Position.Y))
                {
                    i.Draw(TCODConsole.root, offset);
                }
            }
            foreach (Character c in Area.Current.Characters)
            {
                if (Area.Current.Map.isInFov(c.Position.X, c.Position.Y))
                {
                    c.Draw(TCODConsole.root, offset);
                }
            }

            DrawHUD();
            TCODConsole.flush();
        }
Exemplo n.º 19
0
        public void run(Screen tempscreen)
        {
            screen    = tempscreen;
            kbHistory = new List <KeyHistory>();

            TimeSpan startTime = DateTime.Now.TimeOfDay;
            double   timectrl  = startTime.TotalMilliseconds;
            double   timespent = 0;

            while (running && !TCODConsole.isWindowClosed())
            {
                screen.update();
                screen.printDebug();
                terminalManager.drawTerminals(debug);

                TCODConsole.flush();

                KeyHistory temp = new KeyHistory(DateTime.Now.TimeOfDay - startTime);

                TCODKey key = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed);

                temp.RegisterKeyStatus(key, TCODKeyStatus.KeyPressed);

                kbHistory.Add(temp);
                screen = screen.respondToUserInput(kbHistory);

                timespent = DateTime.Now.TimeOfDay.TotalMilliseconds - timectrl;


                if (timespent > 250)
                {
                    adjustFPS();
                    timectrl = DateTime.Now.TimeOfDay.TotalMilliseconds;
                }
            }
        }
Exemplo n.º 20
0
        public bool HandleKeyPress(TCODKey key)
        {
            bool endTurn = false;

            #region switch (key.KeyCode)
            switch (key.KeyCode)
            {
            case TCODKeyCode.KeypadZero:
                break;

            case TCODKeyCode.KeypadOne:
                _player.Move(-1, 1);
                endTurn = true;
                break;

            case TCODKeyCode.KeypadTwo:
                _player.Move(0, 1);
                endTurn = true;
                break;

            case TCODKeyCode.KeypadThree:
                _player.Move(1, 1);
                endTurn = true;
                break;

            case TCODKeyCode.KeypadFour:
                _player.Move(-1, 0);
                endTurn = true;
                break;

            case TCODKeyCode.KeypadFive:
                endTurn = true;
                break;

            case TCODKeyCode.KeypadSix:
                _player.Move(1, 0);
                endTurn = true;
                break;

            case TCODKeyCode.KeypadSeven:
                _player.Move(-1, -1);
                endTurn = true;
                break;

            case TCODKeyCode.KeypadEight:
                _player.Move(0, -1);
                endTurn = true;
                break;

            case TCODKeyCode.KeypadNine:
                _player.Move(1, -1);
                endTurn = true;
                break;

            case TCODKeyCode.KeypadAdd:
                break;

            case TCODKeyCode.KeypadSubtract:
                break;

            case TCODKeyCode.KeypadMultiply:
                break;

            case TCODKeyCode.KeypadDivide:
                break;

            case TCODKeyCode.KeypadEnter:
                break;

            case TCODKeyCode.KeypadDecimal:
                endTurn = true;
                break;

            case TCODKeyCode.Left:
                _player.Move(-1, 0);
                endTurn = true;
                break;

            case TCODKeyCode.Right:
                _player.Move(1, 0);
                endTurn = true;
                break;

            case TCODKeyCode.Up:
                _player.Move(0, -1);
                endTurn = true;
                break;

            case TCODKeyCode.Down:
                _player.Move(0, 1);
                endTurn = true;
                break;

            case TCODKeyCode.Alt:
                break;

            case TCODKeyCode.Apps:
                break;

            case TCODKeyCode.Backspace:
                break;

            case TCODKeyCode.Capslock:
                break;

            case TCODKeyCode.Char:
                break;

            case TCODKeyCode.Control:
                break;

            case TCODKeyCode.Delete:
                break;

            case TCODKeyCode.Eight:
                break;

            case TCODKeyCode.End:
                break;

            case TCODKeyCode.Enter:
                break;

            case TCODKeyCode.Escape:
                Exit = true;
                break;

            case TCODKeyCode.F1:
                break;

            case TCODKeyCode.F2:
                break;

            case TCODKeyCode.F3:
                break;

            case TCODKeyCode.F4:
                break;

            case TCODKeyCode.F5:
                break;

            case TCODKeyCode.F6:
                break;

            case TCODKeyCode.F7:
                break;

            case TCODKeyCode.F8:
                break;

            case TCODKeyCode.F9:
                break;

            case TCODKeyCode.F10:
                break;

            case TCODKeyCode.F11:
                break;

            case TCODKeyCode.F12:
                break;

            case TCODKeyCode.Five:
                break;

            case TCODKeyCode.Four:
                break;

            case TCODKeyCode.Home:
                break;

            case TCODKeyCode.Insert:
                break;

            case TCODKeyCode.Lwin:
                break;

            case TCODKeyCode.Nine:
                break;

            case TCODKeyCode.NoKey:
                break;

            case TCODKeyCode.Numlock:
                break;

            case TCODKeyCode.One:
                break;

            case TCODKeyCode.Pagedown:
                break;

            case TCODKeyCode.Pageup:
                break;

            case TCODKeyCode.Pause:
                break;

            case TCODKeyCode.Printscreen:
                break;

            case TCODKeyCode.Rwin:
                break;

            case TCODKeyCode.Scrolllock:
                break;

            case TCODKeyCode.Seven:
                break;

            case TCODKeyCode.Shift:
                break;

            case TCODKeyCode.Six:
                break;

            case TCODKeyCode.Space:
                break;

            case TCODKeyCode.Tab:
                break;

            case TCODKeyCode.Three:
                break;

            case TCODKeyCode.Two:
                break;

            case TCODKeyCode.Zero:
                break;
            }
            #endregion

            #region switch (key.Character)
            switch (key.Character)
            {
                #region Movement
            case 'h':
                _player.Move(-1, 0);
                endTurn = true;
                break;

            case 'j':
                _player.Move(0, 1);
                endTurn = true;
                break;

            case 'k':
                _player.Move(0, -1);
                endTurn = true;
                break;

            case 'l':
                _player.Move(1, 0);
                endTurn = true;
                break;

            case 'y':
                _player.Move(-1, -1);
                endTurn = true;
                break;

            case 'u':
                _player.Move(1, -1);
                endTurn = true;
                break;

            case 'b':
                _player.Move(-1, 1);
                endTurn = true;
                break;

            case 'n':
                _player.Move(1, 1);
                endTurn = true;
                break;

            case '.':
                endTurn = true;
                break;

                #endregion
            case 'd':
                _player.Inventory.Draw(_root);
                TCODConsole.flush();
                key = TCODConsole.waitForKeypress(true);
                Item i = _player.Inventory.GetAtLetter(key.Character);
                _player.Inventory.RemoveAtLetter(key.Character, 1);
                if (i != null)
                {
                    i.Drop(_player.PosX, _player.PosY, Map);
                }
                break;

            case 'g':
                foreach (Item item in Map.GetItemsAt(_player.PosX, _player.PosY))
                {
                    item.Get();
                    _player.Inventory.Add(item);
                }
                endTurn = true;
                break;

            case 'i':
                _player.Inventory.Draw(_root);
                TCODConsole.flush();
                TCODConsole.waitForKeypress(true);
                break;

            case 'e':
                _player.Inventory.Draw(_root);
                TCODConsole.flush();
                key = TCODConsole.waitForKeypress(true);
                i   = _player.Inventory.GetAtLetter(key.Character);
                if (i != null)
                {
                    _player.Equip(i);
                }
                endTurn = true;
                break;

            case 'r':
                _player.Inventory.Draw(_root);
                TCODConsole.flush();
                key = TCODConsole.waitForKeypress(true);
                i   = _player.Inventory.GetAtLetter(key.Character);
                if (i != null)
                {
                    i.Use();
                    _player.Inventory.RemoveAllAtLetter(key.Character);
                    endTurn = true;
                }
                break;

            case '>':
                if (_player.PosX == Map.Stair.PosX && _player.PosY == Map.Stair.PosY)
                {
                    _dungeon.GoToMap(_dungeon.CurrentDepth + 1, _player);
                    for (int n = Map.CurrentMonsterNum; n < Map.MaxMonster; n++)
                    {
                        AddMonster(Map);
                    }
                }
                break;

            case '<':
                if (_player.PosX == Map.StartPosX && _player.PosY == Map.StartPosY)
                {
                    if (_dungeon.CurrentDepth != 1)
                    {
                        _dungeon.GoToMap(_dungeon.CurrentDepth - 1, _player);
                    }
                    else
                    {
                        Messages.AddMessage("If you go up, you'll exit the Dungeon. Are you sure?");
                        key = TCODConsole.waitForKeypress(true);
                        if (key.Character == 'Y')
                        {
                            Exit = true;
                        }
                        else if (key.Character != 'N')
                        {
                            Messages.AddMessage("Y or N only");
                        }
                    }
                }
                break;

                #region Debug
            case 'w':
                ShowWall = !ShowWall;
                break;

            case 'a':
                MonsterAI = !MonsterAI;
                break;

            case 'z':
                MonsterDamage = !MonsterDamage;
                break;

            case 'q':
                InfiniteTorch = !InfiniteTorch;
                break;

                #endregion
            }
            #endregion
            return(endTurn);
        }
Exemplo n.º 21
0
        public bool pickATile(out int x, out int y, float maxRange)
        {
            int pickX = Program.engine.player.x - map.offsetX, pickY = Program.engine.player.y - map.offsetY;

            for (int cx = map.renderX; cx < map.renderWidth; cx++)
            {
                for (int cy = map.renderY; cy < map.renderHeight; cy++)
                {
                    if (Program.engine.player.fov.isInFov(cx + map.offsetX, cy + map.offsetY) &&
                        (maxRange == 0 || Program.engine.player.getDistance(cx + map.offsetX, cy + map.offsetY) <= maxRange))
                    {
                        TCODColor col = TCODConsole.root.getCharBackground(cx, cy);
                        col = col.Multiply(1.2f);
                        TCODConsole.root.setCharBackground(cx, cy, col);
                    }
                }
            }
            int       oldX = pickX, oldY = pickY;
            TCODColor oldC = TCODConsole.root.getCharBackground(pickX, pickY);

            while (!TCODConsole.isWindowClosed())
            {
                render();


                mousedata          = TCODMouse.getStatus();
                Program.engine.key = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed);
                if (Engine.useMouse)
                {
                    if (Program.engine.player.fov.isInFov(mousedata.CellX + map.offsetX, mousedata.CellY + map.offsetY))
                    {
                        if ((maxRange == 0 || Program.engine.player.getDistance(mousedata.CellX + map.offsetX, mousedata.CellY + map.offsetY) <= maxRange))
                        {
                            pickX = mousedata.CellX;
                            pickY = mousedata.CellY;
                            if (mousedata.LeftButtonPressed)
                            {
                                x = mousedata.CellX + map.offsetX;
                                y = mousedata.CellY + map.offsetY;
                                return(true);
                            }
                        }
                    }
                    if (mousedata.RightButtonPressed)
                    {
                        x = 0;
                        y = 0;
                        return(false);
                    }
                }
                if (pickX != oldX || pickY != oldY)
                {
                    TCODConsole.root.setCharBackground(oldX, oldY, oldC);
                    oldC = TCODConsole.root.getCharBackground(pickX, pickY);
                    TCODConsole.root.setCharBackground(pickX, pickY, TCODColor.white);
                    oldX = pickX;
                    oldY = pickY;
                }
                if (Program.engine.player.fov.isInFov(pickX + map.offsetX, pickY + map.offsetY))
                {
                    if ((maxRange == 0 || Program.engine.player.getDistance(pickX + map.offsetX, pickY + map.offsetY) <= maxRange))
                    {
                        switch (Program.engine.key.KeyCode)
                        {
                        case TCODKeyCode.Enter:
                        {
                            x = pickX + map.offsetX;
                            y = pickY + map.offsetY;

                            return(true);
                        }

                        case TCODKeyCode.Up:
                        {
                            if (Program.engine.player.fov.isInFov(pickX + map.offsetX, pickY - 1 + map.offsetY))
                            {
                                if (Program.engine.player.getDistance(pickX + map.offsetX, pickY - 1 + map.offsetY) <= maxRange)
                                {
                                    pickY--;
                                }
                            }
                            break;
                        }

                        case TCODKeyCode.Down:
                            if (Program.engine.player.fov.isInFov(pickX + map.offsetX, pickY + 1 + map.offsetY))
                            {
                                if (Program.engine.player.getDistance(pickX + map.offsetX, pickY + 1 + map.offsetY) <= maxRange)
                                {
                                    pickY++;
                                }
                            }
                            break;

                        case TCODKeyCode.Left:
                            if (Program.engine.player.fov.isInFov(pickX - 1 + map.offsetX, pickY + map.offsetY))
                            {
                                if (Program.engine.player.getDistance(pickX - 1 + map.offsetX, pickY + map.offsetY) <= maxRange)
                                {
                                    pickX--;
                                }
                            }
                            break;

                        case TCODKeyCode.Right:
                            if (Program.engine.player.fov.isInFov(pickX + 1 + map.offsetX, pickY + map.offsetY))
                            {
                                if (Program.engine.player.getDistance(pickX + 1 + map.offsetX, pickY + map.offsetY) <= maxRange)
                                {
                                    pickX++;
                                }
                            }
                            break;
                        }
                    }
                }

                TCODConsole.flush();
                Program.engine.lastKey = Program.engine.key;
            }
            x = 0;
            y = 0;
            return(false);
        }
Exemplo n.º 22
0
 public static void FlushScreen()
 {
     TCODConsole.flush();
 }
Exemplo n.º 23
0
        // Handle standard keypresses
        public char WaitForKeyPress(KeyMode keymode)
        {
            // Wait for a keypress
            TCODKey key = new TCODKey();

            // This needs to be rewritten!
            if (keymode == KeyMode.Exploration)
            {
                do
                {
                    // Get the keypress
                    TCODConsole.flush();
                    key = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed);

                    if (key.Character == 'H' || key.Character == 'h' ||
                        key.Character == 'J' || key.Character == 'j' ||
                        key.Character == 'K' || key.Character == 'k' ||
                        key.Character == 'L' || key.Character == 'l' ||
                        key.Character == 'Y' || key.Character == 'y' ||
                        key.Character == 'U' || key.Character == 'u' ||
                        key.Character == 'B' || key.Character == 'b' ||
                        key.Character == 'N' || key.Character == 'n' ||
                        key.Character == 'S' || key.Character == 's' ||
                        key.Character == 'G' || key.Character == 'g' ||
                        key.Character == 'I' || key.Character == 'i' ||
                        key.Character == 'D' || key.Character == 'd' ||
                        key.Character == 'W' || key.Character == 'w' ||
                        key.Character == 'T' || key.Character == 't' ||
                        key.Character == 'X' || key.Character == 'x' ||
                        key.Character == 'V' || key.Character == 'v' ||
                        key.Character == 'Q' || key.Character == 'q' ||
                        key.Character == '>' ||
                        key.Character == '?' ||
                        key.Character == '.' ||
                        key.KeyCode == TCODKeyCode.Up ||
                        key.KeyCode == TCODKeyCode.Down ||
                        key.KeyCode == TCODKeyCode.Left ||
                        key.KeyCode == TCODKeyCode.Right ||
                        key.KeyCode == TCODKeyCode.Escape ||
                        key.KeyCode == TCODKeyCode.KeypadOne ||
                        key.KeyCode == TCODKeyCode.KeypadTwo ||
                        key.KeyCode == TCODKeyCode.KeypadThree ||
                        key.KeyCode == TCODKeyCode.KeypadFour ||
                        key.KeyCode == TCODKeyCode.KeypadSix ||
                        key.KeyCode == TCODKeyCode.KeypadSeven ||
                        key.KeyCode == TCODKeyCode.KeypadEight ||
                        key.KeyCode == TCODKeyCode.KeypadNine
                        )
                    {
                        if (key.KeyCode == TCODKeyCode.Up || key.KeyCode == TCODKeyCode.KeypadEight)
                        {
                            key.Character = 'K';
                        }
                        else if (key.KeyCode == TCODKeyCode.Down || key.KeyCode == TCODKeyCode.KeypadTwo)
                        {
                            key.Character = 'J';
                        }
                        else if (key.KeyCode == TCODKeyCode.Left || key.KeyCode == TCODKeyCode.KeypadFour)
                        {
                            key.Character = 'H';
                        }
                        else if (key.KeyCode == TCODKeyCode.Right || key.KeyCode == TCODKeyCode.KeypadSix)
                        {
                            key.Character = 'L';
                        }
                        else if (key.KeyCode == TCODKeyCode.KeypadSeven)
                        {
                            key.Character = 'Y';
                        }
                        else if (key.KeyCode == TCODKeyCode.KeypadNine)
                        {
                            key.Character = 'U';
                        }
                        else if (key.KeyCode == TCODKeyCode.KeypadOne)
                        {
                            key.Character = 'B';
                        }
                        else if (key.KeyCode == TCODKeyCode.KeypadThree)
                        {
                            key.Character = 'N';
                        }

                        string characterPressed = key.Character.ToString().ToUpper();
                        return(characterPressed[0]);
                    }
                }while (!TCODConsole.isWindowClosed());
                return(' ');
            }
            else if (keymode == KeyMode.Inventory)
            {
                do
                {
                    // Get the keypress
                    TCODConsole.flush();
                    key = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed);

                    if (key.KeyCode == TCODKeyCode.Escape)
                    {
                        string characterPressed = key.Character.ToString().ToUpper();
                        return('#');
                    }
                    else
                    {
                        char keyPressed = Convert.ToChar(key.Character.ToString());
                        if (char.IsLetter(keyPressed))
                        {
                            string characterPressed = key.Character.ToString().ToUpper();
                            return(characterPressed[0]);
                        }
                    }
                }while (!TCODConsole.isWindowClosed());
                return(' ');
            }
            else if (keymode == KeyMode.Drop || keymode == KeyMode.Wear || keymode == KeyMode.Takeoff || keymode == KeyMode.Activate)
            {
                do
                {
                    // Get the keypress
                    TCODConsole.flush();
                    key = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed);

                    if (key.KeyCode == TCODKeyCode.Escape)
                    {
                        string characterPressed = key.Character.ToString().ToUpper();
                        return('#');
                    }
                    else
                    {
                        char keyPressed = Convert.ToChar(key.Character.ToString());
                        if (char.IsLetter(keyPressed))
                        {
                            string characterPressed = key.Character.ToString().ToUpper();
                            return(characterPressed[0]);
                        }
                    }
                }while (!TCODConsole.isWindowClosed());
                return(' ');
            }
            else if (keymode == KeyMode.ItemDetails)
            {
                do
                {
                    // Get the keypress
                    TCODConsole.flush();
                    key = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed);

                    if (key.KeyCode == TCODKeyCode.Escape)
                    {
                        return(' ');
                    }
                }while (!TCODConsole.isWindowClosed());
                return(' ');
            }
            else
            {
                return(' ');
            }
        }
Exemplo n.º 24
0
 public void WaitForAnyKeyPress()
 {
     // Wait for a keypress
     TCODConsole.flush();
     TCODConsole.waitForKeypress(true);
 }
Exemplo n.º 25
0
        private static void Main(string[] args)
        {
            AppDomain.CurrentDomain.UnhandledException += (CurrentDomain_UnhandledException);
            TCODColor fogOfWarColour = new TCODColor(80, 80, 80);

            int horizontalPixels, verticalPixels;

            TCODSystem.getCurrentResolution(out horizontalPixels, out verticalPixels);

            //string font = "celtic_garamond_10x10_gs_tc.png";
            string font = "arial12x12.png";

            TCODConsole.setCustomFont(
                font,
                (int)(TCODFontFlags.Grayscale | TCODFontFlags.LayoutTCOD),
                32,
                8);

            int fontWidth, fontHeight;

            TCODSystem.getCharSize(out fontWidth, out fontHeight);

            int screenWidth  = horizontalPixels / fontWidth;
            int screenHeight = verticalPixels / fontHeight;



            var screenBounds = new Rectangle(0, 0, screenWidth,
                                             screenHeight);

            int infoPanelWidth = 42;
            var playBounds     = new Rectangle(0, 0, screenBounds.Width - infoPanelWidth, screenBounds.Height);
            var playerBounds   = new Rectangle(playBounds.Right, 0, infoPanelWidth, 6);
            //var threatBounds = new Rectangle(playBounds.Right, playerBounds.Bottom, infoPanelWidth, 10);
            var competitorBounds = new Rectangle(playBounds.Right, playerBounds.Bottom, infoPanelWidth, 27);
            var eventBounds      = new Rectangle(playBounds.Right, competitorBounds.Bottom, infoPanelWidth,
                                                 screenBounds.Height -
                                                 (playerBounds.Height + competitorBounds.Height));

            Game game = CreateGame();

            Logger.Info("Initializing RootConsole...");

            TCODConsole.initRoot(screenBounds.Width, screenBounds.Height, "Last Man Standing v1.0", true, TCODRendererType.SDL);

            TCODSystem.setFps(30);
            var rootConsole = TCODConsole.root;

            rootConsole.setForegroundColor(ColorPresets.White);
            rootConsole.setAlignment(TCODAlignment.LeftAlignment);
            rootConsole.setBackgroundFlag(TCODBackgroundFlag.Set);

            Logger.Info("Initializing playConsole...");
            TCODConsole playConsole = new TCODConsole(playBounds.Width, playBounds.Height);

            //Logger.Info("Initializing threatConsole...");
            //Console threatConsole = RootConsole.GetNewConsole(threatBounds.Width, threatBounds.Height);
            Logger.Info("Initializing playerConsole...");
            TCODConsole playerConsole = new TCODConsole(playerBounds.Width, playerBounds.Height);

            Logger.Info("Initializing competitorConsole...");
            TCODConsole competitorConsole = new TCODConsole(competitorBounds.Width, competitorBounds.Height);

            Logger.Info("Initializing eventsConsole...");
            TCODConsole eventsConsole = new TCODConsole(eventBounds.Width, eventBounds.Height);

            Logger.Info("Starting Game Loop...");
            do
            {
                TCODKey keyStroke = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed);

                if (game.IsActive)
                {
                    game.ProcessTurn();

                    if (keyStroke.KeyCode != TCODKeyCode.NoKey)
                    {
                        ((PlayerAI)game.Player.Intellect).EvaluateKeyPress(keyStroke);
                    }
                }

                RenderAllConsoles(game, rootConsole, playConsole, fogOfWarColour, playerConsole,
                                  competitorConsole, eventsConsole, playBounds, playerBounds,
                                  competitorBounds, eventBounds);

                if (!game.IsActive)
                {
                    rootConsole.printEx((screenBounds.Width - 30) / 2, (screenBounds.Height - 10) / 2, TCODBackgroundFlag.Set,
                                        TCODAlignment.LeftAlignment, "Press SPACE to start a new game. Press ESC to quit.");
                    if (keyStroke.KeyCode == TCODKeyCode.Space)
                    {
                        rootConsole.print(1, 1, "Creating new game...");
                        TCODConsole.flush();
                        game = CreateGame();
                    }
                }

                TCODConsole.flush();

                if (keyStroke.KeyCode == TCODKeyCode.Escape)
                {
                    return;
                }
            } while (!TCODConsole.isWindowClosed());
        }
Exemplo n.º 26
0
        // /////////////////////////////////////////////////////////////////////////////////

        // /////////////////////////////////////////////////////////////////////////////////
        private void Draw()
        {
            CurrentWindow.OnDraw();

            TCODConsole.flush();
        }
Exemplo n.º 27
0
        public void addRooms()
        {
            TCODRandom rng = TCODRandom.getInstance();

            for (int i = 0; i < roomTries; i++)
            {
                //  Program.engine.render();
                //  Program.engine.update();
                //  TCODConsole.flush();


                int size = rng.getInt(ROOM_MIN_SIZE, ROOM_MAX_SIZE + roomExtraSize);
                if (rng.getInt(0, 1) == 0)
                {
                    size = rng.getInt(ROOM_MIN_SIZE, ROOM_MAX_SIZE / 2);
                }
                int rectangularity = rng.getInt(0, 1 + (size / 2)) * 2;
                int width          = size;
                int height         = size;
                if (rng.getInt(0, 1) == 1)
                {
                    width += rectangularity;
                }
                else
                {
                    height += rectangularity;
                }

                int x = rng.getInt(0, ((map.width - width)));
                int y = rng.getInt(0, ((map.height - height)));

                if ((float)x / 2 == x / 2)
                {
                    x += 1;
                }
                if ((float)y / 2 == y / 2)
                {
                    y += 1;
                }

                if ((float)(height) / 2 != height / 2)
                {
                    height += 1;
                }

                if ((float)(width) / 2 != width / 2)
                {
                    width += 1;
                }

                Room room = new Room(x, y, width, height);

                bool overlaps = false;

                /*
                 * for (int j = 0; j < map.rooms.Count; j++)
                 * {
                 *  Rectangle b = new Rectangle(room.bounds.X - 1, room.bounds.Y - 1, room.bounds.Width + 1, room.bounds.Height + 1);
                 *  Rectangle ob = new Rectangle(map.rooms[j].bounds.X - 1, map.rooms[j].bounds.Y - 1, map.rooms[j].bounds.Width + 1, map.rooms[j].bounds.Height + 1);
                 *  if (b.IntersectsWith(ob))
                 *  {
                 *      overlaps = true;
                 *      break;
                 *  }
                 * }
                 */
                if (!overlaps)
                {
                    int overlapNum = 0;
                    for (int a = room.bounds.X - 1; a < room.bounds.X + room.bounds.Width + 2; a++)
                    {
                        for (int b = room.bounds.Y - 1; b < room.bounds.Y + room.bounds.Height + 2; b++)
                        {
                            if (!map.isWall(a, b))
                            {
                                overlapNum++;
                            }
                        }
                    }
                    if (overlapPercent * overlapNum > (((room.bounds.X) * (room.bounds.Y)) / 100))
                    {
                        overlaps = true;
                    }
                }
                if (!overlaps)
                {
                    RoomType type = RoomType.exit;
                    if (currentRegion == 1)
                    {
                        type = RoomType.entrance;
                    }
                    else if (map.rooms.Last().type == RoomType.exit)
                    {
                        map.rooms.Last().type = RoomType.empty;
                    }

                    room.type = type;

                    startRegion();
                    map.rooms.Add(room);

                    if (debugDraw)
                    {
                        Program.engine.render();

                        TCODConsole.flush();
                    }
                    for (int a = room.bounds.X - 1; a < room.bounds.X + room.bounds.Width + 2; a++)
                    {
                        for (int b = room.bounds.Y - 1; b < room.bounds.Y + room.bounds.Height + 2; b++)
                        {
                            if (a < room.bounds.X || b < room.bounds.Y || a > room.bounds.X + room.bounds.Width || b > room.bounds.Y + room.bounds.Height)
                            {
                                if (map.isWall(a, b))
                                {
                                    map.setWall(a, b);
                                }
                            }
                            else
                            {
                                carve(a, b);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 28
0
        public void smooth()
        {
            bool done  = false;
            int  tries = 0;
            int  l     = 0;

            int percent = windingPercent ^ 2;

            while (!done && !TCODConsole.isWindowClosed() && tries < percent)
            {
                // Program.engine.update();
                if (debugDraw)
                {
                    Program.engine.render();
                    TCODConsole.flush();
                }
                done = true;

                percent = (windingPercent ^ 2) + TCODRandom.getInstance().getInt(-50, 50);

                for (var y = 1; y < map.height; y += 1)
                {
                    for (var x = 1; x < map.width; x += 1)
                    {
                        if (!map.isWall(x, y))
                        {
                            List <Point> exits = new List <Point>();
                            foreach (Direction dir in Enum.GetValues(typeof(Direction)))
                            {
                                if (dir != Direction.NULL)
                                {
                                    Point p = dirToPoint(dir);
                                    if (!map.isWall(x + p.X, y + p.Y))
                                    {
                                        exits.Add(p);
                                    }
                                }
                            }
                            if (exits.Count == 2)
                            {
                                Point a = exits[0];
                                Point b = exits[1];
                                if (a.X != 0) //checks if pathway is horisontal or vertical
                                {
                                    if (map.isWall(x + (a.X * 2), y) && map.isWall(x + (b.X * 2), y))
                                    {
                                        if (!map.isWall(x + a.X, y + 1) && !map.isWall(x + b.X, y + 1))
                                        {
                                            if (map.isWall(x + a.X, y - 1) && map.isWall(x + b.X, y - 1))
                                            {
                                                map.setWall(x + a.X, y);
                                                map.setWall(x + b.X, y);
                                                map.setWall(x, y);
                                                map.dig(x, y + 1, x, y + 1);


                                                done = false;
                                            }
                                        }
                                        else
                                        if (!map.isWall(x + a.X, y - 1) && !map.isWall(x + b.X, y - 1))
                                        {
                                            if (map.isWall(x + a.X, y + 1) && map.isWall(x + b.X, y + 1))
                                            {
                                                map.setWall(x + a.X, y);
                                                map.setWall(x + b.X, y);
                                                map.setWall(x, y);
                                                map.dig(x, y - 1, x, y - 1);

                                                done = false;
                                            }
                                        }
                                    }
                                }
                                else if (a.Y != 0)
                                {
                                    if (map.isWall(x, y + (a.Y * 2)) && map.isWall(x, y + (b.Y * 2)))
                                    {
                                        if (!map.isWall(x + 1, y + a.Y) && !map.isWall(x + 1, y + b.Y))
                                        {
                                            if (map.isWall(x - 1, y + a.Y) && map.isWall(x - 1, y + b.Y))
                                            {
                                                map.setWall(x, y + a.Y);
                                                map.setWall(x, y + b.Y);
                                                map.setWall(x, y);
                                                map.dig(x + 1, y, x + 1, y);

                                                done = false;
                                            }
                                        }
                                        else

                                        if (!map.isWall(x - 1, y + a.Y) && !map.isWall(x - 1, y + b.Y))
                                        {
                                            if (map.isWall(x + 1, y + a.Y) && map.isWall(x + 1, y + b.Y))
                                            {
                                                map.setWall(x, y + a.Y);
                                                map.setWall(x, y + b.Y);
                                                map.setWall(x, y);
                                                map.dig(x - 1, y, x - 1, y);

                                                done = false;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }


                tries++;
                l++;
                if (l < (windingPercent * windingPercent) / 4)
                {
                    Program.engine.loadingGui.loading++;
                    Program.engine.render();
                    l = 0;
                }
            }
            done  = false;
            tries = 0;
            while (!done && !TCODConsole.isWindowClosed() && tries < percent)
            {
                // Program.engine.update();
                //Program.engine.render();

                //TCODConsole.flush();
                if (debugDraw)
                {
                    Program.engine.render();
                    TCODConsole.flush();
                }
                done = true;

                percent = (windingPercent ^ 2) + TCODRandom.getInstance().getInt(-50, 50);

                for (var y = 1; y < map.height; y += 1)
                {
                    for (var x = 1; x < map.width; x += 1)
                    {
                        if (!map.isWall(x, y))
                        {
                            List <Point> exits = new List <Point>();
                            foreach (Direction dir in Enum.GetValues(typeof(Direction)))
                            {
                                if (dir != Direction.NULL)
                                {
                                    Point p = dirToPoint(dir);
                                    if (!map.isWall(x + p.X, y + p.Y))
                                    {
                                        exits.Add(p);
                                    }
                                }
                            }
                            if (exits.Count == 2)
                            {
                                Point a = exits[0];
                                Point b = exits[1];
                                if (a.X != 0) //checks if pathway is horisontal or vertical
                                {
                                    if (map.isWall(x + (a.X * 3), y) && map.isWall(x + (b.X * 3), y))
                                    {
                                        if (!map.isWall(x + (a.X * 2), y) && !map.isWall(x + (b.X * 2), y))
                                        {
                                            if (!map.isWall(x + (a.X * 2), y + 1) && !map.isWall(x + (b.X * 2), y + 1))
                                            {
                                                if (map.isWall(x + (a.X * 2), y - 1) && map.isWall(x + (b.X * 2), y - 1))
                                                {
                                                    map.setWall(x + a.X, y);
                                                    map.setWall(x + b.X, y);
                                                    map.setWall(x + (a.X * 2), y);
                                                    map.setWall(x + (b.X * 2), y);
                                                    map.setWall(x, y);
                                                    map.dig(x, y + 1, x, y + 1);
                                                    map.dig(x + a.X, y + 1, x + a.X, y + 1);
                                                    map.dig(x + b.X, y + 1, x + b.X, y + 1);

                                                    done = false;
                                                }
                                            }
                                            else

                                            if (!map.isWall(x + (a.X * 2), y - 1) && !map.isWall(x + (b.X * 2), y - 1))
                                            {
                                                if (map.isWall(x + (a.X * 2), y + 1) && map.isWall(x + (b.X * 2), y + 1))
                                                {
                                                    map.setWall(x + a.X, y);
                                                    map.setWall(x + b.X, y);
                                                    map.setWall(x + (a.X * 2), y);
                                                    map.setWall(x + (b.X * 2), y);
                                                    map.setWall(x, y);
                                                    map.dig(x, y - 1, x, y - 1);
                                                    map.dig(x + a.X, y - 1, x + a.X, y - 1);
                                                    map.dig(x + b.X, y - 1, x + b.X, y - 1);

                                                    done = false;
                                                }
                                            }
                                        }
                                    }
                                    else if (a.Y != 0)
                                    {
                                        if (map.isWall(x, y + (a.Y * 3)) && map.isWall(x, y + (b.Y * 3)))
                                        {
                                            if (!map.isWall(x, y + (a.Y * 2)) && !map.isWall(x, y + (b.Y * 2)))
                                            {
                                                if (!map.isWall(x + 1, y + (a.Y * 2)) && !map.isWall(x + 1, y + (b.Y * 2)))
                                                {
                                                    if (map.isWall(x - 1, y + (a.Y * 2)) && map.isWall(x - 1, y + (b.Y * 2)))
                                                    {
                                                        map.setWall(x, y + a.Y);
                                                        map.setWall(x, y + b.Y);
                                                        map.setWall(x, y + (a.Y * 2));
                                                        map.setWall(x, y + (b.Y * 2));
                                                        map.setWall(x, y);
                                                        map.dig(x + 1, y + 1, x, y);
                                                        map.dig(x + 1, y + a.Y, x + 1, y + a.Y);
                                                        map.dig(x + 1, y + b.Y, x + 1, y + b.Y);

                                                        done = false;
                                                    }
                                                }
                                                else

                                                if (!map.isWall(x + (a.X * 2), y + 1) && !map.isWall(x + (b.X * 2), y + 1))
                                                {
                                                    if (map.isWall(x + (a.X * 2), y - 1) && map.isWall(x + (b.X * 2), y - 1))

                                                    {
                                                        map.setWall(x, y + a.Y);
                                                        map.setWall(x, y + b.Y);
                                                        map.setWall(x, y + (a.Y * 2));
                                                        map.setWall(x, y + (b.Y * 2));
                                                        map.setWall(x, y);
                                                        map.dig(x - 1, y - 1, x, y);
                                                        map.dig(x - 1, y + a.Y, x - 1, y + a.Y);
                                                        map.dig(x - 1, y + b.Y, x - 1, y + b.Y);

                                                        done = false;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                tries++;
            }
        }
Exemplo n.º 29
0
        public void removeDeadEnds()
        {
            bool         done    = false;
            int          tries   = 0;
            int          l       = 0;
            List <Point> ignores = new List <Point>();

            while (!done && !TCODConsole.isWindowClosed() && tries < 100)
            {
                // Program.engine.update();
                //Program.engine.render();
                //TCODConsole.flush();
                if (debugDraw)
                {
                    Program.engine.render();
                    TCODConsole.flush();
                }
                done = true;


                for (var y = 1; y < map.height; y += 1)
                {
                    for (var x = 1; x < map.width; x += 1)
                    {
                        if (!map.isWall(x, y))
                        {
                            List <Point> exits = new List <Point>();
                            foreach (Direction dir in Enum.GetValues(typeof(Direction)))
                            {
                                if (dir != Direction.NULL)
                                {
                                    Point p = dirToPoint(dir);
                                    if (!map.isWall(x + p.X, y + p.Y) || ignores.Contains(new Point(x + p.X, y + p.Y)))
                                    {
                                        exits.Add(p);
                                    }
                                }
                            }
                            if (exits.Count == 1)
                            {
                                if (TCODRandom.getInstance().getInt(0, 100) < 100 - deadEndLength)
                                {
                                    done = false;
                                    map.setWall(x, y);
                                }
                                else
                                {
                                    ignores.Add(new Point(x, y));
                                }
                            }
                        }
                    }
                }
                tries++;
                l++;
                if (l > (100 - deadEndLength) / 5)
                {
                    Program.engine.loadingGui.loading++;
                    Program.engine.render();
                    l = 0;
                }
            }
        }
Exemplo n.º 30
0
 public static void Draw()
 {
     TCODConsole.flush();
 }