Cara Membuat Game Batu, Kertas, Gunting di Java (Dengan Gambar)

Daftar Isi:

Cara Membuat Game Batu, Kertas, Gunting di Java (Dengan Gambar)
Cara Membuat Game Batu, Kertas, Gunting di Java (Dengan Gambar)

Video: Cara Membuat Game Batu, Kertas, Gunting di Java (Dengan Gambar)

Video: Cara Membuat Game Batu, Kertas, Gunting di Java (Dengan Gambar)
Video: Sketchup Tutorial - Menambah Texture Material Sendiri Sesuai keinginan 2024, Mungkin
Anonim

Rock, Paper, Scissors adalah permainan tangan yang dimainkan oleh dua orang. Kedua orang akan mengatakan "batu, kertas, gunting" dan kemudian secara bersamaan membentuk salah satu dari tiga benda (batu, kertas, atau gunting) dengan tangan terentang. Pemenang ditentukan oleh formasi tangan. Gunting mengalahkan kertas, kertas mengalahkan batu, dan batu mengalahkan gunting. Jika kedua pemain memainkan formasi tangan yang sama, itu dianggap seri. Kami akan menulis permainan sederhana di Jawa untuk mensimulasikan Batu, Kertas, Gunting di mana satu pemain adalah pengguna dan pemain lainnya adalah komputer.

Langkah

1585279 1 1
1585279 1 1

Langkah 1. Buat kelas utama dan beri nama

Batu gunting kertas

.

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

Permainan

atau

Utama

. Tulis dalam deklarasi metode untuk konstruktor dan metode utama.

public class RockPaperScissors { public RockPaperScissors() { } public static void main(String args) { } }

1585279 2 1
1585279 2 1

Langkah 2. Buat enumerasi untuk gerakan tangan (batu, kertas, atau gunting)

Kita bisa menggunakan string untuk mewakili batu, kertas, atau gunting, tapi enumerasi memungkinkan kita untuk menentukan konstanta kita yang berarti bahwa menggunakan enumerasi adalah desain yang lebih baik. Kami akan memanggil tipe enum kami

Pindah

dengan nilai-nilai

BATU

KERTAS

dan

GUNTING

enum pribadi Pindahkan { BATU, KERTAS, GUNTING }

1585279 3 1
1585279 3 1

Langkah 3. Buat dua kelas privat

Pengguna

dan

Komputer

.

Kelas-kelas ini akan mewakili pemain kami dalam permainan. Anda dapat memilih untuk menjadikan kelas ini publik. NS

Pengguna

kelas akan menjadi kelas yang meminta pengguna untuk memasukkan batu, kertas, atau gunting, jadi kita perlu menulis

getMove()

metode. NS

Komputer

kelas juga perlu memiliki

getMove()

metode agar komputer juga dapat bergerak. Kami akan menempatkan placeholder dalam metode ini dan menerapkannya nanti. NS

Pengguna

kelas akan membutuhkan konstruktor yang mengatur

Pemindai

objek untuk menerima input pengguna. Kami akan menempatkan

Pemindai

sebagai bidang pribadi untuk pengguna dan kemudian memulainya di konstruktor. Karena kita menggunakan

Pemindai

kelas, kita perlu menulis pernyataan impor untuk itu di bagian atas kode kita. NS

Komputer

kelas tidak memerlukan konstruktor, jadi kita tidak perlu menulisnya; ketika kita memulai

Komputer

objek, kita hanya akan memanggil konstruktor default. Inilah yang kami

Batu gunting kertas

kelas terlihat seperti sekarang:

