5번의 가위바위보 게임을 해서 승리한 횟수 상당의 상품을 받아가는 게임을 만들어봅시다
1. 5번의 가위바위보를 진행합니다.
2. 유저는 매 판마다 “가위”, “바위”, “보” 중 하나를 입력합니다.
3.컴퓨터는 가위 , 바위, 보
중 랜덤하게 하나를 낼 수 있습니다.
4. 매판마다 진행한 가위 바위 보의 승패에 대한 결과를 출력됩니다.
5. 판을 모두 마치면 승리한 횟수에 걸맞는 경품을 획득할 수 있습니다.
게임이 5회만 하도록 설정되었으니까 for
문으로 5회만 돌도록 또는 while
문으로 round
를 관리하는 변수를 이용하여 게임이 돌아갈 수 있도록 해야겠다고 생각했다. 이번에는 for
문을 사용하기로 했다.
일단 승리 수 마다 지급되는 경품을 먼저 처리하려고 한다.
이때 필요한 자료형으로 Map, List, Array 정도를 이용할 수 있을 것이라 생각했다.
필자는 경품을 추가하지 않고 데이터가 단순하다고 생각하여 그냥 Map에다가 연승 수를 매핑하기로 하였다.
Map<Integer, String> gifts = new HashMap<>();
gifts.put(0, "꽝");
gifts.put(1, "곰돌이 인형");
gifts.put(2, "스파랜드 입장권");
gifts.put(3, "아테네 캐니언 항공 투어권");
gifts.put(4, "호텔 스파 숙박권");
gifts.put(5, "스파르테이트 항공권");
이렇게 해서 승리한 수 만큼 gifts.get(key)
메서드를 사용하여 경품을 가져오기로 생각했다.
컴퓨터가 가위, 바위, 보
중에서 1개를 랜덤으로 가져오게 하기위해서
가위, 바위, 보
를 담을 배열rsp
을 선언하고 Random
클래스를 불러와 배열의 길이를 범위의 숫자를 담은 Random int
형 변수 index
를 선언한 후 rsp
배열의 인덱스로 넣어주면 될 것 같다.
이것을 String rspStr
로 선언했다.
String[] rsp = {"가위", "바위", "보"};
Random random = new Random();
int index = random.nextInt(rsp.length);
String rspStr = rsp[index];
플레이어가 가위, 바위, 보
중에서 하나를 입력 할 수 있도록 Scanner
클래스를 불러오고 nextLine()
메서드를 통해 문자열을 입력받을 수 있도록 했다. 그리고 플레이어가 입력한 값이 올바른지 확인하기 위한 검증 로직도 포함시켰다. 딱히 좋은 생각이 나지 않아서 무식하게 조건문에다 모든 조건을 때려넣었다.
그리고 승리한 횟수를 체크할 변수도 하나 선언했다.
Scanner sc = new Scanner(System.in);
int winCount = 0;
System.out.println("가위 바위 보 중 하나를 입력하세요.");
String input = sc.nextLine();
if (!input.equals("바위") && !input.equals("가위") && !input.equals("보")) {
System.out.println("올바른 입력이 아닙니다.");
continue;
}
라운드별 승패 확인도 조건문 하나에 모두 집어넣었다. 핑계지만 로직이 복잡하지 않고 코드가 길지 않다고 생각하여 그랬다.
아까 선언한rsp
배열에서 Random
하게 나온 String rspStr
과 플레이어가 입력한 input
값을 비교하여 값이 같을 땐 비김
다를 땐 조합별로 승리, 패배
를 각각 조건을 주었다. 이때 승리
를 할 때마다
winCount
를 하나씩 증가시켜 승리 한 횟수를 계산하도록 코드를 작성했다.
if ((rspStr.equals("가위") && input.equals("바위")) ||
(rspStr.equals("바위") && input.equals("보") ||
(rspStr.equals("보") && input.equals("가위")))) {
winCount++;
System.out.println("승리 하셨습니다!");
System.out.println("총 승리 횟수: " + winCount);
} else if (rspStr.equals(input)) {
System.out.println("아쉽습니다. 비겼습니다.");
} else {
System.out.println("패배하셨습니다.ㅜㅜ");
}
for
문안에서 게임이 다 돌아간 후 for
문 바깥에다 게임 결과를 보여주기로 했다.
String gift = gifts.getOrDefault(winCount, gifts.get(0));
if (winCount > 0) {
System.out.println("축하합니다. 총 " + winCount + " 회 승리하여 [" + gift + "] 을 획득하셨습니다.");
} else {
System.out.println("아쉽습니다. 0승을 하여 결과는 " + gifts.get(0) + "입니다.");
}
package sparta_test.level4;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
public class RockPaperScissorsGame {
public static void main(String[] args) {
Map<Integer, String> gifts = new HashMap<>();
gifts.put(0, "꽝");
gifts.put(1, "곰돌이 인형");
gifts.put(2, "스파랜드 입장권");
gifts.put(3, "아테네 캐니언 항공 투어권");
gifts.put(4, "호텔 스파 숙박권");
gifts.put(5, "스파르테이트 항공권");
Random random = new Random();
Scanner sc = new Scanner(System.in);
String[] rsp = {"가위", "바위", "보"};
int winCount = 0;
for (int i = 0; i < 5; i++) {
int index = random.nextInt(rsp.length);
String rspStr = rsp[index];
System.out.println(rspStr);
System.out.println("가위 바위 보 중 하나를 입력하세요.");
String input = sc.nextLine();
if (!input.equals("바위") && !input.equals("가위") && !input.equals("보")) {
System.out.println("올바른 입력이 아닙니다.");
continue;
}
if ((rspStr.equals("가위") && input.equals("바위")) ||
(rspStr.equals("바위") && input.equals("보") ||
(rspStr.equals("보") && input.equals("가위")))) {
winCount++;
System.out.println("승리 하셨습니다!");
System.out.println("총 승리 횟수: " + winCount);
} else if (rspStr.equals(input)) {
System.out.println("아쉽습니다. 비겼습니다.");
} else {
System.out.println("패배하셨습니다.ㅜㅜ");
}
}
String gift = gifts.getOrDefault(winCount, gifts.get(0));
if (winCount > 0) {
System.out.println("축하합니다. 총 " + winCount + " 회 승리하여 [" + gift + "] 을 획득하셨습니다.");
} else {
System.out.println("아쉽습니다. 0승을 하여 결과는 " + gifts.get(0) + "입니다.");
}
}
}