/** * 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); }
/** * 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()); }