示例#1
0
            public Player(char tile, int row, int col, int level)
            {
                this.tile = tile;
                BoardLoc loc = new BoardLoc(row, col);

                this.poss  = loc;
                this.home  = loc;
                this.level = level;
            }
示例#2
0
        private void setupBoard()
        {
            movemode = true;
            gameover = false;

            // initialise all tiles as free tiles
            for (int row = 1; row < rowcount + 1; row++)
            {
                for (int col = 1; col < colcount + 1; col++)
                {
                    BoardLoc loc = new BoardLoc(row, col);
                    TileArray[loc.TileNumber()] = new Tile(loc, tokenfree, TileType.free);
                }
            }

            // initialise players
            PlayerArray[0] = new Player('A', 3, 1, 0);
            PlayerArray[1] = new Player('B', rowcount - 2, colcount, 0);
            foreach (Player PlayerRef in PlayerArray)
            {
                int t = PlayerRef.poss.TileNumber();
                TileArray[t].tiletype = TileType.player;
                TileArray[t].token    = PlayerRef.tile;
            }

            // define board size
            this.Size = new Size(colcount * tilesize + 35, rowcount * tilesize + 120);

            int i = 0;

            foreach (Tile tile in TileArray)
            {
                ButtonArray[i]           = new Button();
                ButtonArray[i].Name      = i.ToString();
                ButtonArray[i].Text      = tile.token.ToString();
                ButtonArray[i].Font      = new Font("Berlin Sans FB", 20);
                ButtonArray[i].BackColor = Color.Yellow;
                ButtonArray[i].ForeColor = Color.Black;
                ButtonArray[i].Width     = tilesize - 1;
                ButtonArray[i].Height    = tilesize - 1;
                ButtonArray[i].Location  = new Point((tile.poss.col - 1) * tilesize + 10, (tile.poss.row - 1) * tilesize + 10);
                //ButtonArray[i].Enabled = true;
                //ButtonArray[i].Visible = true;
                ButtonArray[i].Click += btntile_Click;
                this.Controls.Add(ButtonArray[i]);

                i++;
            }

            // position label
            labelAction.Location = new Point(10, rowcount * tilesize + 20);

            // handover control to buttons
            getPlayerAction();
        }
示例#3
0
 private void endGame()
 {
     for (int row = 1; row < rowcount + 1; row++)
     {
         for (int col = 1; col < colcount + 1; col++)
         {
             int t = new BoardLoc(row, col).TileNumber();
             ButtonArray[t].Click += null;
         }
     }
     labelAction.Text = "Game Over";
 }
示例#4
0
        private bool testNoMoreMoves(BoardLoc posFrom)
        {
            // return true if no more moves...
            int moves = 0;

            if (testMoveAllowed(posFrom, posFrom.row - 1, posFrom.col - 1))
            {
                moves = moves + 1;
            }
            if (testMoveAllowed(posFrom, posFrom.row - 1, posFrom.col))
            {
                moves = moves + 1;
            }
            if (testMoveAllowed(posFrom, posFrom.row - 1, posFrom.col + 1))
            {
                moves = moves + 1;
            }

            if (testMoveAllowed(posFrom, posFrom.row, posFrom.col - 1))
            {
                moves = moves + 1;
            }
            if (testMoveAllowed(posFrom, posFrom.row, posFrom.col + 1))
            {
                moves = moves + 1;
            }

            if (testMoveAllowed(posFrom, posFrom.row + 1, posFrom.col - 1))
            {
                moves = moves + 1;
            }
            if (testMoveAllowed(posFrom, posFrom.row + 1, posFrom.col))
            {
                moves = moves + 1;
            }
            if (testMoveAllowed(posFrom, posFrom.row + 1, posFrom.col + 1))
            {
                moves = moves + 1;
            }

            //MessageBox.Show("Player: " + currentplayer.ToString() + " - moves " + moves.ToString());

            if (moves > 0)
            {
                return(false);
            }
            else
            {
                gameover = true;
                return(true);
            }
        }
示例#5
0
        private bool testTileMove(BoardLoc posFrom, BoardLoc posTo)
        {
            // check new position is directly adjacent before checking if valid tile move
            int rowDiff = Math.Abs(posFrom.row - posTo.row);
            int colDiff = Math.Abs(posFrom.col - posTo.col);

            if ((rowDiff > 1 || colDiff > 1) || (rowDiff == 0 && colDiff == 0))
            {
                return(false);
            }
            else
            {
                return(testTileMove(posTo.TileNumber()));
            }
        }
示例#6
0
 private bool testMoveAllowed(BoardLoc posFrom, int newRow, int newCol)
 {
     // check still within the board
     if (newRow < 1 || newRow > rowcount || newCol < 1 || newCol > colcount)
     {
         return(false); // invalid move
     }
     else
     {
         if (testTileMove(new BoardLoc(newRow, newCol).TileNumber()))
         {
             return(true); // valid move
         }
         else
         {
             return(false); // invalid move
         }
     }
 }
示例#7
0
 public Tile(BoardLoc loc, char token, TileType tiletype)
 {
     this.poss     = loc;
     this.token    = token;
     this.tiletype = tiletype;
 }