Crie jogos com regras baseadas em Rock Paper Scissors com qualquer combinação que desejar. As regras de validação garantirão que você esteja no caminho certo para criar um jogo válido.
Este projeto é principalmente um exercício de diversão para mim. Depois de ver um jogo de 101 movimentos no estilo RPS pensei que seria legal recriar esse jogo em PHP. Decidi, no entanto, que em vez disso criaria uma biblioteca. Talvez o jogo chegue em breve.
Ainda há muitas melhorias a fazer, mas acredito que, em geral, está a fazer o seu trabalho.
Existe um Dockerfile que utilizo para desenvolver a biblioteca. Eu apenas o uso para configurar rapidamente um ambiente PHP e, em seguida, baixar o PHPUnit e o Composer no contêiner. Também instalo o SSH para poder fazer depuração remota e testes de unidade remotos com PHPStorm. Faltam muitas coisas neste Dockerfile, incluindo a configuração do PHP para desenvolvimento (por exemplo, display_errors). Está nos meus TODOs.
Por enquanto, basta construir o contêiner e executá-lo.
docker build -t librps .
docker run -ti [-p 22] -v YOUR_PATH:CONTAINER_PATH librps
E então, quando você estiver dentro do contêiner, deverá iniciar o daemon ssh para poder usar as ferramentas de desenvolvimento remoto.
O primeiro passo, claro, é clonar o repositório. Então você deve atualizar as bibliotecas do compositor e então executar o testsuite.
git clone https://github.com/rvelhote/librockpaperscissor.git
cd librockpaperscissor
composer update
phpunit
Se você não possui o Composer ou o PHPUnit instalado, consulte seus respectivos sites para obter instruções de instalação atuais.
Crie jogos com regras baseadas em Rock Paper Scissors, Rock Paper Scissors Lizard Spock e tudo o que seu coração desejar.
Um homem incrível chamado David C. Lovelace criou os jogos RPS mais chocantes que já vi. Você pode conferir e criar um jogo super legal com eles. Essas regras são bastante complexas (bem, nem sempre)... se ao menos houvesse uma biblioteca PHP para ajudar as pessoas a implementar isso. Ah, espere.
Para detalhes de implementação você pode consultar o testsuite que mostrará alguns exemplos. De qualquer forma, aqui está a essência disso. Para o clássico jogo Rock Paper Scissors você precisa 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" ;
}
}
Você está convidado a sugerir melhorias para a biblioteca e contribuir :)
O código neste projeto está licenciado sob licença do MIT.