قم بإنشاء ألعاب بقواعد تعتمد على Rock Paper Scissors مع أي مجموعة تريدها. ستضمن قواعد التحقق أنك تسير على الطريق الصحيح لإنشاء لعبة صالحة.
هذا المشروع هو في الغالب تمرين ممتع بالنسبة لي. بعد رؤية لعبة ذات 101 حركة بأسلوب RPS، اعتقدت أنه سيكون من الرائع إعادة إنشاء تلك اللعبة بلغة PHP. لكنني قررت أن أقوم بإنشاء مكتبة بدلاً من ذلك. ربما اللعبة سوف تأتي قريبا.
لا يزال هناك الكثير من التحسينات التي يتعين إجراؤها، لكنني أعتقد أنها تؤدي وظيفتها بشكل عام.
يوجد ملف Dockerfile أستخدمه لتطوير المكتبة. أنا فقط أستخدمه لإعداد بيئة PHP بسرعة ثم تنزيل PHPUnit وComposer في الحاوية. أقوم أيضًا بتثبيت SSH حتى أتمكن من إجراء تصحيح الأخطاء عن بعد واختبار الوحدة عن بعد باستخدام PHPStorm. يفتقد ملف Dockerfile هذا الكثير من الأشياء بما في ذلك تكوين PHP للتطوير (على سبيل المثال، أخطاء العرض). انها على TODOs بلدي.
في الوقت الحالي، ما عليك سوى بناء الحاوية وتشغيلها.
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 مثبتًا لديك، فيرجى الرجوع إلى مواقع الويب الخاصة بكل منهما للحصول على تعليمات التثبيت الحالية.
قم بإنشاء ألعاب ذات قاعدة قواعد على Rock Paper Scissors وRock Paper Scissors Lizard Spock وأي شيء يرغب فيه قلبك.
قام رجل مذهل يُدعى David C. Lovelace بإنشاء أكثر ألعاب RPS إثارة للصدمة التي رأيتها. يمكنك التحقق منها وإنشاء لعبة رائعة معهم. هذه القواعد معقدة للغاية (حسنًا، ليس دائمًا)... لو كانت هناك مكتبة PHP لمساعدة الأشخاص على تنفيذ هذا الشيء. اوه انتظر.
للحصول على تفاصيل التنفيذ، يمكنك الرجوع إلى مجموعة الاختبار التي ستعرض بعض الأمثلة. على أية حال، هنا جوهر الأمر. للعبة Rock Paper Scissors الكلاسيكية، تحتاج إلى:
// 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.