Notice
Recent Posts
Recent Comments
Link
drexqq
[Java, 자바] 숫자야구(baseball game) 본문
728x90
반응형
Java를 이용해서 숫자야구를 만들어보았다.
숫자야구의 조건
1 ~ 9 사이의 랜덤 숫자 3개 생성 (중복 X, 음수 X)
1 ~ 9 사이의 사용자 입력 숫자 3개 생성 (중복 X, 음수 X)
랜덤 숫자와 사용자 입력 숫자의 위치와 숫자가 모두 같은 경우 -> strike
랜덤 숫자와 사용자 입력 숫자의 위치는 다르고 숫자가 같은 경우 -> ball
하나의 랜덤 숫자당 기회 총 10번
기회를 모두 소진하거나 정답을 입력 시 replay 여부 체크
'Y' 또는 'y' 입력 시 랜덤 숫자 생성부터 다시 실행
'N' 또는 'n' 이나 다른 문자 입력 시 게임 종료
코드
package main;
import java.util.Scanner;
public class pracetice02 {
public static void main(String[] args) {
// scanner
Scanner sc = new Scanner(System.in);
// random number
int rnum[] = new int[3];
// input number
int num[] = new int[3];
// count
int count = 10;
// strike ball
int strike;
int ball;
// replay
char yn;
boolean replay = false;
// replay 하면 랜덤 숫자 다시 생성
// count == 0 이면 랜덤 숫자 다시 생성
while (!replay && count > 0) {
// 사용자 입력 초기화
boolean pass = false;
// 다시 시작하는 시점에서 strike ball 초기화
strike = 0;
ball = 0;
// random number 1 ~ 9
for (int i = 0; i < rnum.length; i++) {
rnum[i] = ((int)(Math.random() * 9) + 1);
// 랜덤 중복 숫자 제거
for (int j = 0; j < i; j++) {
if (rnum[i] == rnum[j]) {
i--;
}
}
}
// 랜덤 숫자 출력 부분
// System.out.println("랜덤 숫자는 "+rnum[0]+", "+rnum[1]+", "+rnum[2]+"입니다.");
// count가 0보다 클 경우는 랜덤숫자 재생성을 하지 않고 입력부분부터 loop
while (count > 0) {
// input number 1 ~ 9
while (!pass) {
for (int i = 0; i < num.length; i++) {
num[i] = sc.nextInt();
// 1 ~ 9 한자리 수만 입력가능하게
while (num[i] >=10 || num[i] <= 0) {
System.out.println("1 ~ 9 사이의 한자리 수를 입력해주세요.");
num[i] = sc.nextInt();
}
}
// 입력받은 값 중에 중복된 값이 있는지 판단 후 다시 입력
if (num[0] == num[1] || num[0] == num[2] || num[1] == num[2]) {
System.out.println("중복 되었습니다. 다시입력해주세요");
pass = false;
} else {
pass = true;
}
}
// input number result
System.out.println("입력한 숫자는 "+num[0]+", "+num[1]+", "+num[2]+"입니다.");
// strike ball result
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (rnum[i] == num[j]) {
// 숫자와 자리가 모두 같을 때 -> strike
if (i == j) {
strike++;
}
// 숫자만 맞을 경우 -> ball
else {
ball++;
}
}
}
}
// 답 체크한 후 기회 줄이기
count--;
// strike ball result
if (strike == 3) {
System.out.println("3스트라이크 아웃입니다");
// 정답일경우 바로 탈출
break;
}
else if (count == 0) {
System.out.println("10번의 기회를 모두 사용하셨습니다.");
}
else {
System.out.println(strike+" 스트라이크 "+ball+"볼입니다.");
System.out.println(count+"회 남았습니다.");
// 사용자가 숫자 다시입력 하도록.
pass = false;
}
// 기회 한 번이 끝날때 마다 strike ball 횟수 초기화
strike = 0;
ball = 0;
}
// 기회를 다 쓰거나 정답을 맞추면 replay check
if (count == 0 || strike == 3) {
System.out.println("다시 도전하시겠습니까 ? Y(y) / N(n)");
yn = sc.next().charAt(0);
if (yn == 'y' || yn == 'Y') {
// count 초기화
count = 10;
pass = false;
replay = false;
}
else {
replay = true;
}
}
}
// 게임종료
System.out.println("end");
}
}
728x90
반응형
'공부노트 > 개인공부!' 카테고리의 다른 글
[Java, 자바] 성적 통계프로그램 (0) | 2020.05.26 |
---|---|
[Java, 자바] 로또숫자 생성기(lotto) (0) | 2020.05.24 |
[Java ,자바] 랜덤숫자 맞추기 (random number game) (0) | 2020.05.24 |
[Java, 자바] 사칙연산 계산기(Calculator) (0) | 2020.05.21 |
[Java, 자바] 별 출력하기 (0) | 2020.05.21 |
Comments