Пример #1
0
 /**
  * Execute command
  *
  * @param InputInterface $input
  * @param OutputInterface $output
  * @return int|null|void
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $registry = PlayerRegistry::getDefaultPlayers();
     $player1 = $input->getArgument('player-x');
     $player2 = $input->getArgument('player-o');
     $count = (int) $input->getOption('games');
     $progress = new ProgressHelper();
     $progress->start($output, $count);
     $stats = [PlayerInterface::SYMBOL_X => 0, PlayerInterface::SYMBOL_O => 0, 'Draw' => 0];
     for ($i = 0; $i < $count; $i++) {
         $game = new Game();
         $game->addPlayer($registry->get($player1, PlayerInterface::SYMBOL_X));
         $game->addPlayer($registry->get($player2), PlayerInterface::SYMBOL_O);
         $winner = $game->autoPlay();
         $stats[$winner ? $winner : 'Draw']++;
         $progress->advance();
     }
     $progress->finish();
     $output->writeln('');
     $output->writeln('Winning statistics');
     $table = new TableHelper();
     $table->setHeaders([$player1, $player2, "Draw"]);
     $table->addRow(array_values($stats));
     $table->render($output);
 }
Пример #2
0
 /**
  * We expect every player to win against drunk player
  * @dataProvider getData
  * @param string $name
  */
 public function testWinAgainstDrunkPlayer($name)
 {
     if ($name == 'drunk') {
         return;
         // we do not want drunk to player to play against himself
     }
     $player = PlayerRegistry::getDefaultPlayers()->get($name);
     $utility = new TableHelper();
     $game = new Game($utility->createTable());
     $game->addPlayer($player);
     $game->addPlayer(new DrunkPlayer(), PlayerInterface::SYMBOL_O);
     $this->assertEquals(PlayerInterface::SYMBOL_X, $game->autoPlay());
 }