/// <summary>
 /// Draws the message to the screen
 /// </summary>
 public static void DrawMessage()
 {
     SwinGame.DrawText(Message, MESSAGE_COLOR, GameResources.GameFont("Courier"), FIELD_LEFT, MESSAGE_TOP);
 }
Esempio n. 2
0
        /// <summary>
        /// Draws the game during the attack phase.
        /// </summary>s
        public static void DrawDiscovery()
        {
            const int SCORES_LEFT = 172;
            const int SHOTS_TOP   = 157;
            const int HITS_TOP    = 206;
            const int SPLASH_TOP  = 256;

            if ((SwinGame.KeyDown(KeyCode.LeftShiftKey) | SwinGame.KeyDown(KeyCode.RightShiftKey)) & SwinGame.KeyDown(KeyCode.CKey))
            {
                UtilityFunctions.DrawField(GameController.HumanPlayer.EnemyGrid, GameController.ComputerPlayer, true);
            }
            else
            {
                UtilityFunctions.DrawField(GameController.HumanPlayer.EnemyGrid, GameController.ComputerPlayer, false);
            }

            UtilityFunctions.DrawSmallField(GameController.HumanPlayer.PlayerGrid, GameController.HumanPlayer);
            UtilityFunctions.DrawMessage();
            SwinGame.DrawText(GameController.HumanPlayer.Shots.ToString(), Color.White, GameResources.GetFont("Menu"), SCORES_LEFT, SHOTS_TOP);
            SwinGame.DrawText(GameController.HumanPlayer.Hits.ToString(), Color.White, GameResources.GetFont("Menu"), SCORES_LEFT, HITS_TOP);
            SwinGame.DrawText(GameController.HumanPlayer.Missed.ToString(), Color.White, GameResources.GetFont("Menu"), SCORES_LEFT, SPLASH_TOP);
        }
        /// <summary>
        /// Draws the player's grid and ships.
        /// </summary>
        /// <param name="grid">the grid to show</param>
        /// <param name="thePlayer">the player to show the ships of</param>
        /// <param name="small">true if the small grid is shown</param>
        /// <param name="showShips">true if ships are to be shown</param>
        /// <param name="left">the left side of the grid</param>
        /// <param name="top">the top of the grid</param>
        /// <param name="width">the width of the grid</param>
        /// <param name="height">the height of the grid</param>
        /// <param name="cellWidth">the width of each cell</param>
        /// <param name="cellHeight">the height of each cell</param>
        /// <param name="cellGap">the gap between the cells</param>
        private static void DrawCustomField(ISeaGrid grid, Player thePlayer, bool small, bool showShips, int left, int top, int width, int height, int cellWidth, int cellHeight,
                                            int cellGap)
        {
            //SwinGame.FillRectangle(Color.Blue, left, top, width, height)

            int rowTop  = 0;
            int colLeft = 0;

            //Draw the grid
            for (int row = 0; row <= 9; row++)
            {
                rowTop = top + (cellGap + cellHeight) * row;

                for (int col = 0; col <= 9; col++)
                {
                    colLeft = left + (cellGap + cellWidth) * col;

                    Color fillColor = default(Color);
                    bool  draw      = false;

                    draw = true;

                    switch (grid[row, col])
                    {
                    case TileView.Ship:
                        draw = false;
                        break;

                    //If small Then fillColor = _SMALL_SHIP Else fillColor = _LARGE_SHIP
                    case TileView.Miss:
                        if (small)
                        {
                            fillColor = SMALL_MISS;
                        }
                        else
                        {
                            fillColor = LARGE_MISS;
                        }
                        break;

                    case TileView.Hit:
                        if (small)
                        {
                            fillColor = SMALL_HIT;
                        }
                        else
                        {
                            fillColor = LARGE_HIT;
                        }
                        break;

                    case TileView.Sea:
                        if (small)
                        {
                            fillColor = SMALL_SEA;
                        }
                        else
                        {
                            draw = false;
                        }
                        break;
                    }

                    if (draw)
                    {
                        SwinGame.FillRectangle(fillColor, colLeft, rowTop, cellWidth, cellHeight);
                        if (!small)
                        {
                            SwinGame.DrawRectangle(OUTLINE_COLOR, colLeft, rowTop, cellWidth, cellHeight);
                        }
                    }
                }
            }

            if (!showShips)
            {
                return;
            }

            int    shipHeight = 0;
            int    shipWidth  = 0;
            string shipName   = null;

            //Draw the ships
            foreach (Ship s in thePlayer)
            {
                if (s == null || !s.IsDeployed)
                {
                    continue;
                }
                rowTop  = top + (cellGap + cellHeight) * s.Row + SHIP_GAP;
                colLeft = left + (cellGap + cellWidth) * s.Column + SHIP_GAP;
                int j = (int)s.CurrentShipColour;
                if (s.Direction == Direction.LeftRight)
                {
                    shipName   = "ShipLR" + s.Size + "a" + j;
                    shipHeight = cellHeight - (SHIP_GAP * 2);
                    shipWidth  = (cellWidth + cellGap) * s.Size - (SHIP_GAP * 2) - cellGap;
                }
                else
                {
                    //Up down
                    shipName   = "ShipUD" + s.Size + "a" + j;
                    shipHeight = (cellHeight + cellGap) * s.Size - (SHIP_GAP * 2) - cellGap;
                    shipWidth  = cellWidth - (SHIP_GAP * 2);
                }

                if (!small)
                {
                    SwinGame.DrawBitmap(GameResources.GameImage(shipName), colLeft, rowTop);
                }
                else
                {
                    SwinGame.FillRectangle(SHIP_FILL_COLOR, colLeft, rowTop, shipWidth, shipHeight);
                    SwinGame.DrawRectangle(SHIP_OUTLINE_COLOR, colLeft, rowTop, shipWidth, shipHeight);
                }
            }
        }
Esempio n. 4
0
 /// <summary>
 /// Draws the main menu to the screen.
 /// </summary>
 public static void DrawMainMenu()
 {
     // Clears the Screen to Black
     SwinGame.DrawText("Main Menu", Color.White, GameResources.GetFont("ArialLarge"), 50, 50);
     DrawButtons(MAIN_MENU);
 }
Esempio n. 5
0
 /// <summary>
 /// Draws the Game menu to the screen
 /// </summary>
 public static void DrawGameMenu()
 {
     // Clears the Screen to Black
     SwinGame.DrawText("Paused", Color.White, GameResources.GetFont("ArialLarge"), 50, 50);
     DrawButtons(GAME_MENU);
 }
Esempio n. 6
0
        /// <summary>
        /// Draw the end of the game screen, shows the win/lose state
        /// </summary>
        public static void DrawEndOfGame()
        {
            UtilityFunctions.DrawField(GameController.ComputerPlayer.PlayerGrid, GameController.ComputerPlayer, true);
            UtilityFunctions.DrawSmallField(GameController.HumanPlayer.PlayerGrid, GameController.HumanPlayer);

            if (GameController.HumanPlayer.IsDestroyed)
            {
                SwinGame.DrawTextLines("YOU LOSE!", Color.White, Color.Transparent, GameResources.GameFont("ArialLarge"), FontAlignment.AlignCenter, 0, 250, SwinGame.ScreenWidth(), SwinGame.ScreenHeight());
            }
            else
            {
                SwinGame.DrawTextLines("-- WINNER --", Color.White, Color.Transparent, GameResources.GameFont("ArialLarge"), FontAlignment.AlignCenter, 0, 250, SwinGame.ScreenWidth(), SwinGame.ScreenHeight());
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Draws the high scores to the screen.
        /// </summary>
        public static void DrawHighScores()
        {
            const int SCORES_HEADING = 40;
            const int SCORES_TOP     = 80;
            const int SCORE_GAP      = 30;

            if (_Scores.Count == 0)
            {
                LoadScores();
            }

            SwinGame.DrawText("   High Scores   ", Color.White, GameResources.GameFont("Courier"), SCORES_LEFT, SCORES_HEADING);

            //New 'Back' button to make the usability of the screen better
            SwinGame.DrawText("Click or press 'Enter' to return to the Main Menu...", Color.White, GameResources.GameFont("Courier"), SCORES_LEFT / 2, SCORES_TOP + 10 * SCORE_GAP);
            SwinGame.DrawBitmap(GameResources.GameImage("Return"), 2 * SCORES_LEFT / 3, SCORES_TOP + 12 * SCORE_GAP);

            //For all of the scores
            int i = 0;

            for (i = 0; i <= _Scores.Count - 1; i++)
            {
                Score s = default(Score);

                s = _Scores[i];

                //for scores 1 - 9 use 01 - 09
                if (i < 9)
                {
                    SwinGame.DrawText(" " + (i + 1) + ":   " + s.Name + "   " + s.Value, Color.White, GameResources.GameFont("Courier"), SCORES_LEFT, SCORES_TOP + i * SCORE_GAP);
                }
                else
                {
                    SwinGame.DrawText(i + 1 + ":   " + s.Name + "   " + s.Value, Color.White, GameResources.GameFont("Courier"), SCORES_LEFT, SCORES_TOP + i * SCORE_GAP);
                }
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Draws the menu at the indicated level.
        /// </summary>
        /// <param name="menu">the menu to draw</param>
        /// <param name="level">the level (height) of the menu</param>
        /// <param name="xOffset">the offset of the menu</param>
        /// <remarks>
        /// The menu text comes from the _menuStructure field. The level indicates the height
        /// of the menu, to enable sub menus. The xOffset repositions the menu horizontally
        /// to allow the submenus to be positioned correctly.
        /// </remarks>
        private static void DrawButtons(int menu, int level, int xOffset)
        {
            int btnTop = 0;

            btnTop = MENU_TOP - (MENU_GAP + BUTTON_HEIGHT) * level;
            int i = 0;

            for (i = 0; i <= _menuStructure[menu].Length - 1; i++)
            {
                int btnLeft = 0;
                btnLeft = MENU_LEFT + BUTTON_SEP * (i + xOffset);
                //SwinGame.FillRectangle(Color.White, btnLeft, btnTop, BUTTON_WIDTH, BUTTON_HEIGHT)
                SwinGame.DrawTextLines(_menuStructure[menu][i], MENU_COLOR, Color.Black, GameResources.GameFont("Menu"), FontAlignment.AlignCenter, btnLeft + TEXT_OFFSET, btnTop + TEXT_OFFSET, BUTTON_WIDTH, BUTTON_HEIGHT);

                if (SwinGame.MouseDown(MouseButton.LeftButton) & IsMouseOverMenu(i, level, xOffset))
                {
                    SwinGame.DrawRectangle(HIGHLIGHT_COLOR, btnLeft, btnTop, BUTTON_WIDTH, BUTTON_HEIGHT);
                }
            }
        }
Esempio n. 9
0
        public static void DrawHotkeysMenu()
        {
            SwinGame.DrawText("Hover over the keybinding to edit", Color.AntiqueWhite, GameResources.GameFont("Menu"), SwinGame.ScreenWidth() - 550, 25);
            SwinGame.DrawText("Function", Color.AntiqueWhite, GameResources.GameFont("Menu"), SwinGame.ScreenWidth() - HOTKEYS_FUNC, 75);
            SwinGame.DrawText("Key Bound", Color.AntiqueWhite, GameResources.GameFont("Menu"), SwinGame.ScreenWidth() - HOTKEYS_BIND, 75);

            // Escape key
            SwinGame.DrawText("Escape key", Color.AntiqueWhite, SwinGame.ScreenWidth() - HOTKEYS_FUNC, 100);
            SwinGame.DrawText(UtilityFunctions.EscapeKey.ToString(), Color.White, SwinGame.ScreenWidth() - HOTKEYS_BIND, 100);
            // Up key
            SwinGame.DrawText("Up key", Color.AntiqueWhite, SwinGame.ScreenWidth() - HOTKEYS_FUNC, 150);
            SwinGame.DrawText(UtilityFunctions.UpKey.ToString(), Color.White, SwinGame.ScreenWidth() - HOTKEYS_BIND, 150);
            // Down key
            SwinGame.DrawText("Down key", Color.AntiqueWhite, SwinGame.ScreenWidth() - HOTKEYS_FUNC, 200);
            SwinGame.DrawText(UtilityFunctions.DownKey.ToString(), Color.White, SwinGame.ScreenWidth() - HOTKEYS_BIND, 200);
            // Left key
            SwinGame.DrawText("Left key", Color.AntiqueWhite, SwinGame.ScreenWidth() - HOTKEYS_FUNC, 250);
            SwinGame.DrawText(UtilityFunctions.LeftKey.ToString(), Color.White, SwinGame.ScreenWidth() - HOTKEYS_BIND, 250);
            // Random key
            SwinGame.DrawText("Random key", Color.AntiqueWhite, SwinGame.ScreenWidth() - HOTKEYS_FUNC, 300);
            SwinGame.DrawText(UtilityFunctions.RandomKey.ToString(), Color.White, SwinGame.ScreenWidth() - HOTKEYS_BIND, 300);
            // Blue key
            SwinGame.DrawText("Blue key", Color.AntiqueWhite, SwinGame.ScreenWidth() - HOTKEYS_FUNC, 350);
            SwinGame.DrawText(UtilityFunctions.BlueKey.ToString(), Color.White, SwinGame.ScreenWidth() - HOTKEYS_BIND, 350);
            // Pink key
            SwinGame.DrawText("Pink key", Color.AntiqueWhite, SwinGame.ScreenWidth() - HOTKEYS_FUNC, 400);
            SwinGame.DrawText(UtilityFunctions.PinkKey.ToString(), Color.White, SwinGame.ScreenWidth() - HOTKEYS_BIND, 400);
            // Cheats key
            SwinGame.DrawText("Cheats key", Color.AntiqueWhite, SwinGame.ScreenWidth() - HOTKEYS_FUNC, 450);
            SwinGame.DrawText(UtilityFunctions.CheatsKey.ToString(), Color.White, SwinGame.ScreenWidth() - HOTKEYS_BIND, 450);
            // maximise key
            SwinGame.DrawText("Fullscreen key", Color.AntiqueWhite, SwinGame.ScreenWidth() - HOTKEYS_FUNC, 500);
            SwinGame.DrawText(UtilityFunctions.MaxKey.ToString(), Color.White, SwinGame.ScreenWidth() - HOTKEYS_BIND, 500);
        }
        /// <summary>
        /// Draws the game during the attack phase.
        /// </summary>s
        public static void DrawDiscovery()
        {
            const int SCORES_LEFT = 172;
            const int SHOTS_TOP   = 157;
            const int HITS_TOP    = 206;
            const int SPLASH_TOP  = 256;
            const int AI_LEFT     = 50;
            const int AI_TOP      = 350;

            if (UtilityFunctions.ShowShipsCheat)
            {
                UtilityFunctions.DrawField(GameController.HumanPlayer.EnemyGrid, GameController.ComputerPlayer, true);
            }
            else
            {
                UtilityFunctions.DrawField(GameController.HumanPlayer.EnemyGrid, GameController.ComputerPlayer, false);
            }

            UtilityFunctions.DrawSmallField(GameController.HumanPlayer.PlayerGrid, GameController.HumanPlayer);
            UtilityFunctions.DrawMessage();

            SwinGame.DrawText(GameController.HumanPlayer.Shots.ToString(), Color.White, GameResources.GameFont("Menu"), SCORES_LEFT, SHOTS_TOP);
            SwinGame.DrawText(GameController.HumanPlayer.Hits.ToString(), Color.White, GameResources.GameFont("Menu"), SCORES_LEFT, HITS_TOP);
            SwinGame.DrawText(GameController.HumanPlayer.Missed.ToString(), Color.White, GameResources.GameFont("Menu"), SCORES_LEFT, SPLASH_TOP);
            SwinGame.DrawText(GameController.AiGameSetting(), Color.White, GameResources.GameFont("Menu"), AI_LEFT, AI_TOP);

            //Draws Ships
            foreach (ShipName sn in Enum.GetValues(typeof(ShipName)))
            {
                if (object.ReferenceEquals(GameController.ComputerPlayer.Ship(sn), null))
                {
                }
                else
                {
                    if (GameController.ComputerPlayer.Ship(sn).IsDestroyed)
                    {
                        int i = 0;
                        i = (int)sn - 1;
                        int rowTop  = 122 + (2 + 40) * GameController.ComputerPlayer.Ship(sn).Row + 3;
                        int colLeft = 349 + (2 + 40) * GameController.ComputerPlayer.Ship(sn).Column + 3;
                        if (i >= 0)
                        {
                            string shipName   = null;
                            int    shipHeight = 0;
                            int    shipWidth  = 0;
                            int    cellHeight = 40;
                            int    SHIP_GAP   = 3;
                            int    cellWidth  = 40;
                            int    cellGap    = 2;
                            int    j          = (int)GameController.ComputerPlayer.Ship(sn).CurrentShipColour;
                            if (GameController.ComputerPlayer.Ship(sn).Direction == Direction.LeftRight)
                            {
                                shipName   = "ShipLR" + GameController.ComputerPlayer.Ship(sn).Size + "a" + j;
                                shipHeight = cellHeight - (SHIP_GAP * 2);
                                shipWidth  = (cellWidth + cellGap) * GameController.ComputerPlayer.Ship(sn).Size - (SHIP_GAP * 2) - cellGap;
                            }
                            else
                            {
                                //Up down
                                shipName   = "ShipUD" + GameController.ComputerPlayer.Ship(sn).Size + "a" + j;
                                shipHeight = (cellHeight + cellGap) * GameController.ComputerPlayer.Ship(sn).Size - (SHIP_GAP * 2) - cellGap;
                                shipWidth  = cellWidth - (SHIP_GAP * 2);
                            }
                            //FIX HERE!!!
                            SwinGame.DrawBitmap(GameResources.GameImage(shipName), colLeft, rowTop);

                            //    SwinGame.FillRectangle(Color.LightBlue, SHIPS_LEFT, SHIPS_TOP + i * SHIPS_HEIGHT, SHIPS_WIDTH, SHIPS_HEIGHT)
                            //Else
                            //    SwinGame.FillRectangle(Color.Gray, SHIPS_LEFT, SHIPS_TOP + i * SHIPS_HEIGHT, SHIPS_WIDTH, SHIPS_HEIGHT)
                        }

                        //SwinGame.DrawRectangle(Color.Black, SHIPS_LEFT, SHIPS_TOP + i * SHIPS_HEIGHT, SHIPS_WIDTH, SHIPS_HEIGHT)
                        //SwinGame.DrawText(sn.ToString(), Color.Black, GameFont("Courier"), SHIPS_LEFT + TEXT_OFFSET, SHIPS_TOP + i * SHIPS_HEIGHT)
                    }
                }
            }
        }
Esempio n. 11
0
        /// <summary>
        /// Draws the high scores to the screen.
        /// </summary>
        public static void DrawHighScores()
        {
            const int SCORES_HEADING = 40;
            const int SCORES_TOP = 80;
            const int SCORE_GAP = 30;

            if (_Scores.Count == 0)
                LoadScores();

            SwinGame.DrawText("   High Scores   ", Color.White, GameResources.GameFont("Courier"), SCORES_LEFT, SCORES_HEADING);

            // For all of the scores
            int i;
            for (i = 0; i <= _Scores.Count - 1; i++)
            {
                Score s;

                s = _Scores[i];

                // for scores 1 - 9 use 01 - 09
                if (i < 9)
                    SwinGame.DrawText(" " + (i + 1) + ":   " + s.Name + "   " + s.Value, Color.White, GameResources.GameFont("Courier"), SCORES_LEFT, SCORES_TOP + i * SCORE_GAP);
                else
                    SwinGame.DrawText(i + 1 + ":   " + s.Name + "   " + s.Value, Color.White, GameResources.GameFont("Courier"), SCORES_LEFT, SCORES_TOP + i * SCORE_GAP);
            }
        }
Esempio n. 12
0
        /// <summary>
        /// Draws the player's grid and ships.
        /// </summary>
        /// <param name="grid">the grid to show</param>
        /// <param name="player">the player to show the ships of</param>
        /// <param name="small">true if the small grid is shown</param>
        /// <param name="showShips">true if ships are to be shown</param>
        /// <param name="left">the left side of the grid</param>
        /// <param name="top">the top of the grid</param>
        /// <param name="width">the width of the grid</param>
        /// <param name="height">the height of the grid</param>
        /// <param name="cellWidth">the width of each cell</param>
        /// <param name="cellHeight">the height of each cell</param>
        /// <param name="cellGap">the gap between the cells</param>
        private static void DrawCustomField(ISeaGrid grid, Player player, bool small, bool showShips, int left, int top, int width, int height, int cellWidth, int cellHeight, int cellGap)
        {
            /////////////////////////////////////////////////////// Todo /////////////////////////////////////////////////////////
            //SwinGame.FillRectangle(Color.Blue, left, top, width, height);

            int rowTop;
            int colLeft;

            // Draw the grid
            for (int row = 0; row < 10; row++)
            {
                rowTop = top + (cellGap + cellHeight) * row;

                for (int col = 0; col < 10; col++)
                {
                    colLeft = left + (cellGap + cellWidth) * col;
                    Color fillColor = default;
                    bool  draw      = true;

                    switch (grid[row, col])
                    {
                    case TileView.Ship: {
                        draw = false;
                        break;
                    }

                    /////////////////////////////////////////////////////// Todo /////////////////////////////////////////////////////////
                    // If small Then fillColor = _SMALL_SHIP Else fillColor = _LARGE_SHIP
                    case TileView.Miss: {
                        if (small)
                        {
                            fillColor = SMALL_MISS;
                        }
                        else
                        {
                            fillColor = LARGE_MISS;
                        }
                        break;
                    }

                    case TileView.Hit: {
                        if (small)
                        {
                            fillColor = SMALL_HIT;
                        }
                        else
                        {
                            fillColor = LARGE_HIT;
                        }
                        break;
                    }

                    case TileView.Sea: {
                        if (small)
                        {
                            fillColor = SMALL_SEA;
                        }
                        else
                        {
                            draw = false;
                        }
                        break;
                    }
                    }

                    if (draw)
                    {
                        SwinGame.FillRectangle(fillColor, colLeft, rowTop, cellWidth, cellHeight);
                        if (!small)
                        {
                            SwinGame.DrawRectangle(OUTLINE_COLOR, colLeft, rowTop, cellWidth, cellHeight);
                        }
                    }
                }
            }

            if (!showShips)
            {
                return;
            }

            int    shipHeight, shipWidth;
            string shipName;

            // Draw the ships
            foreach (Ship s in player)
            {
                if (s is null || !s.IsDeployed)
                {
                    continue;
                }
                rowTop  = top + (cellGap + cellHeight) * s.Row + SHIP_GAP;
                colLeft = left + (cellGap + cellWidth) * s.Column + SHIP_GAP;
                if (s.Direction == Direction.LeftRight)
                {
                    shipName   = "ShipLR" + s.Size;
                    shipHeight = cellHeight - SHIP_GAP * 2;
                    shipWidth  = (cellWidth + cellGap) * s.Size - SHIP_GAP * 2 - cellGap;
                }
                else
                {
                    // Up down
                    shipName   = "ShipUD" + s.Size;
                    shipHeight = (cellHeight + cellGap) * s.Size - SHIP_GAP * 2 - cellGap;
                    shipWidth  = cellWidth - SHIP_GAP * 2;
                }

                if (!small)
                {
                    //should it draw several tiny ships
                    //Putting in the wrong shipName
                    SwinGame.DrawBitmap(GameResources.GetImage(shipName), colLeft, rowTop);
                }
                else
                {
                    SwinGame.FillRectangle(SHIP_FILL_COLOR, colLeft, rowTop, shipWidth, shipHeight);
                    SwinGame.DrawRectangle(SHIP_OUTLINE_COLOR, colLeft, rowTop, shipWidth, shipHeight);
                }
            }
        }