숫자 야구
package com.baseball;
public class Main {
public static void main(String[] args) {
while(true) {
BaseballService bb = new BaseballService();
int choice = bb.mainPrint();
bb.choiceNum(choice);
}
}
}
Main 클래스
package com.baseball;
import java.io.IOException;
import java.util.Random;
import java.util.Scanner;
public class BaseballService {
Scanner sc = new Scanner(System.in);
BaseballDTO DTO = new BaseballDTO();
Random ran = new Random();
public int mainPrint() {
System.out.println("★★★★★ 숫자 야구 ★★★★★★");
System.out.println("★ 1. 숫자 야구 플레이 ★");
System.out.println("★ 2. 종 료 ★");
System.out.println("★★★★★★★★★★★★★★★★★★");
System.out.print("번호 입력 >>> ");
int choice = sc.nextInt();
return choice;
}
public void choiceNum(int choice) {
switch(choice) {
case 1 : mainGame(); break;
case 2 :
System.out.println("프로그램을 종료합니다");
break;
default :
System.out.println("입력 오류 발생!!! 프로그램을 다시 실행하시오");
break;
}
}
public void mainGame() {
// 콘솔창 지우기
erasePrint();
// 숫자 야구 정답 생성 - DTO 클래스의 mainBall 에 저장
makeMainBall();
// 숫자 생성부분 시각화
makeView();
while(true) {
System.out.println("★★★★★★★★★★★");
System.out.println("★수를 예상하세요★");
System.out.println("★ ex)0125 ★");
System.out.println("★★★★★★★★★★★");
System.out.println("현재 도전 횟수 : " + DTO.getTryNum());
System.out.print("입력 >>> ");
String guessBall = sc.next();
try{
if(Integer.parseInt(guessBall) > 0 && Integer.parseInt(guessBall) < 10000) {
// 추측한 숫자를 guessBall 변수로 생성자를 통해 세팅
DTO.setGuessBall(guessBall.charAt(0), guessBall.charAt(1), guessBall.charAt(2), guessBall.charAt(3));
checkBall();
System.out.println("--- 추측 결과 ---");
System.out.println(" Strike : " + DTO.getStrike());
System.out.println(" Ball : " + DTO.getBall());
System.out.println("----------------");
System.out.println("다시 게임을 준비하는중.............");
timeSleep(5000);
// 정답을 맞춘 경우
if(DTO.getStrike() == 4) {
System.out.println("☆★☆★숫자를 모두 맞추셨습니다★☆★☆");
System.out.println("☆★ 총 도전 횟수 : " + DTO.getTryNum() + " ★☆");
System.out.printf("정 답 : %d %d %d %d\n",DTO.getMainBall(0), DTO.getMainBall(1), DTO.getMainBall(2), DTO.getMainBall(3));
break;
}
// 스트라이크와 볼 갯수 초기화
DTO.setBall(0); DTO.setStrike(0);
// 도전 횟수 증가
DTO.setTryNum(DTO.getTryNum() + 1);
}else {
System.out.println("!!!입력 오류!!!");
continue;
}
} catch(Exception e){
System.out.println("!!!입력 오류!!!");
continue;
}
}
}
// 콘솔 창 지우개
public void erasePrint() {
for(int i=0; i<=100; i++) System.out.println();
}
// 정답 생성
public void makeMainBall() {
int[] num = new int[4];
for(int i=0; i<4; i++) {
num[i] = ran.nextInt(10);
for(int j=0; j<i; j++) {
if(num[i] == num[j]) i--;
}
}
DTO.setMainBall(num[0], num[1], num[2], num[3]);
}
// a 초 만큼 코드 중지
public void timeSleep(int a) {
try {
Thread.sleep(a);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 난수 생성 시각화
public void makeView() {
for(int i=1; i<=4; i++) {
System.out.println("★★★★★★★★★★★★★★★★★★");
System.out.printf("★★★★%d번째 수 생성중★★★★\n", i);
timeSleep(1000);
for(int j=0; j<=7; j++)
System.out.println("★★★★★★★★★★★★★★★★★★");
timeSleep(500);
}
System.out.println("★★★★★★준비 완료★★★★★★");
System.out.println();
}
// Strike 와 Ball 갯수 체크
public void checkBall() {
for(int i=0; i<4; i++) {
if (DTO.getGuessBall(i) == DTO.getMainBall(i)) {
DTO.setStrike(DTO.getStrike() + 1);
}
for(int j=0; j<4; j++) {
if(DTO.getGuessBall(i) == DTO.getMainBall(j)) {
DTO.setBall(DTO.getBall() + 1);
}
}
}
}
}
BaseballService 클래스
package com.baseball;
import java.util.ArrayList;
public class BaseballDTO {
// 숫자 야구 정답
private int[] mainBall = new int[4];
// 추측 숫자
private int[] guessBall = new int[4];
// 정답이면 true, 정답이 아니면 false
private boolean ballCheck = false;
// 도전 횟수, ball, strike
private int tryNum = 0, ball = 0, strike = 0;
public BaseballDTO() {}
public int getMainBall(int i) {
return mainBall[i];
}
public void setMainBall(int num1, int num2, int num3, int num4) {
this.mainBall[0] = num1;
this.mainBall[1] = num2;
this.mainBall[2] = num3;
this.mainBall[3] = num4;
}
public boolean isBallCheck() {
return ballCheck;
}
public void setBallCheck(boolean ballCheck) {
this.ballCheck = ballCheck;
}
public int getTryNum() {
return tryNum;
}
public void setTryNum(int tryNum) {
this.tryNum = tryNum;
}
public int getGuessBall(int i) {
return guessBall[i];
}
public void setGuessBall(char num1, char num2, char num3, char num4) {
this.guessBall[0] = Character.getNumericValue(num1);
this.guessBall[1] = Character.getNumericValue(num2);
this.guessBall[2] = Character.getNumericValue(num3);
this.guessBall[3] = Character.getNumericValue(num4);
}
public int getBall() {
return ball;
}
public void setBall(int ball) {
this.ball = ball;
}
public int getStrike() {
return strike;
}
public void setStrike(int strike) {
this.strike = strike;
}
}
BaseballDTO 클래스
- 메모 -
1. 코드를 더 깔끔하게 정리하여 작성할 수 있는 방법이 무엇인지 생각하기
2. 현재 작성한 코드에 중복된 코드가 무엇인지, 추후에 공부하면서 보완할 내용은 무엇인지 꾸준하게 생각하기
3. web 또는 Unity 를 활용하여 게임을 실제 시각화하여 서비스해보기
728x90
'프로젝트' 카테고리의 다른 글
Oracle Cloud 속도 이슈 ( 해결 완료 ) (0) | 2024.04.16 |
---|---|
fetch() 를 사용했는데 응답 값을 받지 못한 이슈 ( 해결 완료 ) (1) | 2024.04.12 |
Node.js 로 Oracle Cloud DB 접속하여 쿼리문 실행하기 (0) | 2024.04.05 |
Oracle Cloud DB 접속 방법 (0) | 2024.04.05 |
[JAVA] 파일 입, 출력을 이용한 회원 관리 프로그램 (0) | 2024.03.03 |