가위바위보 게임을 만드는 문제.
[전체코드]
public static void main(String[] args) {
// TODO Auto-generated method stub
// 가위 0 바위 1 보 2
Scanner scann = new Scanner(System.in);
int computerChoice = -1;
int userChoice = -1;
String result = " ";
String Computer;
String User;
computerChoice = (int) (Math.random() * 3 + 1);
if (computerChoice == 1)
Computer = "가위";
else if (computerChoice == 2)
Computer = "바위";
else
Computer = "보";
System.out.println("[ 가위 바위 보 게임 ]");
System.out.println("컴퓨터는 결정했습니다.");
System.out.print("당신의 차례입니다. (가위 1 / 바위 2 / 보 3 )");
userChoice = scann.nextInt();
if (userChoice == 1)
User = "가위";
else if (userChoice == 2)
User = "바위";
else {
User = "보";
userChoice = 3;
}
if (computerChoice == userChoice) {
result = "비겼습니다.";
} else {
userChoice = userChoice + 1;
if (userChoice > 3) {
userChoice = userChoice - 3;
}
if (computerChoice == userChoice) {
result = "졌습니다.";
} else {
result = "이겼습니다.";
}
}
System.out.println("컴퓨터 : " + Computer);
System.out.println("유저 : " + User);
System.out.println(result);
}
가위바위보의 승리 규칙을 어떻게 설계하느냐에 따라 다르게 코드가 짜일 수 있는 문제입니다.
입력부
Scanner scann = new Scanner(System.in);
int computerChoice = -1;
int userChoice = -1;
String result = " ";
String Computer;
String User;
입력을 받기위한 Scanner, 그리고 각각 상대(컴퓨터)와 유저의 선택값을 받기 위한 정수형 변수 두 개, 그리고 결과를 표시하기위한 문자열과 상대(컴퓨터)와 유저의 선택지를 보여주기 위한 문자열 두 개가 정의되었습니다.
처리부1
computerChoice = (int) (Math.random() * 3 + 1);
if (computerChoice == 1)
Computer = "가위";
else if (computerChoice == 2)
Computer = "바위";
else
Computer = "보";
System.out.println("[ 가위 바위 보 게임 ]");
System.out.println("컴퓨터는 결정했습니다.");
System.out.print("당신의 차례입니다. (가위 1 / 바위 2 / 보 3 )");
userChoice = scann.nextInt();
if (userChoice == 1)
User = "가위";
else if (userChoice == 2)
User = "바위";
else {
User = "보";
userChoice = 3;
}
상대(컴퓨터)의 입력은 Math클래스의 랜덤함수를 사용하여 셋 중 하나의 값이 랜덤으로 입력되게 하였고, 유저의 입력은 Scanner를 이용하여 값을 받되 경우의 수가 세 가지인 만큼 그 외의 값 입력 시 3 즉 '보'로 입력되게 하였습니다.
처리부 2
if (computerChoice == userChoice) {
result = "비겼습니다.";
} else {
userChoice = userChoice + 1;
if (userChoice > 3) {
userChoice = userChoice - 3;
}
if (computerChoice == userChoice) {
result = "졌습니다.";
} else {
result = "이겼습니다.";
}
}
가장 간단한 규칙인 서로 같으면 비긴다는 점을 if문을 사용하여 배제하고 나면 승리 혹은 패배라는 경우의 수가 남는데 이를 이용한 방법은 덧셈 후 비교입니다.
자신의 값에서 1을 더한 상태에서 비교하였을 때 상대(컴퓨터)와 값이 같으면 더한쪽은 패배하는 규칙을 가지고 있습니다.
그리고 2를 더한 상태에서 비교하였을 때 상대(컴퓨터)와 값이 같으면 더한쪽은 승리하는 규칙도 존재하지만 else문을 사용하여 생략이 가능합니다.
하지만 가위 바위 보에서 보에서 +1, 바위에서 +2 등 세 경우의 수를 넘어가는 연산이 실행하는 경우 if문을 이용하여 오버플로우를 자체적으로 적용시켜 다른 값으로 적용되게 하였습니다.
출력부
System.out.println("컴퓨터 : " + Computer);
System.out.println("유저 : " + User);
System.out.println(result);
출력은 상대(컴퓨터)의 선택, 유저의 선택, 그리고 유저의 시점에서의 승패여부를 출력합니다.
실행 결과
