과목명 : 객체지향 프로그래밍(Object oriented programming)
수업일자 : 2022년 10월 12일 (수)
1. 사용자와 컴퓨터가 가위, 바위, 보 게임 진행하기
1-1. 개요
- 이번 7 주차 수업에서는 사용자와 컴퓨터가 가위, 바위, 보 게임을 진행하는 프로그램을 작성하였습니다.
- 게임이 종료되면 아래와 같은 3개의 지표를 출력하게 됩니다.
(1) 진행한 게임 횟수
(2) 이긴 횟수 (사용자가 컴퓨터를 이긴 횟수)
(3) 승률 (컴퓨터를 이긴 사용자에 대한 승률)
1-2. 소스 코드
* 소스 코드의 가독성을 위해 주석을 최대한 활용하였습니다.
// 사용자 입력을 받기 위한 Scanner 클래스 불러오기
import java.util.Scanner;
public class RpsGame {
public static void main(String[] args) {
// 사용자가 입력할 가위, 바위, 보
Scanner userInput = new Scanner(System.in);
// 전체 게임수
int gameNumbers = 0;
// 사용자가 이긴 횟수
int userWinCount = 0;
// 사용자의 가위, 바위 보
int rpsNumber;
// 10번 게임 진행
while (true) {
System.out.printf("========================================%n");
System.out.printf("가위(0), 바위(1), 보(2)를 입력하세요.%n");
System.out.printf("3 이상의 수를 입력할 경우 게임이 종료됩니다.%n");
// 사용자로부터 값을 입력받는다.
System.out.printf("값을 입력하세요 : ");
// 입력받은 값은 정수형 데이터로 변환된다.
rpsNumber = userInput.nextInt();
// 게임을 진행할 때마다 전체 게임수 증가
gameNumbers++;
// 만약 입력한 값이 3 이상이라면 루프를 탈출, 승률과 총 게임 횟수, 이긴 횟수를 출력한다.
// 3 이상 입력된 경우엔 게임수에 해당되지 않으므로 총 게임 수를 1 감소시킨다.
if (rpsNumber >= 3) {
// 3 이상의 경우 gameNumbers 1 감소
gameNumbers--;
System.out.println("3 이상의 수를 입력하여 게임이 종료됩니다.");
System.out.printf("총 게임 횟수 : %d, 이긴 횟수 : %d%n", gameNumbers, userWinCount);
System.out.printf("승률 : %.1f%%", ((float) userWinCount / gameNumbers * 100));
break;
}
// 컴퓨터가 낼 가위, 바위 보
int computerVariable = (int) (Math.random() * 3);
System.out.printf("사용자가 입력한 값 : %d%n", rpsNumber);
System.out.printf("컴퓨터가 입력한 값 : %d%n", computerVariable);
// 승, 패 판정을 결정하는 로직
/* 승, 패 판정을 위한 변수 whoWin이 양수이면 컴퓨터 승리, 음수면 사람의 승리,
그 외의 경우 0이 되며 0은 무승부 판정 */
int whoWin = computerVariable - rpsNumber;
if (whoWin == 2 || whoWin == 1) { System.out.printf("컴퓨터 Win%n");}
else if (whoWin == -2 || whoWin == -1 ) {
System.out.printf("사람 Win%n");
// 이길 때마다 사용자가 이긴 횟수 카운트 1씩 증가
userWinCount++;
}
else if (whoWin == 0) { System.out.printf("비겼습니다%n");}
else { System.out.printf("3 이상의 수가 입력되어 게임이 종료됩니다."); }
}
}
}
1-3. 실행 결과
- 프로그램을 실행하여 총 10 게임을 진행한 결과입니다.



- 학부에서 수강했던 전공 수업 내용을 정리하는 포스팅입니다.
- 내용 중에서 오타 또는 잘못된 내용이 있을 시 지적해 주시기 바랍니다.
'전공 수업 > 객체 지향 프로그래밍(Java)' 카테고리의 다른 글
[10주 차] - 클래스 변수, 인스턴스 변수, 지역 변수, 클래스 메서드와 인스턴스 메서드 (0) | 2022.11.06 |
---|---|
[9주 차] - 메서드의 개념, 클래스와 객체 (0) | 2022.11.04 |
[6주 차] - 배열(Array)의 선언과 생성, 초기화, 다차원 배열 (2) | 2022.10.07 |
[5주 차] - 조건문(if, if-else, else-if, switch 문), 난수를 생성하는 Math.random() 메서드 (0) | 2022.09.29 |
[4주 차] - 연산자(Operator)와 반복문(for, while, do-while) (2) | 2022.09.26 |
댓글