librockpaperscissor
Hawaii Brass
使用基于剪刀石头布的规则以及您想要的任何组合来创建游戏。验证规则将确保您在创建有效游戏的正确轨道上。
这个项目对我来说主要是一个有趣的练习。在看到 101 步 RPS 风格的游戏后,我认为用 PHP 重新创建该游戏会很酷。然而,我决定创建一个库。也许比赛很快就会到来。
仍有很多改进要做,但我相信,总的来说,它正在发挥作用。
我用一个 Dockerfile 来开发该库。我只是用它来快速设置一个 PHP 环境,然后将 PHPUnit 和 Composer 下载到容器中。我还安装了 SSH,这样我就可以使用 PHPStorm 进行远程调试和远程单元测试。这个 Dockerfile 缺少很多东西,包括配置 PHP 进行开发(例如 display_errors)。它在我的待办事项上。
现在,只需构建容器并运行它。
docker build -t librps .
docker run -ti [-p 22] -v YOUR_PATH:CONTAINER_PATH librps
然后,当您进入容器内时,您必须启动 ssh 守护进程,以便可以使用远程开发工具。
第一步当然是克隆存储库。然后您应该更新作曲家库,然后运行测试套件。
git clone https://github.com/rvelhote/librockpaperscissor.git
cd librockpaperscissor
composer update
phpunit
如果您没有安装 Composer 或 PHPUnit,请参阅它们各自的网站以获取最新的安装说明。
根据剪刀石头布、剪刀石头布、蜥蜴史波克以及任何您想要的规则创建游戏。
一位名叫 David C. Lovelace 的了不起的人创造了我见过的最令人震惊的 RPS 游戏。您可以查看它们并用它们创建一个超级酷的游戏。这些规则相当复杂(嗯,并不总是如此)...如果有一个 PHP 库来帮助人们实现这个东西就好了。哦等等。
有关实现细节,您可以参考测试套件,其中将显示一些示例。不管怎样,这就是它的要点。对于经典的剪刀石头布游戏,您需要:
// Players of the gaaaaame!
$ player1 = new Player ( " Ricardo V. " , " Rock " );
$ player2 = new Player ( " Anna B. " , " Paper " );
// The ruleset for a regular Rock Paper Scissor game.
$ rules = new RuleCollection ();
$ rules -> add ( new Rule ( " Paper " , " Rock " , " Covers " ));
$ rules -> add ( new Rule ( " Scissor " , " Paper " , " Cuts " ));
$ rules -> add ( new Rule ( " Rock " , " Scissor " , " Smashes " ));
// You should validate it first to make sure it's all good
$ validationResult = $ rules -> validate ();
if ( $ validationResult -> isValid ()) {
$ game = new Game ( $ player1 , $ player2 , $ rules );
$ result = $ game -> result ();
// A game result can be either a Win or a Tie. A Win contains the players that participated (and their plays) as well
// as the winning rule. A Tie just contains the players. You can do whatever you want with the data.
if ( $ result instanceof Tie) {
/** @var WelhottRockPaperScissorGameResultTie $result */
print "n » " . $ result -> getPlayer1 ()-> getName (). " tied " . $ result -> getPlayer2 ()-> getName (). "n" ;
print " » " . $ result -> getPlayer1 ()-> getName (). " played " . $ result -> getPlayer1 ()-> getPlay (). "n" ;
print " » " . $ result -> getPlayer2 ()-> getName (). " played " . $ result -> getPlayer2 ()-> getPlay (). "n" ;
} else if ( $ result instanceof Win) {
/** @var WelhottRockPaperScissorGameResultWin $result */
print "n » " . $ result -> getRule ()-> getText (). "n ================ n" ;
// Detailed
print " » " . $ result -> getWinner ()-> getName (). " played " . $ result -> getWinner ()-> getPlay (). "n" ;
print " » " . $ result -> getLoser ()-> getName (). " played " . $ result -> getLoser ()-> getPlay (). "n" ;
print " » " . $ result -> getRule ()-> getWinner (). " " . $ result -> getRule ()-> getOutcome (). " " . $ result -> getRule ()-> getLoser (). "n" ;
print " » " . $ result -> getWinner ()-> getName (). " Win(s)! nn" ;
} else {
echo " Oops :P " ;
}
} else {
$ reflection = new ReflectionClass ( "\ Welhott \ RockPaperScissor \ Validation \ ValidationMessage " );
$ constants = $ reflection -> getConstants ();
/** @var WelhottRockPaperScissorValidationValidationMessage $message */
foreach ( $ validationResult -> getMessages () as $ message ) {
$ constant = array_search ( $ message -> getType (), $ constants );
print " » " . $ constant . " » " . $ message -> getMessage (). "n" ;
}
}
欢迎您对库提出改进建议并做出贡献:)
该项目中的代码已获得 MIT 许可。