Cách tạo trò chơi Rock, Paper, Scissors trong Java (có Hình ảnh)

Mục lục:

Cách tạo trò chơi Rock, Paper, Scissors trong Java (có Hình ảnh)
Cách tạo trò chơi Rock, Paper, Scissors trong Java (có Hình ảnh)

Video: Cách tạo trò chơi Rock, Paper, Scissors trong Java (có Hình ảnh)

Video: Cách tạo trò chơi Rock, Paper, Scissors trong Java (có Hình ảnh)
Video: Map Ảnh Vào Đối Tượng Trong Sketchup 2024, Có thể
Anonim

Rock, Paper, Scissors là một trò chơi tay do hai người chơi. Cả hai người sẽ nói "oẳn tù tì" và sau đó đồng thời tạo thành một trong ba vật thể (oẳn tù tì hoặc kéo) bằng bàn tay dang rộng. Người chiến thắng được xác định bằng hình thức bàn tay. Kéo đập giấy, kéo giấy đập đá, và kéo đập đá. Nếu cả hai đấu thủ chơi cùng một đội hình ván bài, nó được coi là hòa. Chúng tôi sẽ viết một trò chơi đơn giản bằng Java để mô phỏng Rock, Paper, Scissors trong đó một người chơi là người dùng và người chơi còn lại là máy tính.

Các bước

1585279 1 1
1585279 1 1

Bước 1. Tạo lớp chính và gọi nó

Oẳn tù tì

.

Đây sẽ là lớp mà chúng ta sẽ viết trò chơi. Bạn có thể chọn đặt tên cho nó một cái gì đó khác, chẳng hạn như

Trò chơi

hoặc

Chủ chốt

. Viết khai báo phương thức cho phương thức khởi tạo và phương thức chính.

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

1585279 2 1
1585279 2 1

Bước 2. Tạo bảng liệt kê cho các cử chỉ tay (oẳn tù tì, hoặc kéo)

Chúng ta có thể sử dụng các chuỗi để biểu thị oẳn tù tì, hoặc kéo, nhưng một phép liệt kê cho phép chúng ta xác định trước các hằng số của mình, có nghĩa là sử dụng phép liệt kê là một thiết kế tốt hơn. Chúng tôi sẽ gọi loại enum của chúng tôi

Di chuyển

với các giá trị

ĐÁ

GIẤY

CÂY KÉO

