Créez des jeux avec des règles basées sur Pierre Papier Ciseaux avec n'importe quelle combinaison que vous désirez. Les règles de validation garantiront que vous êtes sur la bonne voie pour créer un jeu valide.
Ce projet est avant tout un exercice amusant pour moi. Après avoir vu un jeu de style RPS à 101 coups, j'ai pensé que ce serait cool de recréer ce jeu en PHP. J'ai cependant décidé de créer une bibliothèque à la place. Peut-être que le jeu arrivera bientôt.
Il y a encore beaucoup d'améliorations à apporter mais je pense que, de manière générale, il fait son travail.
Il existe un Dockerfile que j'utilise pour développer la bibliothèque. Je l'utilise simplement pour configurer rapidement un environnement PHP, puis télécharger PHPUnit et Composer dans le conteneur. J'installe également SSH pour pouvoir effectuer du débogage et des tests unitaires à distance avec PHPStorm. Il manque beaucoup de choses dans ce Dockerfile, notamment la configuration de PHP pour le développement (par exemple display_errors). C'est sur mes TODO.
Pour l'instant, créez simplement le conteneur et exécutez-le.
docker build -t librps .
docker run -ti [-p 22] -v YOUR_PATH:CONTAINER_PATH librps
Et puis, lorsque vous êtes à l’intérieur du conteneur, vous devez démarrer le démon ssh pour pouvoir utiliser les outils de développement à distance.
La première étape consiste bien sûr à cloner le dépôt. Ensuite, vous devez mettre à jour les bibliothèques du compositeur, puis exécuter la suite de tests.
git clone https://github.com/rvelhote/librockpaperscissor.git
cd librockpaperscissor
composer update
phpunit
Si Composer ou PHPUnit n'est pas installé, veuillez vous référer à leurs sites Web respectifs pour obtenir les instructions d'installation actuelles.
Créez des jeux avec des règles basées sur Rock Paper Scissors, Rock Paper Scissors Lizard Spock et tout ce que votre cœur désire.
Un homme extraordinaire nommé David C. Lovelace a créé les jeux RPS les plus choquants que j'ai jamais vu. Vous pouvez les consulter et créer un jeu super cool avec eux. Ces règles sont assez complexes (enfin, pas toujours)... si seulement il existait une bibliothèque PHP pour aider les gens à implémenter cette chose. Oh attends.
Pour les détails de mise en œuvre, vous pouvez vous référer à la suite de tests qui montrera quelques exemples. Quoi qu'il en soit, voici l'essentiel. Pour le jeu classique Pierre Papier Ciseaux, vous avez besoin de :
// 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" ;
}
}
Vous êtes invités à suggérer des améliorations à la bibliothèque et à contribuer vous-même :)
Le code de ce projet est sous licence MIT.