Erstellen Sie Spiele mit Regeln, die auf „Stein, Papier, Schere“ basieren, und in jeder gewünschten Kombination. Validierungsregeln stellen sicher, dass Sie auf dem richtigen Weg sind, ein gültiges Spiel zu erstellen.
Dieses Projekt ist für mich vor allem eine Übung zum Spaß. Nachdem ich ein RPS-Spiel mit 101 Zügen gesehen hatte, dachte ich, es wäre cool, dieses Spiel in PHP nachzubilden. Ich beschloss jedoch, stattdessen eine Bibliothek zu erstellen. Vielleicht kommt das Spiel bald.
Es gibt noch viel zu verbessern, aber ich glaube, dass es im Großen und Ganzen seinen Zweck erfüllt.
Es gibt eine Docker-Datei, die ich zum Entwickeln der Bibliothek verwende. Ich verwende es einfach, um schnell eine PHP-Umgebung einzurichten und dann PHPUnit und Composer in den Container herunterzuladen. Ich installiere auch SSH, damit ich mit PHPStorm Remote-Debugging und Remote-Unit-Tests durchführen kann. In dieser Docker-Datei fehlen viele Dinge, einschließlich der Konfiguration von PHP für die Entwicklung (z. B. display_errors). Es steht auf meinen TODOs.
Erstellen Sie zunächst einfach den Container und führen Sie ihn aus.
docker build -t librps .
docker run -ti [-p 22] -v YOUR_PATH:CONTAINER_PATH librps
Und wenn Sie sich dann im Container befinden, müssen Sie den SSH-Daemon starten, damit Sie die Remote-Entwicklungstools verwenden können.
Der erste Schritt besteht natürlich darin, das Repo zu klonen. Anschließend sollten Sie die Composer-Bibliotheken aktualisieren und anschließend die Testsuite ausführen.
git clone https://github.com/rvelhote/librockpaperscissor.git
cd librockpaperscissor
composer update
phpunit
Wenn Sie Composer oder PHPUnit nicht installiert haben, finden Sie aktuelle Installationsanweisungen auf den jeweiligen Websites.
Erstellen Sie Spiele mit Regeln, die auf Stein-Papier-Schere, Stein-Papier-Schere, Lizard Spock und allem, was Ihr Herz begehrt, basieren.
Ein erstaunlicher Mann namens David C. Lovelace hat die schockierendsten RPS-Spiele entwickelt, die ich je gesehen habe. Sie können sie ausprobieren und ein supercooles Spiel damit erstellen. Diese Regeln sind ziemlich komplex (na ja, nicht immer) ... wenn es nur eine PHP-Bibliothek gäbe, die den Leuten bei der Implementierung dieser Sache hilft. Oh, warte.
Einzelheiten zur Implementierung finden Sie in der Testsuite, die einige Beispiele zeigt. Wie auch immer, hier ist das Wesentliche. Für das klassische Rock Paper Scissors-Spiel benötigen Sie:
// 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" ;
}
}
Gerne können Sie Verbesserungsvorschläge für die Bibliothek machen und sich selbst einbringen :)
Der Code in diesem Projekt ist unter MIT-Lizenz lizenziert.