air-petr / tic-tac-toe-ai
PHP版井字棋AI。
v1.0.3
2022-02-13 08:20 UTC
Requires
- php: >=7.4
Requires (Dev)
- air-petr/php-console-cleaner: ^1.0
- phpunit/phpunit: ^9.5
README
PHP版井字棋游戏AI。
安装
composer require air-petr/tic-tac-toe-ai
如何使用
Player
和Board
是这个包的主要类。通常,你创建一个板,将其交给AI玩家,并接收带有新标记的板。placeMark
是Player
实例的主要函数。
use AirPetr\TicTacToeAi\Player; use AirPetr\TicTacToeAi\Board; $board = new Board(); $player = new Player(); echo $board->toString(); // "_________" $boardWithMove = $player->placeMark('X', $board); echo $boardWithMove->toString(); // "__X______"
AI玩家有三个难度级别:简单、普通和困难。
- 简单玩家做随机移动。
- 困难玩家基于最小-最大算法。他是不可战胜的。
- 普通玩家介于困难玩家和简单玩家之间。他不会让你轻易获胜,但可以被交叉攻击。就像一个普通的人玩井字棋。
$easyPlayer = Player::easy(); $normalPlayer = Player::normal(); $hardPlayer = Player::hard();
可以从各种数据源创建Board
实例。使用X
和O
符号进行初始化。
$board1 = Board::createByString('__X___O__'); echo $board1->toString(); // "__X___O__" $board2 = Board::createByPlainArray(['_', '_', 'X', '_', '_', '_', 'O', '_', '_']); echo $board2->toString(); // "__X___O__" $board3 = Board::createByArrayTable([ ['_', '_', 'X'], ['_', '_', '_'], ['O', '_', '_'] ]); echo $board3->toString(); // "__X___O__"
Board
实例也可以转换为各种表示形式。
$board = Board::createByString('__X___O__'); $board->toString(); // "__X___O__" $board->toPlainArray(); // ['_', '_', 'X', '_', '_', '_', 'O', '_', '_'] $board->toArrayTable(); // [['_', '_', 'X'], ['_', '_', '_'], ['O', '_', '_']]
演示
你可以在demo
文件夹中与代码互动。以下是如何运行交互式游戏的方法:
php demo/interactive_game.php
测试
在test
文件夹中有一些单元测试。通过以下方式运行测试:
composer test