예제 #1
0
        // reset every label in the current outline to the normal background color
        private void resetOutline()
        {
            foreach (Coords coords in placementOutline)
            {
                Control label = BoardTable.GetControlFromPosition(coords.x, coords.y);
                label.BackColor = Color.DodgerBlue;
            }

            placementOutline.Clear();
        }
 public ChessGame()
 {
     Board          = new BoardTable(8, 8);
     Turn           = 1;
     CurrentPlayer  = Color.White;
     EndGame        = false;
     GamePieces     = new HashSet <Piece>();
     CapturedPieces = new HashSet <Piece>();
     StartPieces();
     PlayerInCheck         = false;
     VulnerableToEnPassant = null;
 }
예제 #3
0
 public static void PrintBoard(BoardTable board)
 {
     for (int i = 0; i < board.Lines; i++)
     {
         Console.Write(8 - i + ") ");
         for (int j = 0; j < board.Lines; j++)
         {
             PrintPieceOnBoard(board.GetPiece(i, j));
         }
         Console.WriteLine();
     }
     Console.WriteLine();
     Console.WriteLine("   ^ ^ ^ ^ ^ ^ ^ ^");
     Console.WriteLine("   a b c d e f g h");
 }
예제 #4
0
 public static void PrintBoard(BoardTable board, bool[,] possibleMoves)
 {
     for (int i = 0; i < board.Lines; i++)
     {
         Console.Write(8 - i + ") ");
         for (int j = 0; j < board.Lines; j++)
         {
             if (possibleMoves[i, j])
             {
                 Console.BackgroundColor = ConsoleColor.Cyan;
             }
             PrintPieceOnBoard(board.GetPiece(i, j));
             Console.ResetColor();
         }
         Console.WriteLine();
     }
     Console.WriteLine();
     Console.WriteLine("   ^ ^ ^ ^ ^ ^ ^ ^");
     Console.WriteLine("   a b c d e f g h");
 }
예제 #5
0
    void Start()
    {
        moveTo = MovementTYPE.LEFT;
        BoxCollider2D Button0Box;

        Buttons = new GameObject[16];
        ButtonsCenter = new float[16];
        ButtonsLeft = new float[16];
        ButtonsRight = new float[16];
        ButtonsUp = new float[16];
        ButtonsDown = new float[16];

        findButtonsGameobject ();

        for (int i = 0; i < 16; i++)
        {

            Button0Box = Buttons[i].GetComponent<BoxCollider2D>();

        //			Debug.Log(Button0Box.transform.position.x);
        //			Debug.Log(Button0Box.size);
        //			Debug.Log (Button0Box.bounds.extents.x);

            ButtonsCenter[i] = Button0Box.bounds.center.x;
            ButtonsLeft[i] = ButtonsCenter [i] - (Button0Box.bounds.extents.x / 2);
            ButtonsRight [i] = ButtonsCenter [i] + (Button0Box.bounds.extents.x / 2);
            ButtonsCenter[i] = Button0Box.bounds.center.y;
            ButtonsDown[i] = ButtonsCenter [i] - (Button0Box.bounds.extents.y / 2);
            ButtonsUp [i] = ButtonsCenter [i] + (Button0Box.bounds.extents.y / 2);

        //			Debug.Log ("\n BUTTON  " + i);
        //			Debug.Log ("\n LEFT : " + ButtonsLeft [i]);
        //			Debug.Log ("\n Right : " + ButtonsRight [i]);
        //			Debug.Log ("\n Up : " + ButtonsUp [i]);
        //			Debug.Log ("\n Down : " + ButtonsDown [i]);
        //			Debug.Log ("\n Button Finished");

        }

        table = new BoardTable ();
        table.LoadLevel (1);
        setSpritesOfLevel ();
    }
예제 #6
0
 //Constructor
 public Bishop(Color color, BoardTable board) : base(color, board)
 {
 }
예제 #7
0
 //Constructor
 public King(Color color, BoardTable board, ChessGame game) : base(color, board)
 {
     Game = game;
 }
