コード例 #1
0
 public function testDoubleDown()
 {
     // double down win
     $wallet = new Wallet(1000, 200);
     $cards = array(new Card(new Rank(8)), new Card(new Rank(8)), new Card(new Rank(3)), new Card(new Rank(Rank::ACE)), new Card(new Rank(Rank::KING)));
     $game = new BlackjackGame(new TestDeck($cards));
     $game->start();
     $this->assertTrue($game->getState() == State::OFFER_INSURANCE);
     $game->buyInsurance(false);
     $this->assertTrue($game->getState() == State::PLAYING);
     $game->userDoubleDown();
     $this->assertTrue($game->getDealerHand()->getScore() == 19);
     $this->assertTrue($game->getUserHand()->getScore() == 21);
     $this->assertTrue($game->getState() == State::USER_WIN);
     $wallet->reconcile($game);
     $this->assertTrue($wallet->getMoney() == 1400);
     $wallet->reconcile($game);
     $this->assertTrue($wallet->getMoney() == 1400);
     $wallet->reconcile($game);
     $this->assertTrue($wallet->getMoney() == 1400);
     // double down win, dealer bust
     $wallet = new Wallet(1000, 400);
     $cards = array(new Card(new Rank(2)), new Card(new Rank(8)), new Card(new Rank(3)), new Card(new Rank(Rank::ACE)), new Card(new Rank(Rank::ACE)), new Card(new Rank(3)), new Card(new Rank(Rank::KING)), new Card(new Rank(Rank::KING)));
     $game = new BlackjackGame(new TestDeck($cards));
     $game->start();
     $this->assertTrue($game->getState() == State::OFFER_INSURANCE);
     $game->buyInsurance(false);
     $this->assertTrue($game->getState() == State::PLAYING);
     $game->userDoubleDown();
     $this->assertTrue($game->getDealerHand()->getScore() == 26);
     $this->assertTrue($game->getUserHand()->getScore() == 12);
     $this->assertTrue($game->getState() == State::DEALER_BUST);
     $wallet->reconcile($game);
     $this->assertTrue($wallet->getMoney() == 1800);
     $wallet->reconcile($game);
     // double down loss no bust
     $wallet = new Wallet(1000, 200);
     $cards = array(new Card(new Rank(3)), new Card(new Rank(5)), new Card(new Rank(5)), new Card(new Rank(Rank::ACE)), new Card(new Rank(5)), new Card(new Rank(2)), new Card(new Rank(4)));
     $game = new BlackjackGame(new TestDeck($cards));
     $game->start();
     $this->assertTrue($game->getState() == State::OFFER_INSURANCE);
     $game->buyInsurance(false);
     $this->assertTrue($game->getState() == State::PLAYING);
     $game->userDoubleDown();
     // try to hit a few times, should do nothing
     $game->hitUser();
     $game->hitUser();
     $this->assertTrue($game->getDealerHand()->getScore() == 20);
     $this->assertTrue($game->getUserHand()->getScore() == 15);
     $this->assertTrue($game->getState() == State::DEALER_WIN);
     $wallet->reconcile($game);
     $this->assertTrue($wallet->getMoney() == 600);
     // double down loss via bust
     $wallet = new Wallet(1000, 500);
     $cards = array(new Card(new Rank(2)), new Card(new Rank(7)), new Card(new Rank(Rank::QUEEN)), new Card(new Rank(Rank::JACK)), new Card(new Rank(8)), new Card(new Rank(10)));
     $game = new BlackjackGame(new TestDeck($cards));
     $game->start();
     $this->assertTrue($game->getState() == State::PLAYING);
     $game->userDoubleDown();
     // try to hit a few times, should do nothing
     $game->hitUser();
     $game->hitUser();
     $this->assertTrue($game->getDealerHand()->getScore() == 12);
     $this->assertTrue($game->getUserHand()->getScore() == 25);
     $this->assertTrue($game->getState() == State::USER_BUST);
     $wallet->reconcile($game);
     $this->assertTrue($wallet->getMoney() == 0);
     // double down w/ insurance & win
     $wallet = new Wallet(1000, 200);
     $cards = array(new Card(new Rank(8)), new Card(new Rank(8)), new Card(new Rank(3)), new Card(new Rank(Rank::ACE)), new Card(new Rank(Rank::KING)));
     $game = new BlackjackGame(new TestDeck($cards));
     $game->start();
     $this->assertTrue($game->getState() == State::OFFER_INSURANCE);
     $game->buyInsurance(true);
     $this->assertTrue($game->getState() == State::PLAYING);
     $game->userDoubleDown();
     $this->assertTrue($game->getDealerHand()->getScore() == 19);
     $this->assertTrue($game->getUserHand()->getScore() == 21);
     $this->assertTrue($game->getState() == State::USER_WIN);
     $wallet->reconcile($game);
     $this->assertTrue($wallet->getMoney() == 1300);
     // double down w/o insurance & win
     $wallet = new Wallet(1000, 50);
     $cards = array(new Card(new Rank(4)), new Card(new Rank(6)), new Card(new Rank(5)), new Card(new Rank(Rank::ACE)), new Card(new Rank(Rank::ACE)), new Card(new Rank(Rank::QUEEN)), new Card(new Rank(3)));
     $game = new BlackjackGame(new TestDeck($cards));
     $game->start();
     $this->assertTrue($game->getState() == State::OFFER_INSURANCE);
     $game->buyInsurance(false);
     $this->assertTrue($game->getState() == State::PLAYING);
     $game->userDoubleDown();
     $this->assertTrue($game->getDealerHand()->getScore() == 18);
     $this->assertTrue($game->getUserHand()->getScore() == 12);
     $this->assertTrue($game->getState() == State::DEALER_WIN);
     $wallet->reconcile($game);
     $this->assertTrue($wallet->getMoney() == 900);
     // double down w/ insurance & loss
     $wallet = new Wallet(1000, 200);
     $cards = array(new Card(new Rank(8)), new Card(new Rank(9)), new Card(new Rank(3)), new Card(new Rank(Rank::ACE)), new Card(new Rank(Rank::KING)));
     $game = new BlackjackGame(new TestDeck($cards));
     $game->start();
     $this->assertTrue($game->getState() == State::OFFER_INSURANCE);
     $game->buyInsurance(true);
     $this->assertTrue($game->getState() == State::PLAYING);
     $game->userDoubleDown();
     $this->assertTrue($game->getDealerHand()->getScore() == 19);
     $this->assertTrue($game->getUserHand()->getScore() == 22);
     $this->assertTrue($game->getState() == State::USER_BUST);
     $wallet->reconcile($game);
     $this->assertTrue($wallet->getMoney() == 500);
     $wallet->reconcile($game);
     $this->assertTrue($wallet->getMoney() == 500);
 }