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 許可。