[JAVA]복권당첨게임lotteryGame

2021. 7. 30. 12:12·프로젝트
728x90
반응형

제작일자: 2020.06

 

[사용된 개념]

변수, 반복문, 선택문 & 클래스 & 생성자 & 상속 & 오버 라이딩 & 오버 로딩 & 추상 클래스 & 배열

 

[큰 구조]

1~45 숫자들 중 6개의 숫자를 컴퓨터가 랜덤(math.random()이용)으로 뽑아 answerA라는 배열에 순서대로 저장을 한다.

또한 사용자는 1~45중에서 6개의 숫자를 뽑아 순서대로 적어야 한다.

이때 사용될 주 클래스는 guess클래스이다.

그리고 컴퓨터는 사용자가 숫자 몇 개를 맞췄는지 알려주고 그에 맞는 상금을 수여한다.

 

[코드]

import java.util.Scanner;

//컴퓨터가 복권 답 정하기 

class answer {         
    int[] answerA = new int[6]; // 복권 답이 저장될 배열 answerA
}

class guess extends answer{         
    Scanner sc = new Scanner(System.in);    
    int[] guessA = new int[6];      // 사용자의 답이 저장될 배열 
    public int answer_count = 0;    // 사용자가 맞춘 개수
    public String madeby;           // 만든 이의 이름

    public guess() {}            

    public guess(String name) { // guess 생성자; 문자열을 매개변수로 가짐 = 오버로딩!!
        madeby = name;
    }

    // Guess 메소드; 사용자로부터 6개의 난수를 입력받아 순서대로 저장 
    public void Guess() {
        for(int i=0; i<guessA.length; i++) {
            guessA[i] = sc.nextInt();        
        }
    }
    // 기본적인 인사말
    public void bye() {
        System.out.println("복권을 이용해 주셔서 감사합니다.");
    }
}

class all extends guess { // 전부 맞춘 경우;answer_count = 6 인 경우 
    public all() {}                
    public void bye() { // 오버라이딩(overriding); guess클래스의 bye()대신 실행됨 
        System.out.println("오늘 행운의 신이 당신을 선택하셨나 봅니다.축하드려요!");
        System.out.println("총 상금은 1,300,000,000원입니다.");
    }
}

//guess 클래스의 서브 클래스 part
class part extends guess { // 일부분만 맞춘 경우; 1 <=  answer_count < 6 
    public part() {}        
    public void bye() { // bye(); guess클래스의 bye()대신 실행됨 = 오버라이딩(overriding)
    System.out.println("이만한 행운이 또 어디있을까요?유용하게 사용하시기를 바랍니다.");
    }
    
    // 상금 기준을 설정해둔 메소드 = 오버로딩(overloading) 
    public void prize(int n) { // n = answer_count; 사용자가 맞춘 개수 
        if(n == 5) {            
            System.out.println("총 상금은 100,000,000원입니다.");
        }
        else if (n == 4) {        
            System.out.println("총 상금은 500,000원입니다.");
        }
        else if (n == 3) {         
            System.out.println("총 상금은 50,000원입니다.");
        }
        else if (n == 2) {        
            System.out.println("총 상금은 5,000원입니다.");
        }
        else if (n == 1) {         
            System.out.println("총 상금은 2,000원입니다.");
        }
    }

    // 어느 사용자가 당첨번호 몇개 맞췄는지 출력하는  메소드  = 오버로딩(overloading) 
    public void prize(String name, int n) {
        System.out.println(name + "님께서 " + n + "개의 숫자를 맞추셨습니다.");
    }
}

//guess 클래스의 서브 클래스 nothing
class nothing extends guess { // 사용자가 아무것도 맞추지 못한 경우;answer_count = 0
    public nothing() {}     
    public void bye() { // 오버라이딩(overriding); guess클래스의 bye()대신 실행됨 
        System.out.println("귀하의 인생은 복권으로 끝나지 않음을 기억해주십시오.");
    }
}
 
// 추상 클래스 구현 ; 해당 상금을 획득할 가능성 
abstract class percentage {    
    public abstract float per(int n); // 설계 
}
 
class winning extends percentage{    
    public float per (int n) { // 구현 
        return (float)n/6; // n = answer_count 
    }
}

