본문 바로가기

Java/실습

[Java] 가위바위보 대회

가위바위보 대회를 열어보려고 합니다.

등장 인물은 심판 / 강아지 / 고양이이고

강아지는 유저, 고양이는 컴퓨터 입니다.

다 같이 한자리에 있으며

심판한테는 룰 북이 있는데

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