impor java.util. Scanner; public class RockPaperScissors { private enum Pindahkan { ROCK, PAPER, GUNTING } private class Pengguna { private Scanner inputScanner; Pengguna publik() { inputScanner = Pemindai baru(System.in); } public Pindahkan getMove() { // TODO: Implementasikan metode ini return null; } } private class Komputer { public Pindahkan getMove() { // TODO: Implementasikan metode ini return null; } } public RockPaperScissors() { } public static void main(String args) { } }

1585279 4 1
1585279 4 1

Langkah 4. Tulis

getMove()

metode untuk

Komputer

kelas.

Metode ini akan mengembalikan secara acak

Pindah

. Kita bisa mendapatkan array dari

Pindah

enumerasi dengan memanggil

nilai()

metode:

Pindahkan.nilai()

. Untuk memilih secara acak

Pindah

enumerasi dalam array nilai ini, kita perlu menghasilkan indeks acak yang merupakan bilangan bulat antara 0 dan panjang array nilai kita. Untuk melakukan ini, kita dapat menggunakan

berikutnyaInt()

metode

Acak

kelas yang perlu kita impor

java.util

. Setelah kami mendapatkan indeks acak, kami dapat mengembalikan

Pindah

indeks itu dari larik nilai kita.

public Pindahkan getMove() { Pindahkan gerakan = Pindahkan.nilai(); Acak acak = Acak baru(); int indeks = random.nextInt(bergerak.panjang); kembali bergerak[indeks]; }

1585279 5 1
1585279 5 1

Langkah 5. Tulis

getMove()

metode untuk

Pengguna

kelas.

Metode ini akan mengembalikan

Pindah

sesuai dengan apa yang dimasukkan pengguna. Kami mengharapkan pengguna untuk menulis "batu", "kertas", atau "gunting". Pertama, kita perlu meminta pengguna untuk memasukkan:

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

. Kemudian gunakan

baris berikutnya()

metode

Pemindai

objek untuk mendapatkan input pengguna sebagai string. Kami sekarang perlu memeriksa apakah pengguna telah mengirimkan langkah yang valid, tetapi kami dapat bersikap lunak jika pengguna salah mengeja kata. Jadi kami hanya akan memeriksa apakah huruf pertama dari input pengguna adalah "R" (untuk batu), "P" (untuk kertas), atau "S" (untuk gunting), dan kami tidak akan peduli dengan kasusnya karena pertama kita akan menggunakan

toUpperCase()

metode

Rangkaian

class untuk membuat string input pengguna semua huruf besar. Jika pengguna belum memasukkan input yang benar dari jarak jauh, kami akan meminta pengguna lagi. Kemudian, tergantung pada apa yang dimasukkan pengguna, kami akan mengembalikan langkah yang sesuai.

public 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 input switch yang valid (firstLetter) { case 'R': return Move. ROCK; case 'P': kembalikan Move. PAPER; case 'S': kembalikan Move. SCISSORS; } } // Pengguna belum memasukkan input yang valid. Minta lagi. kembali getMove(); }

1585279 6
1585279 6

Langkah 6. Tulis a

Main lagi()

metode untuk

Pengguna

kelas.

Pengguna harus dapat memainkan game berulang kali. Untuk menentukan apakah pengguna ingin bermain lagi, kita perlu menulis

Main lagi()

metode yang mengembalikan boolean yang memberi tahu game apakah pengguna telah memutuskan untuk bermain lagi atau tidak. Dalam metode ini, kami menggunakan

Pemindai

yang sebelumnya telah kita mulai di konstruktor untuk mendapatkan "Ya" atau "Tidak" dari pengguna. Kami hanya akan memeriksa apakah huruf pertama adalah 'Y' untuk menentukan apakah pengguna ingin bermain lagi. Masukan lain apa pun akan berarti bahwa pengguna tidak ingin bermain lagi.

public boolean playAgain() { System.out.print("Apakah Anda ingin bermain lagi? "); String userInput = inputScanner.nextLine(); userInput = userInput.toUpperCase(); kembalikan userInput.charAt(0) == 'Y'; }

1585279 7
1585279 7

Langkah 7. Hubungkan

Pengguna

dan

Komputer

kelas bersama di

Batu gunting kertas

kelas.

Sekarang kita telah selesai menulis

Pengguna

dan

Komputer

kelas, kita bisa fokus mengerjakan game kita yang sebenarnya. Buat bidang pribadi untuk

Pengguna

dan

Komputer

kelas di

Batu gunting kertas

kelas. Kami perlu mengakses bidang ini untuk mengakses

getMove()

metode ketika kita sedang bermain game. Dalam konstruktor untuk

Batu gunting kertas

kelas, memulai bidang ini. Kami juga perlu melacak skor di

skor pengguna

dan

komputerSkor

bidang, yang perlu kita mulai sebagai 0 di konstruktor. Kami juga perlu melacak jumlah permainan, yang juga akan menjadi bidang yang dimulai sebagai 0.

pengguna Pengguna pribadi; komputer Komputer pribadi; pribadi int userScore; komputer int pribadiScore; private int numberOfGames; public RockPaperScissors() { pengguna = Pengguna baru(); komputer = komputer baru(); skor pengguna = 0; komputerScore = 0; jumlahPermainan = 0; }

1585279 8
1585279 8

Langkah 8. Perluas

Pindah

enum untuk menyertakan metode yang memberi tahu kita langkah mana yang menang dalam setiap kasus.

Kita perlu menulis

membandingkanMoves()

metode yang mengembalikan 0 jika gerakannya sama, 1 jika gerakan saat ini mengalahkan gerakan lainnya, dan -1 jika gerakan saat ini kalah dengan gerakan lainnya. Ini akan berguna untuk menentukan pemenang dalam permainan. Untuk menerapkan metode ini, pertama-tama kita akan mengembalikan 0 jika gerakannya sama dan oleh karena itu kita memiliki seri. Kemudian tulis pernyataan switch untuk mengembalikan 1 atau -1.

enum pribadi Pindahkan { BATU, KERTAS, GUNTING; /** * Membandingkan langkah ini dengan langkah lain untuk menentukan seri, menang, atau * kalah. * * @param otherMove * move to compare to * @return 1 jika move ini mengalahkan move lain, -1 jika move ini kalah dari * move lain, 0 jika move ini tie */ public int compareMoves(Move otherMove) { / / Tie if (this == otherMove) mengembalikan 0; switch (ini) { case ROCK: return (otherMove == GUNTING ? 1: -1); case PAPER: return (otherMove == ROCK ? 1: -1); kasus GUNTING: kembali (otherMove == PAPER ? 1: -1); } // Seharusnya tidak pernah sampai di sini return 0; } }

1585279 9
1585279 9

Langkah 9. Buat a

memulai permainan()

metode dalam

Batu gunting kertas

kelas.

Metode ini akan menjadi permainan. Mulailah dengan sederhana

System.out.println

dalam metode.

public void startGame() { System.out.println("BATU, KERTAS, GUNTING!"); }

1585279 10
1585279 10

Langkah 10. Dapatkan gerakan dari pengguna dan komputer

Dalam

memulai permainan()

metode, gunakan

getMove()

metode dari

Pengguna

kelas dan

Komputer

kelas untuk mendapatkan pengguna dan komputer bergerak.

Pindahkan userMove = pengguna.getMove(); Pindahkan computerMove = computer.getMove(); System.out.println("\nAnda memainkan " + userMove + "."); System.out.println("Komputer diputar " + komputerMove + ".\n");

1585279 11
1585279 11

Langkah 11. Bandingkan kedua gerakan dan tentukan apakah pengguna menang atau komputer menang

Menggunakan

membandingkanMoves()

metode dari

Pindah

enum untuk menentukan apakah pengguna menang atau tidak. Jika pengguna menang, tambah skor pengguna sebesar 1. Jika pengguna kalah, tambah skor komputer sebesar 1. Jika ada seri, jangan menambah skor apa pun. Kemudian tambahkan jumlah game yang dimainkan oleh satu.

int compareMoves = userMove.compareMoves(computerMove); switch (bandingkanMoves) { case 0: // Tie System.out.println("Tie!"); merusak; kasus 1: // Pengguna memenangkan System.out.println(userMove + " mengalahkan " + computerMove + ". Anda menang!"); skor pengguna++; merusak; case -1: // Komputer menang System.out.println(computerMove + " mengalahkan " + userMove + ". Anda kalah."); komputerScore++; merusak; } nomorPermainan++;

1585279 12
1585279 12

Langkah 12. Tanyakan apakah pengguna ingin bermain lagi

Jika pengguna ingin bermain lagi, hubungi

memulai permainan()

lagi. Jika tidak, hubungi

cetakGameStats()

yang akan mencetak statistik permainan. Kami akan menulis metode ini di langkah berikutnya.

if (user.playAgain()) { System.out.println(); memulai permainan(); } else { printGameStats(); }

1585279 13
1585279 13

Langkah 13. Tulis

cetakGameStats()

metode.

Metode ini akan menampilkan statistik permainan: jumlah kemenangan, jumlah kekalahan, jumlah seri, jumlah permainan yang dimainkan, dan persentase permainan yang dimenangkan oleh pengguna. Persentase permainan yang dimenangkan dihitung dengan (# kemenangan + (# seri/2))/(# permainan yang dimainkan). Metode ini menggunakan

System.out.printf

untuk mencetak teks berformat.

private void printGameStats() { int menang = userScore; int kerugian = computerScore; int ties = numberOfGames - userScore - computerScore; persentase ganda Menang = (menang + ((ganda) seri) / 2) / jumlahGame; // Baris System.out.print("+"); printDash(68); System.out.println("+"); // Cetak judul System.out.printf("| %6s | %6s | %6s | %12s | %14s |\n", "WINS", "LOSSES", "TIES", "GAMES PLAYED", "PERCENTAGE WON"); // Baris System.out.print("|"); printDash(10); System.out.print("+"); printDash(10); System.out.print("+"); printDash(10); System.out.print("+"); printDash(16); System.out.print("+"); printDash(18); System.out.println("|"); // Cetak nilai System.out.printf("| %6d | %6d | %6d | %12d | %13.2f%% |\n", menang, kalah, seri, jumlahGame, persentaseMenang * 100); // Baris System.out.print("+"); printDash(68); System.out.println("+"); }

1585279 14
1585279 14

Langkah 14. Mulai permainan di kelas utama

Di kelas utama, inisialisasi instance dari

Batu gunting kertas

kelas dan panggil

memulai permainan()

metode.

public static void main(String args) { Game RockPaperScissors = new RockPaperScissors(); permainan.startGame(); }

1585279 15
1585279 15

Langkah 15. Uji permainan Anda

Sekarang setelah kita melalui semua upaya untuk menulis game Batu, Kertas, Gunting, inilah saatnya untuk menyusun dan menguji semuanya!

Contoh Program

impor java.util. Random; impor java.util. Scanner; RockPaperScissors kelas publik { pengguna Pengguna pribadi; komputer Komputer pribadi; pribadi int userScore; komputer int pribadiScore; private int numberOfGames; enum pribadi Pindahkan { BATU, KERTAS, GUNTING; /** * Membandingkan langkah ini dengan langkah lain untuk menentukan seri, menang, atau * kalah. * * @param otherMove * move to compare to * @return 1 jika move ini mengalahkan move lainnya, -1 jika move ini kalah dari * move lain, 0 jika move ini tie */ public int compareMoves(Move otherMove) { / / Tie if (this == otherMove) mengembalikan 0; switch (ini) { case ROCK: return (otherMove == GUNTING ? 1: -1); case PAPER: return (otherMove == ROCK ? 1: -1); kasus GUNTING: kembali (otherMove == PAPER ? 1: -1); } // Seharusnya tidak pernah sampai di sini return 0; } } kelas pribadi Pengguna { private Scanner inputScanner; Pengguna publik() { inputScanner = Pemindai baru(System.in); } public Pindahkan getMove() { // Perintahkan 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 input switch yang valid (firstLetter) { case 'R': return Move. ROCK; case 'P': kembalikan Move. PAPER; case 'S': kembalikan Move. SCISSORS; } } // Pengguna belum memasukkan input yang valid. Minta lagi. kembali getMove(); } public boolean playAgain() { System.out.print("Apakah Anda ingin bermain lagi? "); String userInput = inputScanner.nextLine(); userInput = userInput.toUpperCase(); kembalikan userInput.charAt(0) == 'Y'; } } private class Komputer { public Pindahkan getMove() { Pindahkan gerakan = Pindah.nilai(); Acak acak = Acak baru(); int indeks = random.nextInt(bergerak.panjang); kembali bergerak[indeks]; } } public RockPaperScissors() { pengguna = Pengguna baru(); komputer = komputer baru(); skor pengguna = 0; komputerScore = 0; jumlahPermainan = 0; } public void startGame() { System.out.println("BATU, KERTAS, GUNTING!"); // Dapatkan gerakan Pindahkan userMove = user.getMove(); Pindahkan computerMove = computer.getMove(); System.out.println("\nAnda memainkan " + userMove + "."); System.out.println("Komputer diputar " + komputerMove + ".\n"); // Bandingkan gerakan dan tentukan pemenangnya int compareMoves = userMove.compareMoves(computerMove); switch (bandingkanMoves) { case 0: // Tie System.out.println("Tie!"); merusak; kasus 1: // Pengguna memenangkan System.out.println(userMove + " mengalahkan " + computerMove + ". Anda menang!"); skor pengguna++; merusak; case -1: // Komputer menang System.out.println(computerMove + " mengalahkan " + userMove + ". Anda kalah."); komputerScore++; merusak; } nomorPermainan++; // Minta pengguna untuk bermain lagi if (user.playAgain()) { System.out.println(); memulai permainan(); } else { printGameStats(); } } /** * Mencetak statistik permainan. Menghitung ikatan sebagai 1/2 kemenangan dalam * persentase menang. */ private void printGameStats() { int wins = userScore; int kerugian = computerScore; int ties = numberOfGames - userScore - computerScore; persentase ganda Menang = (menang + ((ganda) seri) / 2) / jumlahGame; // Baris System.out.print("+"); printDash(68); System.out.println("+"); // Cetak judul System.out.printf("| %6s | %6s | %6s | %12s | %14s |\n", "WINS", "LOSSES", "TIES", "GAMES PLAYED", "PERCENTAGE WON"); // Baris System.out.print("|"); printDash(10); System.out.print("+"); printDash(10); System.out.print("+"); printDash(10); System.out.print("+"); printDash(16); System.out.print("+"); printDash(18); System.out.println("|"); // Cetak nilai System.out.printf("| %6d | %6d | %6d | %12d | %13.2f%% |\n", menang, kalah, seri, jumlahGame, persentaseMenang * 100); // Baris System.out.print("+"); printDash(68); System.out.println("+"); } private void printDash(int numberOfDash) { for (int i = 0; i < numberOfDash; i++) { System.out.print("-"); } } public static void main(String args) { Game RockPaperScissors = new RockPaperScissors(); game.startGame(); } }

Direkomendasikan: