가위바위보 대회를 열어보려고 합니다.
등장 인물은 심판 / 강아지 / 고양이이고
강아지는 유저, 고양이는 컴퓨터 입니다.
다 같이 한자리에 있으며
심판한테는 룰 북이 있는데
1을 입력하면 가위 / 2를 입력하면 바위 / 3을 입력하면 보로 간주합니다.
강아지가 한 판 질동안 몇 번 이기고 몇 번 비겼는지 알아내봅시다.
먼저 강아지 클래스를 만들겠습니다.
import java.util.Scanner;
public class Dog {
Scanner sc = new Scanner(System.in);
public int askInt() {
System.out.println();
System.out.println("1. 가위 2. 바위 3. 보");
System.out.println();
System.out.println("하나를 정해서 입력하세요.");
int n = sc.nextInt();
if(n == 1 || n == 2 || n ==3) {
return n;
} System.out.println("다시 입력하세요.");
askInt();
return n;}
정수를 하나 입력받는 메소드를 만들어 줍니다.
정수가 1 / 2 / 3 중 하나라면
입력받은 정수를 리턴하고
아니라면 재귀 호출하여 다시 돌아가게 합니다.
import java.util.Random;
public class Cat {
Random r = new Random();
public int rollNum() {
int n = r.nextInt(3) + 1;
return n;
}}
다음은 Cat 클래스입니다.
cat은 컴퓨터이므로
3개의 정수를 랜덤 추출하여 넘겨주는
rollNum메소드를 만들어 주었습니다.
public class Judgementperson {
Dog d = new Dog();
Cat c = new Cat();
int win_count = 0;
int draw_count = 0;
public void start() {
System.out.println("======================");
System.out.println("가위바위보 대결을 시작합니다!");
System.out.println("======================");
}
역시나 심판 코드가 가장 긴데요.
Dog 객체와 Cat객체를 만들어주고
게임을 시작하는 출력문을 보여주는
start()메소드를 만들어줍니다.
public String RSP(int n) {
if (n == 1) {
return "가위";
} else if (n == 2) {
return "바위";
} else return "보";
}
다음은 입력받은 정수에 따라
가위 / 바위 / 보를 리턴하는 메소드입니다.
public void print(int a, int b) {
System.out.println("-----------------------");
System.out.println("컴퓨터가 낸 것은 : " + RSP(b));
System.out.println("-----------------------");
System.out.println("=======================");
System.out.println("유저가 낸 것은 : " + RSP(a));
System.out.println("=======================");
}
입력받은 정수를 비교하여
가위 / 바위 / 보를 출력해주는 메소드입니다.
public void judgeGame() {
while(true) {
int a = d.askInt();
int b = c.rollNum();
핵심 기능이 들어있는 함수인데요.
유저가 질 때까지 무한 반복 해야하므로
while(true) 반복문을 쓰고
유저의 값과 컴퓨터의 값을
변수에 초기화해줍니다.
if(a - b == -2 ||a - b == 1) {
print(a,b);
System.out.println();
System.out.println("유저 승리!");
win_count ++;
}else if(a == b) {
print(a,b);
System.out.println();
System.out.println("비겼습니다!");
draw_count ++;
}else{
print(a,b);
System.out.println("컴퓨터 승리");
System.out.println();
System.out.printf("승리 : %d 회\n", win_count);
System.out.printf("무승부 : %d 회\n",draw_count);
break;}
}
}
전에 가위바위보 실습을 생각해보면
1. 가위 2. 바위 3. 보 일때
두 숫자를 뺐을 때
-2 or 1이면 앞에 사람이 이긴거고
아니라면 뒤에 사람이 이긴 겁니다.
따라서 승리나 무승부시 count를 올려주고
사용자가 패배하면 count들을 출력하고
break합니다.
public void play() {
start();
judgeGame();
}
}
}
start()와 judgeGame을 합쳐준 메소드를
메인에서 실행해보겠습니다.
public class OMain1 {
public static void main(String[] args) {
Judgementperson p = new Judgementperson();
p.play();
}
}
======================
가위바위보 대결을 시작합니다!
======================
1. 가위 2. 바위 3. 보
하나를 정해서 입력하세요.
1
-----------------------
컴퓨터가 낸 것은 : 가위
-----------------------
=======================
유저가 낸 것은 : 가위
=======================
비겼습니다!
1. 가위 2. 바위 3. 보
하나를 정해서 입력하세요.
1
-----------------------
컴퓨터가 낸 것은 : 보
-----------------------
=======================
유저가 낸 것은 : 가위
=======================
유저 승리!
1. 가위 2. 바위 3. 보
하나를 정해서 입력하세요.
1
-----------------------
컴퓨터가 낸 것은 : 바위
-----------------------
=======================
유저가 낸 것은 : 가위
=======================
컴퓨터 승리
승리 : 1 회
무승부 : 1 회
잘 출력되네요!
전에 했던 실습을 상기시키며
각각의 파라미터와 리턴값을
적절히 활용할 수 있게 능력을
키우는 실습을 계속해서 하고 있습니다.
이제는 문제를 보면 어떤 메소드를 만들고
어떤 값을 리턴해서 변수에 넣어 사용할지
감이 오는 것 같습니다.
긴 글 읽어주셔서 감사합니다!
'Java > 실습' 카테고리의 다른 글
[Java] 행성 (0) | 2024.12.16 |
---|---|
[Java] 배열의 유사도 (0) | 2024.12.10 |
[Java] Up Down 대회 (0) | 2024.12.10 |
[Java] 동전 홀 짝 맞추기 (0) | 2024.12.10 |
[Java] 환자의 BMI 구해주기 (2) | 2024.12.06 |