예제 #8
0
 //Constructor
 public Rook(Color color, BoardTable board) : base(color, board)
 {
 }
예제 #9
0
        private void PositionClick(object sender, EventArgs e)
        {
            // consider adding a check for type in the future to made it more modular
            Label    selected    = (Label)sender;
            ShipInfo ship        = shipsToPlace.Peek();
            int      size        = ship.size;
            int      startRow    = BoardTable.GetRow(selected);
            int      startColumn = BoardTable.GetColumn(selected);

            validPlacement = true;

            // display horizontal if this is the first click or if the label is the same one clicked
            if (placementOutline.Count == 0 || ((placementOutline[0].x != BoardTable.GetColumn(selected)) || (placementOutline[0].y != BoardTable.GetRow(selected))))
            {
                // get rid of the old outline
                resetOutline();

                if (size > (10 - startColumn))
                {
                    size           = (10 - startColumn);
                    validPlacement = false;
                }

                // make a new outline, checking if it's valid
                for (int i = 0; i < size; i++)
                {
                    placementOutline.Add(new Coords((startColumn + i), startRow));

                    // if the space has a ship already in it mark as invalid
                    if (BoardTable.GetControlFromPosition((startColumn + i), startRow).Text != "")
                    {
                        validPlacement = false;
                    }
                }
            }
            // otherwise flip it to vertical
            else
            {
                // get rid of the old outline
                resetOutline();

                if (size > (10 - startRow))
                {
                    size           = (10 - startRow);
                    validPlacement = false;
                }

                // make a new outline, checking if it's valid
                for (int i = 0; i < size; i++)
                {
                    placementOutline.Add(new Coords(startColumn, (startRow + i)));

                    // if the space has a ship already in it mark as invalid
                    if (BoardTable.GetControlFromPosition(startColumn, (startRow + i)).Text != "")
                    {
                        validPlacement = false;
                    }
                }
            }

            // display the placeholder on the board
            foreach (Coords coords in placementOutline)
            {
                Control label = BoardTable.GetControlFromPosition(coords.x, coords.y);
                if (validPlacement)
                {
                    label.BackColor = Color.Lime;
                }
                else
                {
                    label.BackColor = Color.Red;
                }
            }
        }
예제 #10
0
        private void TakeShot(object sender, EventArgs e)
        {
            // consider adding a check for type in the future to made it more modular
            Label selected = (Label)sender;

            // create a Coords for the player shot and send it to the opponent
            if (selected.BackColor == Color.DodgerBlue)
            {
                Coords playerShot = new Coords(OpponentBoard.GetRow(selected), OpponentBoard.GetColumn(selected));
                int    result     = AI.ResolveShot(playerShot);
                UpdateLabel(true, result);

                // if a miss, chance to miss color, otherwise turn hit color and check for sunk
                if (result == 0)
                {
                    selected.BackColor = Color.AliceBlue;
                }
                else
                {
                    selected.BackColor = Color.Red;

                    // adjust the ship labels if a ship was sunk
                    if (result > 1)
                    {
                        switch (result)
                        {
                        case 2:
                            OpponentPTBoatLabel.Font = new Font(OpponentPTBoatLabel.Font, FontStyle.Strikeout);
                            break;

                        case 3:
                            OpponentSubmarineLabel.Font = new Font(OpponentSubmarineLabel.Font, FontStyle.Strikeout);
                            break;

                        case 4:
                            OpponentDestroyerLabel.Font = new Font(OpponentDestroyerLabel.Font, FontStyle.Strikeout);
                            break;

                        case 5:
                            OpponentBattleshipLabel.Font = new Font(OpponentBattleshipLabel.Font, FontStyle.Strikeout);
                            break;

                        case 6:
                            OpponentCarrierLabel.Font = new Font(OpponentCarrierLabel.Font, FontStyle.Strikeout);
                            break;

                        default:
                            break;
                        }
                    }
                }
            }
            // if the have already selected that space it will not be the normal color and we can discout their click
            else
            {
                return;
            }

            if (AI.CheckLose())
            {
                MessageBox.Show("You won!", "Victory!");
                Close();
            }

            // now the opponent shoots at us **temporary code ***
            Coords opponentShot = AI.TakeTurn();
            int    shotResult   = ResolveShot(opponentShot);

            AI.Report(shotResult);
            UpdateLabel(false, shotResult);

            Control label = BoardTable.GetControlFromPosition(opponentShot.x, opponentShot.y);

            // if a miss, chance to miss color, otherwise turn hit color and check for sunk
            if (shotResult == 0)
            {
                label.BackColor = Color.AliceBlue;
            }
            else
            {
                label.BackColor = Color.Red;

                // adjust the ship labels if a ship was sunk
                if (shotResult > 1)
                {
                    switch (shotResult)
                    {
                    case 2:
                        PlayerPTBoatLabel.Font = new Font(PlayerPTBoatLabel.Font, FontStyle.Strikeout);
                        break;

                    case 3:
                        PlayerSubmarineLabel.Font = new Font(PlayerSubmarineLabel.Font, FontStyle.Strikeout);
                        break;

                    case 4:
                        PlayerDestroyerLabel.Font = new Font(PlayerDestroyerLabel.Font, FontStyle.Strikeout);
                        break;

                    case 5:
                        PlayerBattleshipLabel.Font = new Font(PlayerBattleshipLabel.Font, FontStyle.Strikeout);
                        break;

                    case 6:
                        PlayerCarrierLabel.Font = new Font(PlayerCarrierLabel.Font, FontStyle.Strikeout);
                        break;

                    default:
                        break;
                    }
                }
            }

            if (shipsSunk > 4)
            {
                MessageBox.Show("You lost, better luck next time", "Defeat");
                Close();
            }
        }
