룰렛 게임기기 만들기 🎮🎮

아기개발왕짱열무·2024년 1월 20일

문제

속성 : 기기아이디, 지점명, 총합포인트, 성공횟수, 실패횟수, 잔여 시도 회수, 매출액

아래 내용에 맞게 코드 구현!!

  1. 게임기기는 아이디와 지점명을 가지고 생성합니다.

  2. 생성시 필요데이터(아이디와 지점명)를 제외한 다른 필드 변수는 0으로 초기화합니다.

  3. 룰렛은 6칸이 있으며, 4칸은 1~4점 나머지는 실패로 표시합니다.
    (1회 시행마다 Random 으로 수행됨)
    (주사위 1~6 , 1~4 : 성공&점수 , 5~6 : 실패 )

  4. 금액을 충전하면 충전 금액만큼 매출액이 증가하고 금액에 맞게 잔여 시도회수가 충전됩니다.
    (1000원에 2회), (5000원 10회)

  5. 한 게임이 끝나면 매출액을 제외한 데이터 초기화 필요합니다.

  6. 충전 후 게임을 시작하면 잔여회수가 0이 될때까지 반복 수행하며,
    잔여 횟수가 0이 되면 성공,실패 회수와 함께 총합점수를 보여줍니다.

  7. 최종으로 마감을 하게 되면, 그날의 매출액을 보여줍니다.

  8. 1.충전, 2.게임시작, 3.마감 에 해당하는 것은 사용자가 선택합니다.
    (3.마감이 선택될때까지 계속 게임은 돌아갑니다.)

  9. 제한사항

    • 충전 선택시 얼마를 넣을 것인지 금액을 받음 (1000원 단위로만 입력 가능)
    • 충전된 횟수가 없으면 게임시작 불가.
    • 충전된 횟수가 있으면 마감 불가.
    • 충전된 횟수가 있으면 추가 충전 불가.

✅코드

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
===다음에 또 만나요===

흠 .. 완벽한 코드는 아닌 것 같지만 .. 🤧🤧

profile
공부 중입니다 ..

0개의 댓글