ジャンケンをベースにしたルールで、好きな組み合わせでゲームを作成できます。検証ルールにより、有効なゲームの作成に向けた正しい軌道に乗っていることが確認されます。
このプロジェクトは私にとって主に楽しみのための練習です。 101 手の RPS スタイルのゲームを見た後、そのゲームを PHP で再現するのは素晴らしいだろうと思いました。しかし、代わりにライブラリを作成することにしました。おそらくゲームはすぐに来るでしょう。
改善すべき点はまだたくさんありますが、全体的にはその役割を果たしていると思います。
ライブラリの開発に使用する Dockerfile があります。これを使用して PHP 環境をすばやくセットアップし、PHPUnit と Composer をコンテナにダウンロードします。また、PHPStorm を使用してリモート デバッグやリモート単体テストを実行できるように、SSH もインストールします。この Dockerfile には、開発用の PHP の構成 (display_errors など) を含む多くのものが欠落しています。それは私のTODOにあります。
現時点では、コンテナーをビルドして実行するだけです。
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 がインストールされていない場合は、現在のインストール手順については、それぞれの Web サイトを参照してください。
ジャンケン、ジャンケン、トカゲスポックなど、あなたの心が望むものなら何でも、ルールに基づいたゲームを作成してください。
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 ライセンスに基づいてライセンスされています。