Hayden's Archive
[자바/Java] 가위바위보 게임 본문
- 컴퓨터와 사용자가 함께 하는 가위바위보 게임을 작성한다.
- 사용자는 게임 방식을 5판 3승, 3판 2승, 1판 1승 중에서 선택할 수 있다.
- 게임은 조기 종료될 수 있다. 예를 들어 3판 2승의 경우 컴퓨터와 사용자 중 어느 한쪽이 먼저 2승을 달성하면 3번을 다 채우지 않아도 게임이 종료된다.
- 어떻게든 승부가 나도록 한다. 예를 들어 5판 3승에서 컴퓨터 승리, 사용자 승리, 무승부, 무승부, 무승부의 결과가 나왔다고 해도 끝장승부를 본다.
- 게임이 종료되면 최종 결과를 출력한다.
< 내가 작성한 코드 >
package workshop;
import java.util.Scanner;
public class Workshop2 {
public static int game() {
// 가위바위보 게임 메소드
System.out.println("가위바위보 하나 중 입력: ");
Scanner sc = new Scanner(System.in);
String user = sc.next(); // 사용자가 "가위", "바위", "보" 중 입력
int com = (int) (Math.random() * 3); // 컴퓨터가 0~2 랜덤 선택
String[] arr = { "가위", "바위", "보" }; // 위에서 나온 랜덤 숫자와 배열을 통해 가위바위보 문자열을 뽑아냄
if (user.equals(arr[com])) { // 비길 경우 0을 리턴
System.out.println("사용자 : " + user + ", 컴퓨터 : " + arr[com] + ", 비겼습니다!!!");
return 0;
} else if (user.equals("가위") && arr[com].equals("보")) { // 사용자가 이길 경우 1을 리턴
System.out.println("사용자 : " + user + ", 컴퓨터 : " + arr[com] + ", 이겼습니다!!!");
return 1;
} else if (user.equals("바위") && arr[com].equals("가위")) {
System.out.println("사용자 : " + user + ", 컴퓨터 : " + arr[com] + ", 이겼습니다!!!");
return 1;
} else if (user.equals("보") && arr[com].equals("바위")) {
System.out.println("사용자 : " + user + ", 컴퓨터 : " + arr[com] + ", 이겼습니다!!!");
return 1;
} else { // 사용자가 질 경우 -1을 리턴
System.out.println("사용자 : " + user + ", 컴퓨터 : " + arr[com] + ", 졌습니다!!!");
return -1;
}
}
public static void printFinalResult(int userWin, int comWin, int draw) {
// 최종 결과 프린트 메소드 (단, 승부가 나지 않을 경우 다시 게임한다)
if (userWin == comWin) {
System.out.println("승부가 나지 않아 한쪽이 이길 때까지 게임을 계속합니다.");
while (userWin == comWin) { // 사용자 승리와 컴퓨터 승리가 달라지면 반복문 깨짐
int score = game();
switch (score) {
case 0 : draw += 1; break;
case 1: userWin += 1; break;
case -1: comWin += 1; break;
}
}
}
if (userWin > comWin) {
System.out.println("### 사용자 승!!!");
System.out.println("이긴 횟수 : " + userWin + " 회");
System.out.println("진 횟수 : " + comWin + " 회");
System.out.println("비긴 횟수 : " + draw + " 회");
}
if (userWin < comWin) {
System.out.println("### 컴퓨터 승!!!");
System.out.println("이긴 횟수 : " + userWin + " 회");
System.out.println("진 횟수 : " + comWin + " 회");
System.out.println("비긴 횟수 : " + draw + " 회");
}
}
public static void main(String[] args) {
// 메인 메소드
Scanner sc = new Scanner(System.in);
System.out.println("가위바위보 게임을 시작합니다. 아래 보기 중 하나를 고르세요.");
System.out.println("1. 5판 3승");
System.out.println("2. 3판 2승");
System.out.println("3. 1판 1승");
int choice = sc.nextInt(); // 1~3번으로 가위바위보 방식 선택
int userWin = 0; // 사용자가 이긴 횟수
int comWin = 0; // 컴퓨터가 이긴 횟수
int draw = 0; // 비긴 횟수
int [ ] gameCycle = {5, 3, 1}; // 5판, 3판, 1판
int [ ] fastWin = {3, 2, 1}; // 3승, 2승, 1승
for (int i = 0; i < gameCycle[choice-1]; i++) {
// choice(1~3번)를 -1 해서 배열의 인덱스로 활용 // 이에 따라 반복문 5번, 3번, 1번 돌림
int score = game();
switch (score) {
case 0: draw += 1; break;
case 1: userWin += 1; break;
case -1: comWin += 1; break;
}
if(userWin == fastWin[choice-1] || comWin == fastWin[choice-1]) break;
// 5판, 3판, 1판 게임에서 3승, 2승, 1승 했을 경우 게임 조기 종료
}
printFinalResult(userWin, comWin, draw);
}
}