air-petr/tic-tac-toe-ai

PHP版井字棋AI。

v1.0.3 2022-02-13 08:20 UTC

This package is auto-updated.

Last update: 2024-09-13 13:42:55 UTC


README

PHP版井字棋游戏AI。

安装

composer require air-petr/tic-tac-toe-ai

如何使用

PlayerBoard是这个包的主要类。通常,你创建一个板,将其交给AI玩家,并接收带有新标记的板。placeMarkPlayer实例的主要函数。

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实例。使用XO符号进行初始化。

$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