Buat game dengan aturan berdasarkan Rock Paper Scissors dengan kombinasi apa pun yang Anda inginkan. Aturan validasi akan memastikan bahwa Anda berada di jalur yang benar untuk membuat game yang valid.
Proyek ini sebagian besar merupakan latihan yang menyenangkan bagi saya. Setelah melihat game bergaya RPS 101 gerakan, saya pikir akan keren jika membuat ulang game tersebut dalam PHP. Namun, saya memutuskan untuk membuat perpustakaan. Mungkin permainannya akan segera hadir.
Masih banyak perbaikan yang harus dilakukan, namun saya yakin, secara umum, sistem ini sudah berfungsi dengan baik.
Ada Dockerfile yang saya gunakan untuk mengembangkan perpustakaan. Saya hanya menggunakannya untuk mengatur lingkungan PHP dengan cepat dan kemudian mengunduh PHPUnit dan Komposer ke dalam wadah. Saya juga menginstal SSH sehingga saya dapat melakukan debugging jarak jauh dan pengujian unit jarak jauh dengan PHPStorm. Dockerfile ini kehilangan banyak hal termasuk mengkonfigurasi PHP untuk pengembangan (misalnya display_errors). Itu ada di TODO saya.
Untuk saat ini, cukup buat container dan jalankan.
docker build -t librps .
docker run -ti [-p 22] -v YOUR_PATH:CONTAINER_PATH librps
Dan kemudian, saat Anda berada di dalam container, Anda harus memulai daemon ssh agar Anda dapat menggunakan alat pengembangan jarak jauh.
Langkah pertama tentu saja mengkloning repo tersebut. Maka Anda harus memperbarui perpustakaan komposer dan kemudian menjalankan testsuite.
git clone https://github.com/rvelhote/librockpaperscissor.git
cd librockpaperscissor
composer update
phpunit
Jika Anda belum menginstal Komposer atau PHPUnit, silakan merujuk ke situs web masing-masing untuk petunjuk instalasi saat ini.
Buat game dengan aturan berdasarkan Rock Paper Scissors, Rock Paper Scissors Lizard Spock dan apa pun yang diinginkan hati Anda.
Seorang pria luar biasa bernama David C. Lovelace menciptakan game RPS paling mengejutkan yang pernah saya lihat. Anda dapat memeriksanya dan membuat game yang sangat keren dengannya. Aturan-aturan ini cukup rumit (yah, tidak selalu)... andai saja ada perpustakaan PHP untuk membantu orang mengimplementasikan hal ini. Oh tunggu.
Untuk detail implementasi, Anda dapat merujuk ke testsuite yang akan menampilkan beberapa contoh. Bagaimanapun, inilah intinya. Untuk game Rock Paper Scissors klasik, Anda memerlukan:
// 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" ;
}
}
Anda dipersilakan untuk menyarankan perbaikan pada perpustakaan dan berkontribusi sendiri :)
Kode dalam proyek ini dilisensikan di bawah lisensi MIT.