enum private Move {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Bước 3. Tạo hai lớp riêng

Người sử dụng

Máy vi tính

.

Các lớp này sẽ đại diện cho người chơi của chúng tôi trong trò chơi. Bạn có thể chọn đặt các lớp này ở chế độ công khai. Các

Người sử dụng

lớp sẽ là lớp nhắc người dùng oẳn tù tì, hoặc kéo, vì vậy chúng ta sẽ cần viết

getMove ()

phương pháp. Các

Máy vi tính

lớp học cũng sẽ cần phải có

getMove ()

để máy tính cũng có thể di chuyển. Chúng tôi sẽ đặt trình giữ chỗ trong các phương thức này và triển khai chúng sau. Các

Người sử dụng

lớp sẽ yêu cầu một phương thức khởi tạo thiết lập

Máy quét

đối tượng để nhận đầu vào của người dùng. Chúng tôi sẽ đặt

Máy quét

dưới dạng một trường riêng tư cho người dùng và sau đó khởi tạo nó trong phương thức khởi tạo. Vì chúng tôi đang sử dụng

Máy quét

chúng ta cần viết một câu lệnh nhập cho nó ở đầu mã của chúng ta. Các

Máy vi tính

lớp không yêu cầu một hàm tạo, vì vậy chúng ta không cần viết một hàm tạo; khi chúng tôi bắt đầu

Máy vi tính

đối tượng, chúng ta sẽ chỉ gọi hàm tạo mặc định. Đây là những gì của chúng tôi

Oẳn tù tì

lớp học giống như bây giờ:

nhập java.util. Scanner; public class RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} private class Người dùng {private Scanner inputScanner; public User () {inputScanner = new Scanner (System.in); } public Move getMove () {// VIỆC CẦN LÀM: Thực hiện phương thức này return null; }} private class Computer {public Move getMove () {// VIỆC CẦN LÀM: Thực hiện phương thức này return null; }} public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

Bước 4. Viết

getMove ()

phương pháp cho

Máy vi tính

lớp.

Phương thức này sẽ trả về một

Di chuyển

. Chúng ta có thể nhận được một loạt các

Di chuyển

liệt kê bằng cách gọi

giá trị ()

phương pháp:

Move.values ()

. Để chọn ngẫu nhiên

Di chuyển

liệt kê trong mảng giá trị này, chúng ta cần tạo một chỉ số ngẫu nhiên là một số nguyên từ 0 đến độ dài của mảng giá trị của chúng ta. Để làm điều này, chúng ta có thể sử dụng

nextInt ()

phương pháp của

Ngẫu nhiên

lớp mà chúng ta cần nhập từ

java.util

. Sau khi chúng tôi nhận được chỉ mục ngẫu nhiên, chúng tôi có thể trả về

Di chuyển

của chỉ mục đó từ mảng giá trị của chúng tôi.

public Move getMove () {Move move = Move.values (); Ngẫu nhiên ngẫu nhiên = new Random (); int index = random.nextInt (move.length); trả lại di chuyển [chỉ số]; }

1585279 5 1
1585279 5 1

Bước 5. Viết

getMove ()

phương pháp cho

Người sử dụng

lớp.

Phương thức này sẽ trả về một

Di chuyển

tương ứng với những gì người dùng có đầu vào. Chúng tôi sẽ mong đợi người dùng viết "đá", "giấy" hoặc "kéo". Đầu tiên, chúng ta cần nhắc người dùng nhập:

System.out.print ("Đá, giấy hay kéo?")

. Sau đó, sử dụng

hàng tiếp theo()

phương pháp của

Máy quét

đối tượng để nhận đầu vào của người dùng dưới dạng một chuỗi. Bây giờ chúng tôi cần kiểm tra xem người dùng đã gửi một động thái hợp lệ hay chưa, nhưng chúng tôi có thể khoan hồng nếu người dùng viết sai chính tả một từ. Vì vậy, chúng tôi sẽ chỉ kiểm tra xem chữ cái đầu tiên của người dùng nhập là "R" (đối với đá), "P" (đối với giấy) hoặc "S" (đối với kéo) và chúng tôi sẽ không quan tâm đến trường hợp này vì trước tiên chúng tôi sẽ sử dụng

Đến trường hợp trên()

phương pháp của

Dây

lớp để làm cho chuỗi nhập của người dùng tất cả là chữ hoa. Nếu người dùng chưa nhập đầu vào chính xác từ xa, chúng tôi sẽ nhắc người dùng một lần nữa. Sau đó, tùy thuộc vào những gì người dùng đã đưa vào, chúng tôi sẽ trả về một động thái tương ứng.

public Move getMove () {// Nhắc người dùng System.out.print ("Đá, giấy hay kéo?"); // Lấy đầu vào của người dùng String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Người dùng đã nhập một công tắc đầu vào hợp lệ (firstLetter) {case 'R': return Move. ROCK; case 'P': trả về Move. PAPER; case 'S': trả về Move. SCISSORS; }} // Người dùng chưa nhập đầu vào hợp lệ. Nhắc lại lần nữa. trả về getMove (); }

1585279 6
1585279 6

Bước 6. Viết một

chơi lại()

phương pháp cho

Người sử dụng

lớp.

Người dùng sẽ có thể chơi đi chơi lại trò chơi. Để xác định xem người dùng có muốn chơi lại hay không, chúng tôi cần viết

chơi lại()

phương thức trả về một boolean cho trò chơi biết liệu người dùng đã xác định chơi lại hay chưa. Trong phương pháp này, chúng tôi đang sử dụng

Máy quét

mà chúng tôi đã khởi tạo trước đó trong hàm tạo để nhận được "Có" hoặc "Không" từ người dùng. Chúng tôi sẽ chỉ kiểm tra xem chữ cái đầu tiên có phải là 'Y' hay không để xác định xem người dùng có muốn chơi lại hay không. Bất kỳ đầu vào nào khác sẽ có nghĩa là người dùng không muốn chơi lại.

public boolean playAgain () {System.out.print ("Bạn có muốn chơi lại không?"); Chuỗi userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); trả về userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

Bước 7. Kết nối

Người sử dụng

Máy vi tính

các lớp học cùng nhau trong

Oẳn tù tì

lớp.

Bây giờ chúng ta đã viết xong

Người sử dụng

Máy vi tính

lớp học, chúng tôi có thể tập trung vào làm việc trên trò chơi thực tế của chúng tôi. Tạo các trường riêng tư cho

Người sử dụng

Máy vi tính

các lớp học trong

Oẳn tù tì

lớp. Chúng tôi sẽ cần truy cập các trường này để truy cập vào

getMove ()

khi chúng tôi chơi trò chơi. Trong hàm tạo cho

Oẳn tù tì

lớp, khởi tạo các trường này. Chúng tôi cũng sẽ cần theo dõi điểm số trong

userScore

máy tính

các trường mà chúng ta cần bắt đầu bằng 0 trong hàm tạo. Chúng tôi cũng cần theo dõi số lượng trò chơi, đây cũng sẽ là trường được bắt đầu bằng 0.

người dùng người dùng riêng tư; máy vi tính cá nhân; int userScore riêng tư; private int computerScore; int numberOfGames riêng tư; public RockPaperScissors () {user = new User (); máy tính = new Máy tính (); userScore = 0; computerScore = 0; numberOfGames = 0; }

1585279 8
1585279 8

Bước 8. Mở rộng

Di chuyển

enum để bao gồm một phương thức cho chúng ta biết nước đi nào thắng trong mỗi trường hợp.

Chúng tôi cần viết một

so sánhMoves ()

phương thức trả về 0 nếu nước đi giống nhau, 1 nếu nước đi hiện tại thắng nước đi kia và -1 nếu nước đi hiện tại thua nước đi kia. Điều này sẽ hữu ích để xác định người chiến thắng trong trò chơi. Để thực hiện phương pháp này, trước tiên chúng ta sẽ trả về 0 nếu các nước đi giống nhau và do đó chúng ta có hòa. Sau đó, viết một câu lệnh switch để trả về 1 hoặc -1.

enum private Move {ROCK, PAPER, SCISSORS; / ** * So sánh nước đi này với nước đi khác để xác định hòa, thắng hoặc * thua. * * @param otherMove * di chuyển để so sánh với * @ quay lại 1 nếu nước đi này thắng nước đi kia, -1 nếu nước đi này thua * nước đi kia, 0 nếu những nước đi này hòa * / public int CompareMoves (Di chuyển khác) {/ / Tie if (this == otherMove) return 0; switch (this) {case ROCK: return (otherMove == SCISSORS? 1: -1); case PAPER: return (otherMove == ROCK? 1: -1); case SCISSORS: return (otherMove == PAPER? 1: -1); } // Không bao giờ đến được đây return 0; }}

1585279 9
1585279 9

Bước 9. Tạo một

bắt đầu trò chơi()

phương pháp trong

Oẳn tù tì

lớp.

Phương pháp này sẽ là cách chơi của trò chơi. Bắt đầu bằng cách đặt một đơn giản

System.out.println

trong phương pháp.

public void startGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); }

1585279 10
1585279 10

Bước 10. Nhận chuyển động từ người dùng và máy tính

bên trong

bắt đầu trò chơi()

phương pháp, sử dụng

getMove ()

phương pháp từ

Người sử dụng

lớp học và

Máy vi tính

lớp để có được người dùng và di chuyển của máy tính.

Di chuyển userMove = user.getMove (); Di chuyển computerMove = computer.getMove (); System.out.println ("\ nBạn đã chơi" + userMove + "."); System.out.println ("Máy tính đã phát" + computerMove + ". / N");

1585279 11
1585279 11

Bước 11. So sánh hai nước đi và xác định xem người dùng thắng hay máy tính thắng

Sử dụng

so sánhMoves ()

phương pháp từ

Di chuyển

enum để xác định xem người dùng có thắng hay không. Nếu người dùng thắng, hãy tăng điểm người dùng lên 1. Nếu người dùng thua, hãy tăng điểm máy tính lên 1. Nếu hòa, không tăng bất kỳ điểm nào. Sau đó, tăng số lượng trò chơi của một trò chơi.

int so sánhMoves = userMove.compareMoves (computerMove); switch (CompareMoves) {case 0: // Tie System.out.println ("Tie!"); nghỉ; case 1: // Người dùng thắng System.out.println (userMove + "beat" + computerMove + ". Bạn đã thắng!"); userScore ++; nghỉ; case -1: // Máy tính thắng System.out.println (computerMove + "beat" + userMove + ". Bạn đã thua."); computerScore ++; nghỉ; } numberOfGames ++;

1585279 12
1585279 12

Bước 12. Hỏi xem người dùng có muốn chơi lại hay không

Nếu người dùng muốn chơi lại, hãy gọi

bắt đầu trò chơi()

lần nữa. Nếu không, hãy gọi

printGameStats ()

sẽ in ra số liệu thống kê của trò chơi. Chúng tôi sẽ viết phương pháp này trong bước tiếp theo.

if (user.playAgain ()) {System.out.println (); bắt đầu trò chơi(); } else {printGameStats (); }

1585279 13
1585279 13

Bước 13. Viết

printGameStats ()

phương pháp.

Phương pháp này sẽ hiển thị số liệu thống kê của trò chơi: số lần thắng, số lần thua, số lần hòa, số trận đã chơi và tỷ lệ phần trăm thắng của trò chơi mà người dùng đã chơi. Phần trăm trò chơi thắng được tính bằng (# trận thắng + (# hòa / 2)) / (# trận đã chơi). Phương pháp này sử dụng

System.out.printf

để in ra văn bản được định dạng.

private void printGameStats () {int won = userScore; int lỗ = computerScore; int tie = numberOfGames - userScore - computerScore; đôi phần trămWon = (thắng + ((đôi) quan hệ) / 2) / numberOfGames; // Dòng System.out.print ("+"); printDash (68); System.out.println ("+"); // In tiêu đề System.out.printf ("|% 6s |% 6s |% 6s |% 12s |% 14s | / n", "WINS", "LOSSES", "TIES", "GAME PLAYED", "PERCENTAGE THẮNG"); // Dòng 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 ("|"); // In ra các giá trị System.out.printf ("|% 6d |% 6d |% 6d |% 12d |% 13.2f %% | / n", thắng, thua, hòa, numberOfGames, phần trămWon * 100); // Dòng System.out.print ("+"); printDash (68); System.out.println ("+"); }

1585279 14
1585279 14

Bước 14. Bắt đầu trò chơi trong lớp học chính

Trong lớp chính, khởi tạo một phiên bản của

Oẳn tù tì

lớp học và gọi

bắt đầu trò chơi()

phương pháp.

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

1585279 15
1585279 15

Bước 15. Kiểm tra trò chơi của bạn

Bây giờ chúng tôi đã trải qua tất cả nỗ lực viết trò chơi Rock, Paper, Scissors, đã đến lúc biên dịch và kiểm tra mọi thứ!

Chương trình mẫu

nhập java.util. Random; nhập java.util. Scanner; public class RockPaperScissors {người dùng private User; máy vi tính cá nhân; int userScore riêng tư; private int computerScore; int numberOfGames riêng tư; enum private Move {ROCK, PAPER, SCISSORS; / ** * So sánh nước đi này với nước đi khác để xác định hòa, thắng hoặc * thua. * * @param otherMove * di chuyển để so sánh với * @ quay lại 1 nếu nước đi này thắng nước đi kia, -1 nếu nước đi này thua * nước đi kia, 0 nếu những nước đi này hòa * / public int CompareMoves (Di chuyển khác) {/ / Tie if (this == otherMove) return 0; switch (this) {case ROCK: return (otherMove == SCISSORS? 1: -1); case PAPER: return (otherMove == ROCK? 1: -1); case SCISSORS: return (otherMove == PAPER? 1: -1); } // Không bao giờ đến được đây return 0; }} lớp riêng Người dùng {private Scanner inputScanner; public User () {inputScanner = new Scanner (System.in); } public Move getMove () {// Nhắc người dùng System.out.print ("Đá, giấy hay kéo?"); // Lấy đầu vào của người dùng String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Người dùng đã nhập một công tắc đầu vào hợp lệ (firstLetter) {case 'R': return Move. ROCK; case 'P': trả về Move. PAPER; case 'S': trả về Move. SCISSORS; }} // Người dùng chưa nhập đầu vào hợp lệ. Nhắc lại lần nữa. trả về getMove (); } public boolean playAgain () {System.out.print ("Bạn có muốn chơi lại không?"); Chuỗi userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); trả về userInput.charAt (0) == 'Y'; }} private class Máy tính {public Move getMove () {Move move = Move.values (); Ngẫu nhiên ngẫu nhiên = new Random (); int index = random.nextInt (move.length); trả lại di chuyển [chỉ số]; }} public RockPaperScissors () {user = new User (); máy tính = new Máy tính (); userScore = 0; computerScore = 0; numberOfGames = 0; } public void startGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); // Nhận di chuyển Di chuyển userMove = user.getMove (); Di chuyển computerMove = computer.getMove (); System.out.println ("\ nBạn đã chơi" + userMove + "."); System.out.println ("Máy tính đã chơi" + computerMove + ". / N"); // So sánh nước đi và xác định người chiến thắng int so sánhMoves = userMove.compareMoves (computerMove); switch (CompareMoves) {case 0: // Tie System.out.println ("Tie!"); nghỉ; case 1: // Người dùng thắng System.out.println (userMove + "beat" + computerMove + ". Bạn đã thắng!"); userScore ++; nghỉ; case -1: // Máy tính thắng System.out.println (computerMove + "beat" + userMove + ". Bạn đã thua."); computerScore ++; nghỉ; } numberOfGames ++; // Yêu cầu người dùng chơi lại if (user.playAgain ()) {System.out.println (); bắt đầu trò chơi(); } else {printGameStats (); }} / ** * In ra số liệu thống kê của trò chơi. Tính tỷ lệ hòa là 1/2 trận thắng trong * tỷ lệ phần trăm thắng. * / private void printGameStats () {int won = userScore; int lỗ = computerScore; int tie = numberOfGames - userScore - computerScore; đôi phần trămWon = (thắng + ((đôi) quan hệ) / 2) / numberOfGames; // Dòng System.out.print ("+"); printDash (68); System.out.println ("+"); // In tiêu đề System.out.printf ("|% 6s |% 6s |% 6s |% 12s |% 14s | / n", "WINS", "LOSSES", "TIES", "GAME PLAYED", "PERCENTAGE THẮNG"); // Dòng 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 ("|"); // In ra các giá trị System.out.printf ("|% 6d |% 6d |% 6d |% 12d |% 13.2f %% | / n", thắng, thua, hòa, numberOfGames, phần trămWon * 100); // Dòng System.out.print ("+"); printDash (68); System.out.println ("+"); } private void printDashes (int numberOfDashes) {for (int i = 0; i <numberOfDashes; i ++) {System.out.print ("-"); }} public static void main (String args) {RockPaperScissors game = new RockPaperScissors (); game.startGame (); }}

Đề xuất: