สร้างเกมที่มีกฎเกณฑ์ตาม Rock Paper Scissors ด้วยการผสมผสานตามที่คุณต้องการ กฎการตรวจสอบจะช่วยให้แน่ใจว่าคุณมาถูกทางแล้วในการสร้างเกมที่ถูกต้อง
โปรเจ็กต์นี้ส่วนใหญ่เป็นแบบฝึกหัดที่สนุกสนานสำหรับฉัน หลังจากที่ได้เห็นเกมสไตล์ RPS แบบ 101 การเคลื่อนไหว ฉันคิดว่ามันคงเจ๋งมากถ้าจะสร้างเกมนั้นขึ้นมาใหม่ใน PHP อย่างไรก็ตาม ฉันตัดสินใจว่าจะสร้างห้องสมุดแทน บางทีเกมจะมาเร็ว ๆ นี้
ยังมีการปรับปรุงอีกมากมายที่ต้องทำ แต่ฉันเชื่อว่าโดยทั่วไปแล้วมันทำงานได้ดี
มี Dockerfile ที่ผมใช้พัฒนาไลบรารีครับ ฉันแค่ใช้มันเพื่อตั้งค่าสภาพแวดล้อม PHP อย่างรวดเร็ว จากนั้นดาวน์โหลด PHPUnit และ Composer ลงในคอนเทนเนอร์ ฉันยังติดตั้ง SSH ดังนั้นฉันจึงสามารถทำการดีบักระยะไกลและทดสอบหน่วยระยะไกลด้วย PHPStorm ได้ Dockerfile นี้ขาดหายไปหลายอย่าง รวมถึงการกำหนดค่า PHP เพื่อการพัฒนา (เช่น display_errors) มันอยู่ในสิ่งที่ต้องทำของฉัน
สำหรับตอนนี้ เพียงแค่สร้างคอนเทนเนอร์และรันมัน
docker build -t librps .
docker run -ti [-p 22] -v YOUR_PATH:CONTAINER_PATH librps
จากนั้นเมื่อคุณอยู่ภายในคอนเทนเนอร์ คุณจะต้องเริ่มต้น ssh daemon เพื่อให้คุณสามารถใช้เครื่องมือการพัฒนาระยะไกลได้
ขั้นตอนแรกของหลักสูตรคือการโคลน repo จากนั้นคุณควรอัปเดตไลบรารีผู้แต่งแล้วเรียกใช้ชุดทดสอบ
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