Ejemplo n.º 1
0
        /// <summary>
        /// 初始化.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FormOnePlayer_Load(object sender, EventArgs e)
        {
            // 初始化游戏类.
            game = new BlackJackGame();

            // 初始化玩家.
            player = new Player()
            {
                Name = DEFAULT_PLAYER_NAME,
            };
            computerPlayer = new ComputerPlayer()
            {
                Name = DEFAULT_COMPUTER_PLAYER_NAME,
            };

            // 玩家加入游戏.
            game.AddNewPlayer(player);
            game.AddNewPlayer(computerPlayer);

            // 初始化游戏.
            //game.InitGames();

            // 事件绑定.
            // 当2张牌发完以后, 显示牌局.
            game.AfterTakeFirstTwoCard += new AfterTakeFirstTwoCardHandler(ShowAfterTakeFirstTwoCard);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 玩家 不再拿牌。在任何情况下,玩家可选择停止要牌。
 /// </summary>
 /// <param name="player"></param>
 public void PlayerStand(Player player)
 {
     player.IsStand = true;
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 新增玩家.
        /// </summary>
        /// <param name="player"></param>
        public bool AddNewPlayer(Player player)
        {
            if (player == null)
            {
                // 忽略为 Null 的玩家.
                return false;
            }

            if (playerList.Count >= MAX_NUM_OF_PLAYER)
            {
                // 不允许超过最大玩家数量.
                return false;
            }

            if (playerList.Count(p => p.Name == player.Name) > 0)
            {
                // 不允许重复名字.
                return false;
            }

            // 加入列表并返回.
            playerList.Add(player);

            return true;
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 玩家 再拿一张牌。
        /// 玩家(包括闲家和庄家)只要手上牌相加点数不超过21点都可要牌。
        /// </summary>
        /// <param name="player"></param>
        public void PlayerHit(Player player)
        {
            if (player.GetPoint() <= MAX_POINT)
            {

                bool bCancel = false;
                // 根据需要, 触发事件.
                if (BeforeTakeOneCard != null)
                {
                    BeforeTakeOneCard(player, ref bCancel);
                }

                // 扑克牌出队列.
                PlayingCards card = playingCardsQueue.Dequeue();

                // 后续发的牌, 都要显示了.
                card.IsShowOnTable = true;

                // 扑克牌给玩家.
                player.TakeOneCard(card);

                // 根据需要, 触发事件.
                if (AfterTakeOneCard != null)
                {
                    AfterTakeOneCard(player, card);
                }

                if (player.GetPoint() >= MAX_POINT)
                {
                    // 暴了.
                    player.IsStand = true;
                }
            }
        }
        public void StartGameTest()
        {
            // 初始化游戏.
            BlackJackGame game = new BlackJackGame();

            // 首先, 新增玩家.
            Player p1 = new Player()
            {
                 Name = "T1",
            };
            bool addNewPlayerresult = game.AddNewPlayer(p1);
            // 结果应该通过.
            Assert.IsTrue(addNewPlayerresult);

            Player p2 = new Player()
            {
                Name = "T2",
            };
            addNewPlayerresult = game.AddNewPlayer(p2);
            // 结果应该通过.
            Assert.IsTrue(addNewPlayerresult);

            // 尝试加入重复的名称.
            Player p3 = new Player()
            {
                Name = "T2",
            };
            addNewPlayerresult = game.AddNewPlayer(p3);
            // 结果应该失败.
            Assert.IsFalse(addNewPlayerresult);

            // 游戏开始以前,玩家手上的点数应该为0
            Assert.AreEqual(0, p1.GetPoint());
            Assert.AreEqual(0, p2.GetPoint());

            // 初始化游戏.
            game.InitGames();

            // 洗牌.
            game.Shuffle();

            // 开始发牌.
            game.StartGame();

            // 发牌以后, 玩家手上的点数应该大于0
            Assert.IsTrue(p1.GetPoint() > 0);
            Assert.IsTrue(p2.GetPoint() > 0);

            // 玩家1,2 都不拿牌了.
            game.PlayerStand(p1);
            game.PlayerStand(p2);

            // 结束游戏.
            game.FinishGame();

            if (p1.GetPoint() > p2.GetPoint())
            {
                // 玩家1分高的情况下,玩家1赢.
                Assert.IsTrue(p1.IsWinner);
                Assert.IsFalse(p2.IsWinner);
            }
            else if (p1.GetPoint() < p2.GetPoint())
            {
                // 玩家2分高的情况下,玩家2赢.
                Assert.IsTrue(p2.IsWinner);
                Assert.IsFalse(p1.IsWinner);
            }
            else
            {
                // 相同的情况下,认为都赢了.
                Assert.IsTrue(p1.IsWinner);
                Assert.IsTrue(p2.IsWinner);
            }
        }