Exemple #1
0
        public Board(Player one, Player two)
        {
            _player1 = one;
            _player2 = two;
            _currentPlayer = _player1;

            // config the board
            for (int i = 0; i < 6; i++)
            {
                _dishes[i] = new MiddleDish(_player1, i);
                _dishes[i].dishUpdate += new DishUpdateDelegate(DishUpdate);
            }
            _dishes[6] = new EndDish(_player1, 6);
            _dishes[6].dishUpdate += new DishUpdateDelegate(DishUpdate);
            _player1End = (EndDish)_dishes[6];
            for (int i = 7; i<13; i++)
            {
                _dishes[i] = new MiddleDish(_player2, i );
                _dishes[i].dishUpdate += new DishUpdateDelegate(DishUpdate);
            }
            _dishes[13] = new EndDish(_player2, 13);
            _dishes[13].dishUpdate += new DishUpdateDelegate(DishUpdate);
            _player2End = (EndDish)_dishes[13];
        }
Exemple #2
0
        private void menuItem6_Click(object sender, System.EventArgs e)
        {
            Player one = null, two = null;
            // player one
            frmPlayerName frm = new frmPlayerName();
            if (frm.ShowDialog() == DialogResult.OK)
            {
                one = new Player(frm.PlayerName);
            }

            frm = new frmPlayerName();
            if (frm.ShowDialog() == DialogResult.OK)
            {
                two = new Player(frm.PlayerName);
            }

            if (two == null || one == null)
            {
                MessageBox.Show("Cannot start new game without players");
            }
            else
            {

                lblPlayer1.Text = one.ToString();
                lblPlayer2.Text = two.ToString();

                InitialiseGame(one, two);
            }
        }
Exemple #3
0
 private void InitialiseGame(Player one, Player two)
 {
     board = new Board(one, two);
     board.dishUpdate += new DishUpdateDelegate(OnDishUpdate);
     board.turnOver += new TurnOverDelegate(board_turnOver);
     board.gameOver += new GameOverDelegate(board_gameOver);
     board.Refresh();
 }
Exemple #4
0
 private void board_turnOver(Player currentPlayer)
 {
     lblMessage.Text = currentPlayer.ToString() + "'s turn";
 }
Exemple #5
0
 private void board_gameOver(Player winner)
 {
     if (winner == null)
         lblMessage.Text = "Drawn match";
     else
         lblMessage.Text = winner.ToString() + " wins!!!";
 }
Exemple #6
0
 public EndDish(Player owner, int dishNumber)
     : base(owner, dishNumber)
 {
 }
Exemple #7
0
        public void TakeTurn(int iDish)
        {
            AbstractDish dish = _dishes[iDish];
            if (dish is MiddleDish)
            {
                // check if dish clicked in belongs to current player
                if (dish.Owner != _currentPlayer)
                {
                    throw new Exception("Cannot move opponents tokens!");
                }

                if (dish.HasTokens)
                {
                    int tokens = dish.removeTokens();
                    for (int i = 1; i <= tokens; i++)
                    {
                        iDish = ++iDish % 14;
                        dish = _dishes[iDish];
                        if (dish is EndDish && dish.Owner != _currentPlayer)
                        {
                            // don't drop
                            iDish = ++iDish % 14;
                            dish = _dishes[iDish];
                        }
                        dish.dropToken();
                    }

                    // check if dish has only one token and stopped on yours.
                    if (dish.Tokens == 1 && dish.Owner == _currentPlayer && !(dish is EndDish))
                    {
                        // claim all oppositions (and yours)
                        int oppDish = (6 + (6 - iDish));
                        AbstractDish oppositeDish = _dishes[oppDish];
                        if (_currentPlayer == _player1)
                        {
                            _player1End.dropToken(oppositeDish.removeTokens());
                            _player1End.dropToken(dish.removeTokens());
                        }
                        else
                        {
                            _player2End.dropToken(oppositeDish.removeTokens());
                            _player2End.dropToken(dish.removeTokens());
                        }
                    }

                    // check for win-state
                    Player winner = null;
                    if (this.IsGameOver(ref winner))
                    {
                        // current player must have won
                        // move all other player's tokens to their win bin
                        Player loser;
                        EndDish endDish;
                        if (winner == _player1)
                        {
                            loser = _player2;
                            endDish = _player2End;
                        }
                        else
                        {
                            loser = _player1;
                            endDish = _player1End;
                        }
                        foreach (AbstractDish d in _dishes)
                        {
                            if (d is MiddleDish && d.Owner == loser)
                            {
                                endDish.dropToken(d.removeTokens());
                            }
                        }
                        // determine winner by size of mancala's
                        if (_player1End.Tokens > _player2End.Tokens)
                            OnGameOver(_player1);
                        else if (_player2End.Tokens > _player1End.Tokens)
                            OnGameOver(_player2);
                        else
                            OnGameOver(null);

                    }
                    else
                    {
                        // player gets another go if they drop their last token
                        // in their end dish.
                        if (!(dish is EndDish && dish.Owner == _currentPlayer))
                        {
                            _currentPlayer = this.NextPlayer();
                        }
                        OnTurnOver(_currentPlayer);
                    }
                }
                else
                {
                    throw new Exception("This dish has no tokens!");
                }
            }
            else
            {
                throw new Exception("Cannot take from end dish!");
            }
        }
Exemple #8
0
        private bool IsGameOver(ref Player winner)
        {
            bool player1Empty = true;
            bool player2Empty = true;

            // check player 1
            for (int i = 0; i < 6; i++)
            {
                if (_dishes[i].HasTokens)
                {
                    player1Empty = false;
                    break;
                }
            }

            // check player 2
            for (int i = 7; i < 13; i++)
            {
                if (_dishes[i].HasTokens)
                {
                    player2Empty = false;
                    break;
                }
            }

            if (player1Empty && player2Empty)
            {
                winner = null;
                return true;
            }
            else if (player1Empty)
            {
                winner = _player1;
                return true;
            }
            else if (player2Empty)
            {
                winner = _player2;
                return true;
            }
            else
            {
                return false;
            }
        }
Exemple #9
0
 protected virtual void OnTurnOver(Player current)
 {
     if (turnOver != null)
     {
         turnOver(current);
     }
 }
Exemple #10
0
 protected virtual void OnGameOver(Player winner)
 {
     if (gameOver != null)
     {
         gameOver(winner);
     }
 }
Exemple #11
0
 public MiddleDish(Player owner, int dishNumber)
     : base(owner, dishNumber)
 {
     _tokens = 4;
 }
Exemple #12
0
 public AbstractDish(Player owner, int dishNumber)
 {
     _owner = owner;
     _dishNumber = dishNumber;
 }