Cara Membuat Permainan Batu, Kertas, Gunting di Jawa (dengan Gambar)

Isi kandungan:

Cara Membuat Permainan Batu, Kertas, Gunting di Jawa (dengan Gambar)
Cara Membuat Permainan Batu, Kertas, Gunting di Jawa (dengan Gambar)

Video: Cara Membuat Permainan Batu, Kertas, Gunting di Jawa (dengan Gambar)

Video: Cara Membuat Permainan Batu, Kertas, Gunting di Jawa (dengan Gambar)
Video: Menambahkan Koleksi Texture Material di Aplikasi Sketchup 2024, Mungkin
Anonim

Rock, Paper, Scissors adalah permainan tangan yang dimainkan oleh dua orang. Kedua-dua orang akan mengatakan "batu, kertas, gunting" dan kemudian secara serentak membentuk salah satu daripada tiga objek (batu, kertas, atau gunting) dengan tangan terentang. Pemenang ditentukan oleh formasi tangan. Gunting mengalahkan kertas, kertas mengalahkan batu, dan gunting pemukul batu. Sekiranya kedua-dua pemain bermain formasi tangan yang sama, ia dianggap seri. Kami akan menulis permainan sederhana di Java untuk mensimulasikan Rock, Paper, Gunting di mana satu pemain adalah pengguna dan pemain lain adalah komputer.

Langkah-langkah

1585279 1 1
1585279 1 1

Langkah 1. Buat kelas utama dan namakannya

Batu kertas gunting

.

Ini akan menjadi kelas di mana kita akan menulis permainan. Anda boleh memilih untuk menamakannya seperti yang lain

Permainan

atau

Utama

. Tulis dalam deklarasi kaedah untuk pembina dan kaedah utama.

kelas awam RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

Langkah 2. Buat penghitungan untuk isyarat tangan (batu, kertas, atau gunting)

Kita boleh menggunakan tali untuk mewakili batu, kertas, atau gunting, tetapi penghitungan memungkinkan kita untuk menentukan pemalar kita yang bermaksud bahawa menggunakan pencacahan adalah reka bentuk yang lebih baik. Kami akan memanggil jenis enum kami

Bergerak

dengan nilai-nilai

ROCK

KERTAS

dan

PEMAKAI

