Создавайте игры с правилами, основанными на «Камень, ножницы, бумага», с любой комбинацией по вашему желанию. Правила проверки гарантируют, что вы находитесь на правильном пути к созданию действительной игры.
Этот проект для меня в основном развлечение. Увидев игру в стиле RPS на 101 ход, я подумал, что было бы здорово воссоздать эту игру на PHP. Однако я решил, что вместо этого создам библиотеку. Возможно, игра скоро выйдет.
Предстоит еще много улучшений, но я считаю, что в целом он выполняет свою работу.
Существует Dockerfile, который я использую для разработки библиотеки. Я просто использую его для быстрой настройки среды PHP, а затем загружаю PHPUnit и Composer в контейнер. Я также устанавливаю SSH, чтобы иметь возможность выполнять удаленную отладку и удаленное модульное тестирование с помощью PHPStorm. В этом 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, обратитесь к соответствующим веб-сайтам за текущими инструкциями по установке.
Создавайте игры с правилами, основанными на «Камень, ножницы, бумага», «Камень, ножницы, бумага», «Ящерица Спок» и всём, что пожелает ваша душа.
Удивительный человек по имени Дэвид К. Лавлейс создал самые шокирующие 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.