728x90
📖 본 글은 학습한 가위바위보 게임 코드를 세세하게 해부하여 이해하려고 작성하였습니다.
📕 게임조건
<입력조건 2가지 구분해서 총 2가지 방식의 게임 개발>
- user 숫자 0, 1, 2 중 하나 입력 하는 경우
- user 문자열 가위 , 바위, 보 중 하나 입력 하는 경우
<탈출조건>
- 9를 입력하면 탈출
📕 Tip ! 이 게임을 실행하기 위해서 가위, 바위, 보라는 문자열을 숫자에 대입하여 비교연산자를 사용해야함.
| user - com | 가위 0 | 바위 1 | 보 2 |
| 가위 0 | 0 | -1 | -2 |
| 바위 1 | 1 | 0 | -1 |
| 보 2 | 2 | 1 | 0 |
0 = 비김 / 2 = com이 이김 / 1 = user가 이김
ex)
user가 지는 경우: -1, 2
user가 이기는 경우: -2, 1
📕 초기설정
( 인덱스 숫자와 순서는 무관)
📌 기본설정
- user의 값에서 com(컴퓨터) 값 빼기 (-) => ( int cal = user - com)
- 가위=0 바위=1 보=2
1. user와 com이라는 정수 변수를 각각 선언
- 컴퓨터는 랜덤값을 생성해야함
- 사용자는 직접 입력 - Scanner 생성
Scanner sc = new Scanner(System.in);
int com = (int)(Math.random()*3); // 컴퓨터 랜덤값 생성
System.out.println("0,1,2 숫자 중 하나를 입력하시오>");
int user = sc.nextInt(); // 스캐너에서 값 꺼내온다
2. user에서 com의 값을 뺀 값을 담을 변수 cal 생성
int cal = user - com;
if((cal == -1 || cal == 2)) {
System.out.printf("user %s, com %s, com 승리\n", sUser, sCom);
} else if(cal == -2 || cal == 1) {
System.out.printf("user %s, com %s, user 승리\n", sUser, sCom);
} else {
System.out.println("비김");
}
3. trans변수 임의 생성
3-1. (1번 게임) 정수 0, 1, 2 중 하나를 입력하는 경우의 trans 생성
static String trans(int n) {
String str = "";
if(n == 0) {
str = "가위";
}
else if(n == 1) {
str = "바위";
} else {
str = "보";
}
return str;
}
String sUser = trans(user);
String sCom = trans(com);
3-2. (2번 게임) 문자열 가위, 바위, 보 중 하나를 입력하는 경우의 trans 생성
static int trans02(String s) {
int rs = 0;
if(s.equals("가위")) {
rs = 0;
}
else if(s.equals("바위")) {
rs = 1;
} else {
rs = 2;
}
return rs;
}
String sCom = trans(com);
int user = trans02(sUser);
4. 숫자, 문자열 2가지 게임 중 몇 번 실행할 지 선택하기 (switch문 사용함)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("게임을 선택하세요.");
System.out.println("숫자로 입력 => 1, 문자로 입력 => 2");
int choice = sc.nextInt();
switch(choice) {
case 1:
game01();
break;
case 2:
game02();
break;
}
5. 가위바위보 결과 출력값 함수로 빼기
//함수로 빼기(재사용 위해)
static void process(int user, int com, String sUser, String sCom) {
int cal = user - com;
if(cal == -1 || cal == 2) {
System.out.printf("user %s, com %s, com 승리\n",sUser, sCom);
} else if(cal == -2 || cal == 1) {
System.out.printf("user %s, com %s, user 승리\n",sUser, sCom);
} else {
System.out.printf("user %s, com %s, user 비김\n",sUser, sCom);
}
}
📕 완성된 전체 코드
package projectex;
import java.util.Scanner;
public class RockPaperScissorGame {
static String trans(int n) {
String str = "";
if(n == 0) {
str = "가위";
}
else if(n == 1) {
str = "바위";
} else {
str = "보";
}
return str;
}
static int trans02(String s) {
int rs = 0;
if(s.equals("가위")) {
rs = 0;
}
else if(s.equals("바위")) {
rs = 1;
} else {
rs = 2;
}
return rs;
}
//함수로 빼기(재사용 위해)
static void process(int user, int com, String sUser, String sCom) {
int cal = user - com;
if(cal == -1 || cal == 2) {
System.out.printf("user %s, com %s, com 승리\n",sUser, sCom);
} else if(cal == -2 || cal == 1) {
System.out.printf("user %s, com %s, user 승리\n",sUser, sCom);
} else {
System.out.printf("user %s, com %s, user 비김\n",sUser, sCom);
}
}
// 게임1: user 숫자 0, 1, 2 중 하나 입력하는 경우
static void game01() {
while(true) { //무한루프
Scanner sc = new Scanner(System.in);
int com = (int)(Math.random()*3); // 컴퓨터 랜덤값 생성
System.out.println("0,1,2 (종료:9) 숫자 중 하나를 입력하시오>");
int user = sc.nextInt(); // 스캐너에서 값 꺼내온다
if(user == 9) {
System.out.println("End!!");
break;
}
if(user > 2 || user < 0) {
System.out.println("0 ~ 2 사이의 숫자를 넣으세요");
continue; // user 가 잘못된 값을 입력할 시 발생
}
String sUser = trans(user);
String sCom = trans(com);
process(user, com, sUser, sCom);
}
}
// 게임2: user 문자열 가위, 바위, 보 중 하나 입력 하는 방식
static void game02() {
while(true) {
Scanner sc = new Scanner(System.in);
int com = (int)(Math.random() * 3);
System.out.println("가위, 바위, 보 (종료: 9) 중 하나를 입력하시오>");
String sUser = sc.next();
if(sUser.equals("9")) {
System.out.println("End!!");
break;
}
String sCom = trans(com);
int user = trans02(sUser);
process(user, com, sUser, sCom);
}
}
//게임 1번, 2번 중 실행할 번호 고르기
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("게임을 선택하세요.");
System.out.println("숫자로 입력 => 1, 문자로 입력 => 2");
int choice = sc.nextInt();
switch(choice) {
case 1:
game01();
break;
case 2:
game02();
break;
}
}
}
📍 전체 코드의 큰 틀
- game01 / game02의 세부 사항을 각각 적기 전에, 공통 값들은 위에 적어주며 재사용 용이하게 작성
'Coding > JAVA' 카테고리의 다른 글
| [JAVA] 중첩 for문 사용한 예제 ( 구구단, 피라미드) (0) | 2024.03.19 |
|---|---|
| [JAVA] while / for 반복문 사용 간단 예제 (0) | 2024.03.19 |
| [JAVA] Scanner Class - next(), nextLine(), nextInt() (0) | 2024.03.15 |
| [JAVA] 이클립스 자주 쓰는 단축키 (0) | 2024.03.12 |
| ECLIPSE 초기 환경 구축 (다운로드 / UTF-8 설정) (0) | 2024.03.12 |