public class Getcha { 
    public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in);   
        System.out.println("복권에 당첨되어 봅시다.");
        System.out.println("귀하의 이름을 입력해 주세요: ");
        String name = sc.nextLine(); // 사용자의 이름을 입력받음
        System.out.println("1~45 숫자 중에서 6개를 골라 순서에 유의하여 입력해주세요.");
        
        // for문과 math.random으로 랜덤하게 6개의 숫자 뽑기
        answer a = new answer();                
        for (int i=0; i<a.answerA.length; i++) {
            a.answerA[i] = (int)(Math.random()*45)+1; // 뽑은 숫자들을 순서대로 배열에 저장 
       	}
        // 사용자 입력 받기
        guess g = new guess();         
        g.Guess(); // Guess 메소드 실행; 사용자로부터 입력 받기 
        for(int i=0; i<g.guessA.length; i++) { // answer_count 계산하기 
            if(g.guessA[i] == a.answerA[i]) {   
            	g.answer_count += 1;             
            }
        }
        // 실제 당첨 번호 출력 
        System.out.println("당첨번호:");    
        for (int i=0; i<a.answerA.length; i++) {
            System.out.print(a.answerA[i]+" ");
        }
        System.out.println();
        
        // 상금 관련 클래스 객체들 생성
        all all = new all();                
        part part = new part();                 
        nothing no = new nothing();          
        winning winner = new winning();       
        part.prize(name, g.answer_count); //name님께서 n개의 숫자를 맞추셨습니다 출력
        if(g.answer_count == 6) { // 6개 모두 맞춘 경우 
            all.bye();                              
        }
        else if(g.answer_count >= 1) { // 1개 이상 6개 미만 맞춘 경우 
            part.prize(g.answer_count);   
            System.out.println(winner.per(g.answer_count)*100+"%의 확률을 뚫으셨습니다."); 
            part.bye();                   
        }
        else if(g.answer_count == 0) { // 아무것도 맞추지 못한 경우 
            no.bye();                     
        }
        guess by = new guess("만든이"); // guess클래스의 by객체 생성 & 생성자를 이용해 값 전달 
        System.out.println("Made by."+ by.madeby); // "Made by.만든이" 출력 
        sc.close();
    }
}

 

 

[오버로딩과 오버 라이딩의 차이점]

  오버로딩 오버라이딩
리턴형 달라도 상관없음 동일해야 함
매개변수 타입/개수/이름 반드시 달라야 함 동일해야 함
메소드 이름 동일해야 함 동일해야 함
적용되는 범위 같은 클래스 내 상속관계 

 

[작성일자 기준 느낀 점]

처음으로 코딩을 배우면서 작성한 코드여서 그런지

중복되는 부분이나 굳이 필요하지 않은 개념들이 끼워진 기분이 들었다.

얼른 2학기 때 JS 제대로 학습해서 이걸 웹으로 구현해보고 싶다. 

728x90
반응형
저작자표시 (새창열림)

'프로젝트' 카테고리의 다른 글

React.js를 이용해서 게시판 만들기  (1) 2021.08.06
React.js로 카운팅 앱 만들기  (1) 2021.08.06
React.js 이용하기  (2) 2021.08.06
[JavaScript]TodoList 만들기  (1) 2021.07.30
'프로젝트' 카테고리의 다른 글
  • React.js를 이용해서 게시판 만들기
  • React.js로 카운팅 앱 만들기
  • React.js 이용하기
  • [JavaScript]TodoList 만들기
heeya16
heeya16
개발 공부 냠냠
  • heeya16
    개발자 희야
    heeya16
  • 전체
    오늘
    어제
    • 분류 전체보기 (105)
      • 코딩테스트 (66)
        • 프로그래머스 (38)
        • SWEA (2)
        • BAEKJOON (26)
      • 알고리즘 (7)
      • 자료구조 (19)
      • 프로젝트 (5)
      • 취업 주르륵 (2)
      • 데이터베이스 (0)
      • IT지식 (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    1003
    10448
    10773
    10월
    10진수
    11047
    11399
    11403
    11866
    1449
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
heeya16
[JAVA]복권당첨게임lotteryGame
상단으로

티스토리툴바