Q1. 숫자 야구 게임 (이 날 포트폴리오형 시험문제로 풀어냈던거라 주석이 과할정도로 많다ㅜ)
package Day8;
import java.util.Random;
import java.util.Scanner;
/*포트폴리오 시험용 숫자 야구게임*/
public class Portfolio1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Random r = new Random(); //랜덤값을 추출하는 함수
Scanner sc = new Scanner(System.in);
int[]com = new int[3]; //컴퓨터의 숫자가 저장될 배열 생성
// int[] com에 1~9까지의 수를 랜덤으로 생성 저장
for(int i=0; i<com.length; i++) {
com[i] = r.nextInt(9)+1;
}
// int[] com 배열의 중복값을 제거하고 중복되지 않을 때까지 랜덤값 재생성
while(true){
if(com[0] != com[1]){ //com[0]과 com[1]의 값이 서로 중복되지 않을 때
if(com[0] != com[2] && com[1] != com[2]){// = 모든 값들이 중복되지 않을 때
break;
}else { // 만일 com[0]==com[2] || com[1]==com[2]일 경우 com[2]에 새 랜덤값 부여
com[2] = r.nextInt(9)+1;
}
}else {//com[0]과 com[1]의 값이 중복일 때, com[1]에 새 랜덤 값 부여
com[1] = r.nextInt(9)+1;
}
}
//테스트에 용이하게 com[]의 값 전체 출력
for(int i=0; i<com.length; i++) {
System.out.print(com[i]+" ");
}
//야구게임 시작
int total = 0; // 전체 게임 수 카운트
while(true) {
int [] user = new int[3]; // 유저에게 받을 숫자값을 저장할 배열 생성
System.out.println("숫자 야구 게임입니다.");
System.out.println("1~9 사이의 수를 중복되지 않게 입력해주세요.");
//유저에게 받은 수가 1~9사이 내의 숫자인지 체크
for(int i=0; i<user.length; i++) {
user[i] =sc.nextInt();
if(user[i]<1 || user[i]>9) { // 1 ~ 9사이의 숫자가 아닐 시
System.out.println("범위 내 숫자가 아닙니다. 다시 입력해주세요");
System.out.println();
break;//게임 재시작
}
}
if(user[0]>=1 && user[0]<=9 && user[1]>=1 && user[1]<=9 && user[2]>=1 && user[2]<=9) {
// user배열이 1~9사이 조건을 충족하는지 확인
if(user[0]!=user[1] && user[0]!=user[2] && user[1]!=user[2]) {
// user 배열들 간에 숫자가 중복되지 않는지 확인
int ball = 0;
int strike =0;
total++; // 게임 횟수 카운트
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(user[i] == com[j]) { //user 배열 속 값과 com 배열 속의 값이 같을 때
if(i==j) {// ex) com[0] == com[0] 즉, 자릿수까지 값이 똑같을 때
strike++; // 스트라이크 1추가
}else { // 배열 속 값은 같지만 자릿수가 다를 때,
ball++; // ball 1추가
}
}
}
}
if(ball!=0 || strike !=0) { // ball이나 strike중 하나라도 값이 있을 시
if(strike ==3) { // strike가 3개일 때 = 홈런, 프로그램 종료
System.out.println("홈런입니다.");
System.out.println("컴퓨터의 숫자는");
for(int i=0; i<com.length; i++) {
System.out.print(com[i]+" ");
}
System.out.println("총 게임 시도 횟수 : "+total+"회");
System.out.println("프로그램을 종료합니다.");
break;
}else { // ball이나 strike의 값이 있지만 홈런은 아닐 때 이번 스코어 출력,게임 계속 진행
System.out.println("이번 게임의 결과는 "+ball+"볼 "+strike+"스트라이크 입니다.");
System.out.println();
}
}else if(ball==0 && strike ==0) { // ball도 strike도 값이 없을 때 아웃, 게임 계속 진행
System.out.println("아웃입니다.");
System.out.println();
}
}else { // 유저가 입력한 값 중 중복된 숫자가 있을 시 출력, 숫자 재입력
System.out.println("중복된 숫자입니다. 다시 입력해주세요");
}
}
}
}
}
급하게 풀어냈더니
너무 지저분하게 나온 것 같다.
시간 날 때 수정해서 재 업로드 할 예정
'공부 > 과제.' 카테고리의 다른 글
JAVA 문제풀이 11 (0) | 2021.04.26 |
---|---|
JAVA 문제풀이 10 마방진 (0) | 2021.04.26 |
JAVA 문제풀이 08 나선형(달팽이) 배열 (0) | 2021.04.26 |
JAVA 문제풀이 07 지그재그 배열 (0) | 2021.04.26 |
JAVA 문제풀이 06 (0) | 2021.04.26 |
댓글