enum peribadi Pindah {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Langkah 3. Buat dua kelas persendirian

Pengguna

dan

Komputer

.

Kelas-kelas ini akan mewakili pemain kami dalam permainan. Anda boleh memilih untuk menjadikan kelas ini umum. The

Pengguna

kelas akan menjadi kelas yang meminta pengguna sama ada batu, kertas, atau gunting, jadi kita perlu menulis a

getMove ()

kaedah. The

Komputer

kelas juga perlu mempunyai

getMove ()

kaedah supaya komputer juga dapat bergerak. Kami akan meletakkan placeholder dalam kaedah ini dan melaksanakannya kemudian. The

Pengguna

kelas akan memerlukan pembina yang menetapkan

Pengimbas

objek untuk diambil input pengguna. Kami akan meletakkan

Pengimbas

sebagai medan peribadi untuk pengguna dan kemudian memulakannya dalam konstruktor. Oleh kerana kita menggunakan

Pengimbas

kelas, kita perlu menulis pernyataan import untuknya di bahagian atas kod kami. The

Komputer

kelas tidak memerlukan pembina, jadi kita tidak perlu menulis satu; semasa kita memulakan

Komputer

objek, kita hanya akan memanggil pembina lalai. Inilah yang kami

Batu kertas gunting

kelas kelihatan seperti sekarang:

import java.util. Scanner; kelas awam RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} pengguna kelas peribadi {private Scanner inputScanner; Pengguna awam () {inputScanner = Pengimbas baru (System.in); } public Move getMove () {// TODO: Laksanakan kaedah ini return null; }} kelas peribadi Komputer {public Move getMove () {// TODO: Laksanakan kaedah ini return null; }} awam RockPaperScissors () {} umum kekosongan statik awam (String args) {}}

1585279 4 1
1585279 4 1

Langkah 4. Tuliskan

getMove ()

kaedah untuk

Komputer

kelas.

Kaedah ini akan mengembalikan rawak

Bergerak

. Kita boleh mendapatkan pelbagai

Bergerak

penghitungan dengan memanggil

nilai ()

kaedah:

Alih. Nilai ()

. Untuk memilih rawak

Bergerak

penghitungan dalam array nilai ini, kita perlu menghasilkan indeks rawak yang merupakan bilangan bulat antara 0 dan panjang array nilai kita. Untuk melakukan ini, kita boleh menggunakan

seterusnyaInt ()

kaedah

Secara rawak

kelas yang perlu kita import

java.util

. Setelah memperoleh indeks rawak, kita dapat mengembalikannya

Bergerak

indeks itu dari tatasusila nilai kami.

awam Move getMove () {Move bergerak = Move.values (); Rawak rawak = Rawak baru (); int index = random.nextInt (move.length); pergerakan kembali [indeks]; }

1585279 5 1
1585279 5 1

Langkah 5. Tuliskan

getMove ()

kaedah untuk

Pengguna

kelas.

Kaedah ini akan mengembalikan a

Bergerak

sesuai dengan apa yang pengguna masukkan. Kami mengharapkan pengguna menulis "rock", "paper", atau "gunting". Pertama, kita perlu meminta pengguna untuk memasukkan:

System.out.print ("Batu, kertas, atau gunting?")

. Kemudian gunakan

talian seterusnya ()

kaedah

Pengimbas

objek untuk mendapatkan input pengguna sebagai rentetan. Kita sekarang perlu memeriksa sama ada pengguna telah mengemukakan langkah yang sah, tetapi kita boleh bersikap lunak jika pengguna salah mengeja kata. Oleh itu, kami hanya akan memeriksa sama ada huruf pertama input pengguna sama ada "R" (untuk batu), "P" (untuk kertas), atau "S" (untuk gunting), dan kami tidak akan peduli dengan kes itu kerana pertama kita akan menggunakan

keUpperCase ()

kaedah

Tali

kelas untuk menjadikan rentetan input pengguna menjadi huruf besar. Sekiranya pengguna belum memasukkan input yang betul dari jarak jauh, kami akan meminta pengguna lagi. Kemudian, bergantung pada apa yang dimasukkan oleh pengguna, kami akan mengembalikan langkah yang sesuai.

awam Move getMove () {// Meminta pengguna System.out.print ("Batu, kertas, atau gunting?"); // Dapatkan input pengguna String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Pengguna telah memasukkan suis input yang sah (firstLetter) {case 'R': return Move. ROCK; kes 'P': return Move. PAPER; kes 'S': return Move. SCISSORS; }} // Pengguna belum memasukkan input yang sah. Prompt lagi. kembali getMove (); }

1585279 6
1585279 6

Langkah 6. Tuliskan a

bermain lagi()

kaedah untuk

Pengguna

kelas.

Pengguna semestinya dapat bermain permainan berulang kali. Untuk menentukan sama ada pengguna mahu bermain lagi, kita perlu menulis a

bermain lagi()

kaedah yang mengembalikan boolean memberitahu permainan sama ada pengguna telah bertekad untuk bermain lagi atau tidak. Dalam kaedah ini, kami menggunakan

Pengimbas

bahawa kita sebelum ini memulakan di konstruktor untuk mendapatkan "Ya" atau "Tidak" dari pengguna. Kami hanya akan memeriksa sama ada huruf pertama adalah 'Y' untuk menentukan sama ada pengguna mahu bermain lagi. Sebarang input lain bermaksud pengguna tidak mahu bermain lagi.

public boolean playAgain () {System.out.print ("Adakah anda mahu bermain lagi?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); mengembalikan penggunaInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

Langkah 7. Sambungkan

Pengguna

dan

Komputer

kelas bersama di

Batu kertas gunting

kelas.

Sekarang kita sudah selesai menulis

Pengguna

dan

Komputer

kelas, kita dapat memberi tumpuan untuk mengusahakan permainan sebenar kita. Buat medan peribadi untuk

Pengguna

dan

Komputer

kelas di

Batu kertas gunting

kelas. Kita perlu mengakses bidang ini untuk mengakses

getMove ()

kaedah semasa kita bermain permainan. Dalam pembina untuk

Batu kertas gunting

kelas, mulakan bidang ini. Kami juga perlu memantau skor dalam

skor pengguna

dan

skor komputer

medan, yang perlu kita mulakan sebagai 0 dalam konstruktor. Kita juga perlu mengawasi jumlah permainan, yang juga akan dimulakan sebagai 0.

pengguna Pengguna persendirian; komputer Komputer persendirian; Markah pengguna int peribadi; skor komputer int peribadi; nombor int peribadiOfGames; RockPaperScissors awam () {user = pengguna baru (); komputer = Komputer baru (); skor pengguna = 0; skor komputer = 0; numberOfGames = 0; }

1585279 8
1585279 8

Langkah 8. Panjangkan

Bergerak

enum untuk memasukkan kaedah yang memberitahu kita langkah mana yang menang dalam setiap kes.

Kita perlu menulis a

bandingkanPindah ()

kaedah yang mengembalikan 0 jika pergerakannya sama, 1 jika pergerakan semasa mengalahkan pergerakan yang lain, dan -1 jika pergerakan semasa kalah dengan pergerakan yang lain. Ini akan berguna untuk menentukan pemenang dalam permainan. Untuk melaksanakan kaedah ini, kami akan mengembalikan 0 terlebih dahulu jika pergerakannya sama dan oleh itu kami mempunyai kedudukan yang sama. Kemudian tulis pernyataan pertukaran untuk mengembalikan 1 atau -1.

enum peribadi Pindah {ROCK, KERTAS, SCISSORS; / ** * Bandingkan langkah ini dengan langkah lain untuk menentukan keputusan seri, kemenangan, atau * kekalahan. * * @param otherMove * pindah untuk dibandingkan dengan * @return 1 jika gerakan ini mengalahkan gerakan yang lain, -1 jika gerakan ini kalah dari * gerakan yang lain, 0 jika pergerakan ini mengikat * / public int membandingkanMoves (Move otherMove) {/ / Ikat jika (ini == otherMove) kembali 0; tukar (ini) {case ROCK: return (otherMove == SCISSORS? 1: -1); kes KERTAS: return (otherMove == ROCK? 1: -1); kes SCISSORS: return (otherMove == KERTAS? 1: -1); } // Tidak boleh sampai di sini kembali 0; }}

1585279 9
1585279 9

Langkah 9. Buat a

mula permainan()

kaedah dalam

Batu kertas gunting

kelas.

Kaedah ini akan menjadi permainan. Mulakan dengan meletakkan yang sederhana

Sistem.out.println

dalam kaedah.

publicGoid startGame () {System.out.println ("ROCK, KERTAS, SCISSORS!"); }

1585279 10
1585279 10

Langkah 10. Dapatkan pergerakan dari pengguna dan komputer

Di dalam

mula permainan()

kaedah, gunakan

getMove ()

kaedah dari

Pengguna

kelas dan

Komputer

kelas untuk mendapatkan pengguna dan pergerakan komputer.

Pindahkan userMove = user.getMove (); Pindahkan computerMove = computer.getMove (); System.out.println ("\ nAnda bermain" + userMove + "."); System.out.println ("Komputer dimainkan" + komputerMove + ". / N");

1585279 11
1585279 11

Langkah 11. Bandingkan kedua pergerakan dan tentukan sama ada pengguna menang atau komputer menang

Menggunakan

bandingkanPindah ()

kaedah dari

Bergerak

enum untuk menentukan sama ada pengguna menang atau tidak. Sekiranya pengguna menang, tambahkan skor pengguna dengan 1. Sekiranya pengguna kalah, tambahkan skor komputer dengan 1. Sekiranya ada seri, jangan menambah skor mana pun. Kemudian tambahkan bilangan permainan yang dimainkan oleh satu.

int membandingkanMoves = userMove.compareMoves (computerMove); tukar (bandingkanMoves) {kes 0: // Tie System.out.println ("Tie!"); rehat; kes 1: // Pengguna menang System.out.println (userMove + "beats" + computerMove + ". Anda menang!"); skor pengguna ++; rehat; kes -1: // Komputer menang System.out.println (computerMove + "beats" + userMove + ". Anda kalah."); skor komputer ++; rehat; } numberOfGames ++;

1585279 12
1585279 12

Langkah 12. Tanya sama ada pengguna mahu bermain lagi

Sekiranya pengguna mahu bermain lagi, hubungi

mula permainan()

lagi. Jika tidak, hubungi

printGameStats ()

yang akan mencetak statistik permainan. Kami akan menulis kaedah ini pada langkah seterusnya.

jika (user.playAgain ()) {System.out.println (); mula permainan(); } lain {printGameStats (); }

1585279 13
1585279 13

Langkah 13. Tuliskan

printGameStats ()

kaedah.

Kaedah ini akan memaparkan statistik permainan: jumlah kemenangan, jumlah kekalahan, jumlah pertandingan, jumlah permainan yang dimainkan, dan peratusan permainan yang dimenangi oleh pengguna. Peratusan permainan yang dimenangi dikira dengan (# menang + (# ikatan / 2)) / (# permainan dimainkan). Kaedah ini menggunakan

Sistem.out.printf

untuk mencetak teks berformat.

print kosong permainan peribadi () {int win = userScore; kerugian int = skor komputer; int ties = numberOfGames - userScore - computerScore; peratusan bergandaWon = (menang + ((berganda) ikatan) / 2) / numberOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Cetak tajuk System.out.printf ("|% 6s |% 6s |% 6s |% 12s |% 14s | / n", "MENANG", "KEHILANGAN", "HUBUNGAN", "PERMAINAN BERMAIN", "PERATUS MENANG"); // Line System.out.print ("|"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (16); System.out.print ("+"); printDashes (18); System.out.println ("|"); // Nilai cetak System.out.printf ("|% 6d |% 6d |% 6d |% 12d |% 13.2f %% | / n", kemenangan, kerugian, ikatan, numberOfGames, peratusanWon * 100); // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); }

1585279 14
1585279 14

Langkah 14. Mulakan permainan di kelas utama

Di kelas utama, mulakan contoh

Batu kertas gunting

kelas dan panggil

mula permainan()

kaedah.

public static void main (String args) {RockPaperScissors game = RockPaperScissors baru (); game.startGame (); }

1585279 15
1585279 15

Langkah 15. Uji permainan anda

Sekarang kita telah melalui semua usaha menulis permainan Rock, Paper, Scissors, inilah masanya untuk menyusun dan menguji semuanya!

Contoh Program

import java.util. Rawak; import java.util. Scanner; kelas awam RockPaperScissors {pengguna Pengguna persendirian; komputer Komputer persendirian; Markah pengguna int peribadi; Skor komputer int peribadi; nombor int peribadiOfGames; enum peribadi Pindah {ROCK, KERTAS, SCISSORS; / ** * Bandingkan langkah ini dengan langkah lain untuk menentukan keputusan seri, kemenangan, atau * kekalahan. * * @param otherMove * pindah untuk dibandingkan dengan * @return 1 jika gerakan ini mengalahkan gerakan yang lain, -1 jika gerakan ini kalah dari * gerakan yang lain, 0 jika pergerakan ini mengikat * / public int membandingkanMoves (Move otherMove) {/ / Ikat jika (ini == otherMove) kembali 0; tukar (ini) {case ROCK: return (otherMove == SCISSORS? 1: -1); kes KERTAS: return (otherMove == ROCK? 1: -1); kes SCISSORS: return (otherMove == KERTAS? 1: -1); } // Tidak boleh sampai di sini kembali 0; }} pengguna kelas peribadi {private Scanner inputScanner; Pengguna awam () {inputScanner = Pengimbas baru (System.in); } umum Move getMove () {// Meminta pengguna System.out.print ("Batu, kertas, atau gunting?"); // Dapatkan input pengguna String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Pengguna telah memasukkan suis input yang sah (firstLetter) {case 'R': return Move. ROCK; kes 'P': return Move. PAPER; kes 'S': return Move. SCISSORS; }} // Pengguna belum memasukkan input yang sah. Prompt lagi. kembali getMove (); } main boolean awamAgain () {System.out.print ("Adakah anda mahu bermain lagi?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); mengembalikan penggunaInput.charAt (0) == 'Y'; }} kelas peribadi Komputer {public Move getMove () {Move move = Move.values (); Rawak rawak = Rawak baru (); int index = random.nextInt (move.length); pergerakan kembali [indeks]; }} RockPaperScissors awam () {user = pengguna baru (); komputer = Komputer baru (); skor pengguna = 0; skor komputer = 0; numberOfGames = 0; } awam batal startGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); // Dapatkan bergerak Move userMove = user.getMove (); Pindahkan computerMove = computer.getMove (); System.out.println ("\ nAnda bermain" + userMove + "."); System.out.println ("Komputer dimainkan" + komputerMove + ". / N"); // Bandingkan pergerakan dan tentukan pemenang int membandingkanMoves = userMove.compareMoves (computerMove); tukar (bandingkanMoves) {kes 0: // Tie System.out.println ("Tie!"); rehat; kes 1: // Pengguna menang System.out.println (userMove + "beats" + computerMove + ". Anda menang!"); skor pengguna ++; rehat; kes -1: // Komputer menang System.out.println (computerMove + "beats" + userMove + ". Anda kalah."); skor komputer ++; rehat; } numberOfGames ++; // Minta pengguna bermain semula jika (user.playAgain ()) {System.out.println (); mula permainan(); } lain {printGameStats (); }} / ** * Mencetak statistik permainan. Mengira ikatan sebagai 1/2 kemenangan dalam * peratusan menang. * / private void printGameStats () {int menang = userScore; kerugian int = skor komputer; int ties = numberOfGames - userScore - computerScore; peratusan bergandaWon = (menang + ((berganda) ikatan) / 2) / numberOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Cetak tajuk System.out.printf ("|% 6s |% 6s |% 6s |% 12s |% 14s | / n", "MENANG", "KEHILANGAN", "HUBUNGAN", "PERMAINAN BERMAIN", "PERATUS MENANG"); // Line System.out.print ("|"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (16); System.out.print ("+"); printDashes (18); System.out.println ("|"); // Nilai cetak System.out.printf ("|% 6d |% 6d |% 6d |% 12d |% 13.2f %% | / n", kemenangan, kerugian, ikatan, numberOfGames, peratusanWon * 100); // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); } printDashes void peribadi (int numberOfDashes) {untuk (int i = 0; i <numberOfDashes; i ++) {System.out.print ("-"); }} umum kekosongan statik awam (String args) {RockPaperScissors game = RockPaperScissors baru (); game.startGame (); }}

Disyorkan: