Crea juegos con reglas basadas en Piedra, Papel y Tijera con cualquier combinación que desees. Las reglas de validación asegurarán que estés en el camino correcto para crear un juego válido.
Este proyecto es principalmente un ejercicio de diversión para mí. Después de ver un juego estilo RPS de 101 movimientos, pensé que sería genial recrear ese juego en PHP. Sin embargo, decidí crear una biblioteca. Quizás el juego llegue pronto.
Aún quedan muchas mejoras por hacer pero creo que, en general, está haciendo su trabajo.
Hay un Dockerfile que utilizo para desarrollar la biblioteca. Solo lo uso para configurar rápidamente un entorno PHP y luego descargar PHPUnit y Composer en el contenedor. También instalo SSH para poder realizar depuración remota y pruebas unitarias remotas con PHPStorm. A este Dockerfile le faltan muchas cosas, incluida la configuración de PHP para el desarrollo (por ejemplo, display_errors). Está en mis TODO.
Por ahora, simplemente construya el contenedor y ejecútelo.
docker build -t librps .
docker run -ti [-p 22] -v YOUR_PATH:CONTAINER_PATH librps
Y luego, cuando esté dentro del contenedor, debe iniciar el demonio ssh para poder usar las herramientas de desarrollo remoto.
El primer paso, por supuesto, es clonar el repositorio. Luego deberías actualizar las bibliotecas del compositor y luego ejecutar el conjunto de pruebas.
git clone https://github.com/rvelhote/librockpaperscissor.git
cd librockpaperscissor
composer update
phpunit
Si no tiene instalado Composer o PHPUnit, consulte sus respectivos sitios web para obtener instrucciones de instalación actuales.
Crea juegos con reglas basadas en Piedra, Papel o Tijera, Piedra, Papel o Tijera, Lizard Spock y lo que tu corazón desee.
Un hombre asombroso llamado David C. Lovelace creó los juegos de RPS más impactantes que he visto. Puedes verlos y crear un juego genial con ellos. Estas reglas son bastante complejas (bueno, no siempre)... si tan solo hubiera una biblioteca PHP para ayudar a las personas a implementar esto. Ah, espera.
Para obtener detalles de implementación, puede consultar el conjunto de pruebas que mostrará algunos ejemplos. De todos modos, aquí está la esencia del asunto. Para el clásico juego Piedra, Papel o Tijera necesitas:
// 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" ;
}
}
Le invitamos a sugerir mejoras a la biblioteca y contribuir usted mismo :)
El código de este proyecto tiene la licencia MIT.