예제 #11
0
        // place the ship if the placement is valid
        private void PlaceButton_Click(object sender, EventArgs e)
        {
            if (!validPlacement)
            {
                MessageBox.Show("That is an invalid placement for that ship.", "Warning");
            }
            else
            {
                ShipInfo ship   = shipsToPlace.Dequeue();
                string   symbol = ship.symbol;

                // for every coordinate reset the background color and set the symbol
                foreach (Coords coords in placementOutline)
                {
                    Control label = BoardTable.GetControlFromPosition(coords.x, coords.y);
                    label.BackColor = Color.DodgerBlue;
                    label.Text      = symbol;
                }

                // if the first two coords have the same y value it is horizontal, then add the ship based on the symbol
                // side note: I could probably find a more elegant way to do this but I was feeling tired and just needed it implemented
                bool horizontal = (placementOutline[0].y == placementOutline[1].y);
                if (symbol == "C")
                {
                    playerShips.Add(new Carrier(placementOutline[0], horizontal));
                }
                else if (symbol == "B")
                {
                    playerShips.Add(new Battleship(placementOutline[0], horizontal));
                }
                else if (symbol == "D")
                {
                    playerShips.Add(new Destroyer(placementOutline[0], horizontal));
                }
                else if (symbol == "S")
                {
                    playerShips.Add(new Submarine(placementOutline[0], horizontal));
                }
                else if (symbol == "P")
                {
                    playerShips.Add(new PTBoat(placementOutline[0], horizontal));
                }
                else
                {
                    // *** implement the somethign has gone horribly wrong contingency ***
                }
            }

            // if all ships are placed, start the game
            if (shipsToPlace.Count == 0)
            {
                for (int i = 0; i < 10; i++)
                {
                    for (int j = 0; j < 10; j++)
                    {
                        BoardTable.GetControlFromPosition(i, j).Enabled    = false;
                        OpponentBoard.GetControlFromPosition(i, j).Enabled = true;
                    }
                }

                PlaceButton.Enabled = false;
                shipsSunk           = 0;
            }
        }
예제 #12
0
 //Constructor
 public Queen(Color color, BoardTable board) : base(color, board)
 {
 }
 //Constructor
 public Knight(Color color, BoardTable board) : base(color, board)
 {
 }