속성 : 기기아이디, 지점명, 총합포인트, 성공횟수, 실패횟수, 잔여 시도 회수, 매출액
게임기기는 아이디와 지점명을 가지고 생성합니다.
생성시 필요데이터(아이디와 지점명)를 제외한 다른 필드 변수는 0으로 초기화합니다.
룰렛은 6칸이 있으며, 4칸은 1~4점 나머지는 실패로 표시합니다.
(1회 시행마다 Random 으로 수행됨)
(주사위 1~6 , 1~4 : 성공&점수 , 5~6 : 실패 )
금액을 충전하면 충전 금액만큼 매출액이 증가하고 금액에 맞게 잔여 시도회수가 충전됩니다.
(1000원에 2회), (5000원 10회)
한 게임이 끝나면 매출액을 제외한 데이터 초기화 필요합니다.
충전 후 게임을 시작하면 잔여회수가 0이 될때까지 반복 수행하며,
잔여 횟수가 0이 되면 성공,실패 회수와 함께 총합점수를 보여줍니다.
최종으로 마감을 하게 되면, 그날의 매출액을 보여줍니다.
1.충전, 2.게임시작, 3.마감 에 해당하는 것은 사용자가 선택합니다.
(3.마감이 선택될때까지 계속 게임은 돌아갑니다.)
제한사항
✅코드
package day23.homework;
import java.util.Scanner;
public class Roulette {
// 속성 : 기기아이디, 지점명, 총합포인트, 성공횟수, 실패횟수, 잔여 시도 회수, 매출액
String machineId; // 기기아이디
String branchName; // 지점명
int totalPoint; // 총합 포인트
int successCnt; // 성공 횟수
int failCnt; // 실패 횟수
int leftTryCnt; // 잔여 시도 횟수
int totalSales; // 매출액
// 기기아이디와 지점명 가지고 생성
public Roulette(String machineId, String branchName) {
this.machineId = machineId;
this.branchName = branchName;
// 기기아이디와 지점명 제외 필드변수 초기화
totalPoint = 0;
successCnt = 0;
failCnt = 0;
leftTryCnt = 0;
totalSales = 0;
}
// 메뉴 선택 메소드
public int selectMenu() {
Scanner scan1 = new Scanner(System.in);
System.out.print("메뉴를 선택하세요(1. 충전 2.게임시작 3. 마감): ");
int inputMenu = scan1.nextInt();
// 번호를 잘못 입력했으면
if (inputMenu < 1 || inputMenu > 3) {
System.out.println("잘못 선택했습니다. 메뉴 보기 중에서 고르세요.");
return 0; // 잘못된 입력을 나타내기 위해 0을 반환
}
return inputMenu;
}
// 금액 충전 메소드
public void charge() {
Scanner scan2 = new Scanner(System.in);
System.out.print("충전할 금액 입력(1000원당 2회): ");
int inputMoney = scan2.nextInt();
// 충전한 금액이 천 원 단위가 아니면
if (inputMoney < 1000 || inputMoney % 1000 != 0) {
System.out.println("1000원 단위로만 충전이 가능합니다.");
} else {
int oneRoundMoney = 500; // 게임 1회당 500원
// 잔여시도 = 잔여시도 + 충전금액 / 500원
leftTryCnt = leftTryCnt + inputMoney / oneRoundMoney;
totalSales = totalSales + inputMoney; // 총매출액
}
}
// 충전횟수 남았나 확인 메소드
public boolean canPlayRoulette() {
if (leftTryCnt == 0) { // 잔여시도횟수가 없으면
System.out.println("잔여시도횟수가 없습니다. 충전해주세요!");
return false;
}
return true;
}
// 잔여시도횟수 남았나 확인 메소드
public boolean canCharge() {
if (leftTryCnt > 0) { // 잔여시도횟수가 남았으면
System.out.println("잔여 횟수가 남아 있습니다. 추가 충전이 불가능합니다.");
return false;
}
return true;
}
// 마감 가능한가 확인 메소드
public boolean canClose() {
if (leftTryCnt > 0) {
System.out.println("마감이 불가능합니다. 잔여 횟수가 남아 있습니다.");
return false;
}
return true;
}
// 룰렛 메소드
public void playRoulette() {
int randomNumber = (int) (Math.random() * 6) + 1; // 1~6 랜덤 숫자
if (randomNumber <= 4) { // 성공했을 때
System.out.println("성공: " + randomNumber);
successCnt++; // 성공횟수 증가
totalPoint = totalPoint + randomNumber; // 뽑은 숫자 만큼 총합포인트 반영
} else {
System.out.println("실패");
failCnt++; // 실패횟수 증가
}
System.out.printf("성공횟수:%d 실패횟수:%d 총합포인트:%d\n",
successCnt, failCnt, totalPoint);
}
// 게임 시작 메소드
public void startRoulette() {
for (int i = 0; i < leftTryCnt; i++) {
playRoulette(); // 룰렛 돌리기
}
}
// 마감 메소드
public void closeRoulette() {
System.out.println(branchName + "지점 " + machineId + "기기 마감 시작");
System.out.println("마감 누적 금액: " + totalSales);
}
// 전체 룰렛 메소드
public void gameStart() {
System.out.println("===환영합니다 룰렛게임기입니다===");
while (true) {
int inputMenu = selectMenu(); // 메뉴 선택
switch (inputMenu) {
case 1: // 충전하기
if (canCharge()) { // 충전가능한가?
charge(); // 충전 메소드
}
break;
case 2: // 게임하기
if (canPlayRoulette()) { // 충전횟수 남았나?
startRoulette(); // 룰렛 메소드
}
break;
case 3: // 마감하기
if (canClose()) { // 마감가능한가?
closeRoulette(); // 마감 메소드
return; //
}
break; // 마감 선택시 반복문 종료
}
}
System.out.println("===다음에 또 만나요===");
}
public static void main(String[] args) {
Roulette roulette = new Roulette("S001", "서울대점");
roulette.gameStart();
}
}
✅출력결과
===환영합니다 룰렛게임기입니다===
메뉴를 선택하세요(1. 충전 2.게임시작 3. 마감): 1
충전할 금액 입력(1000원당 2회): 5000 // 총 10회 게임 가능
메뉴를 선택하세요(1. 충전 2.게임시작 3. 마감): 2
성공: 2
성공: 3
실패
성공: 4
성공: 1
성공: 4
성공횟수:5 실패횟수:1 총합포인트:14
메뉴를 선택하세요(1. 충전 2.게임시작 3. 마감): 3
서울대점지점 S001기기 마감 시작
마감 누적 금액: 5000
===다음에 또 만나요===
흠 .. 완벽한 코드는 아닌 것 같지만 .. 🤧🤧