티스토리 뷰

Java/for Class, Project

Java 자바 숫자야구 게임

j0n9m1n1 j0n9m1n1 2017.09.18 10:12


/*

 * 2014244057, 2학년, 이종민

 * 사실상 자바의 장점을 못살려서 C로 쓰셔도 될듯

 * 개발소스코드 내에 주석으로 개발자의 학번, 학년, 및 성명 기입 필요. 미기입 시 0점 처리됩니다.

 * 

 */

import java.util.Random;

import java.util.Scanner;


public class Baseball{


static int compare (int playerNumbers[], int Numbers[], int length, int player, int MAX) { //

//요구사항8: 숨겨진 값 비교 및 결과 출력을 위한 메소드 생성 필요O

int strike = 0;

int ball = 0;

if(length != MAX) {

System.out.println("자릿수를 확인해주세요!");

}

else {

for(int o = length - 1; o >= 0; o--) {  // 플레이어의 입력값을 한자리 한자리 배열에 넣어주기

playerNumbers[o] = player % 10;

player /= 10;

}

for(int p = 0; p < MAX; p++) { // 랜덤수와 플레이어의 숫자 Compare

for(int q = 0; q < MAX; q++) {

if(p == q) {                                // 스트라이크는 자릿수까지 맞아야하기 때문에 p == q

if(Numbers[p] == playerNumbers[q]) {    // 맞으면 

strike++;                           // 스트라이크++

}

}

else if (Numbers[p] == playerNumbers[q]) {   // p == q가 아니면 볼 찾기 

ball++;

}

}

}

}

System.out.println("결과값: " + strike + "S " + ball + "B"); // 요구사항7: 플레이어가 매회 값을 입력 시 값의 비교 결과 출력 (상단의 예시 참조)


int temp = strike; //strike를 넘겨주기도 해야하고 입력이 끝나면 0으로 초기화도 해야해서 임시변수생성해서 main으로 리턴

strike = 0;         // 다음 입력을 위해 스트라이크와 볼 0으로 초기화

ball = 0;

return temp;

}

static int[] genNumber(int Numbers[], int MAX) {

int[] x = {0, 0, 0, 0, 0};

Random random = new Random();                   // 랜덤 객체 생성

for(int i = 0; i < MAX; i++) { // 0 1 2 3 4

int temp = random.nextInt(9) + 1;           // (0 ~ 8) + 1 안의 랜덤숫자를 생성해서 temp에 넣어줌

x[i] = temp;                          // Numbers[i]에 temp 랜덤숫자를 넘어줌

for(int j = 0; j < MAX; j++) { // 0 1 2 3 4 5

while(true) {                           

if(i == j) { //i와 j가 같을때 같은수를 두고 비교하면서 무한루프에 빠질까봐 예외처리 시작

break;

}                                   

else if(x[i] ==x[j]) {     // Numbers[i]와 Numbers[j]가 같을때 

temp = random.nextInt(9) + 1;       // 중복이기때문에 새로운 랜덤숫자를 temp에 넣어줌

x[i] = temp;                  // Numbers[i]에 temp 랜덤숫자를 넣어줌


for(int l = 0; l < MAX; l++) {  // 재 생성한 숫자가 또 배열안에 있는 숫자와 중복일경우를위한 예외처리 

if(i == l) {                // 위에 26줄과 같은 이유로 예외처리

break;

}

while(true) {

if(x[i] == x[l]) {      // Numbers[i]와 Numbers[l]이 중복이면

temp = random.nextInt(9) + 1;   // 다시 temp에 랜덤 숫자를 넣어주고

x[i] = temp;              // Numbers[i]에 temp 랜덤숫자를 넣어줌

}

else if(x[i] != x[l]){  // Numbers[i]와 Numbers[l]이 중복이 아니면

break;                          // 탈출~

}

}

}

}

else if(x[i] != x[j]) {     // Numbers[i]와 Numbers[j]가 중복이 아니라면             

break;                              // 탈출~

}


}

}

}

return x;

}

public static void main(String[] args) {

final int MAX = 5;            // 자릿수 지정

int[] Numbers = {0, 0, 0, 0, 0}; // 배열 초기화

int[] playerNumbers = {0, 0, 0, 0, 0};// 배열 초기화

int strike = 0;

int ball = 0;

Numbers = genNumber(Numbers, MAX); //랜덤숫자 생성 메소드 호출()

System.out.print("숨겨진 값: ");

for(int r = 0; r < MAX; r++) {            // 숨겨진 값 출력해주기

System.out.print(Numbers[r]);

}

System.out.println();

Scanner scanner = new Scanner(System.in); // 스케너 객체 생성

while(true) {   // 플레이어가 몇번으로 맞출지 모르기때문에 while

System.out.print("플레이어 입력값: ");

String tempString = scanner.nextLine();    // 키보드를 통해 들어오는 문자열을 tempString 변수에 저장

if(tempString.equals("q")) {

System.out.println("q가 입력되어 종료합니다.");

break;

}

int length = tempString.length();   // 입력된 값의 길이 구하기

int player = Integer.parseInt(tempString); // 요구사항5: 키보드를 통해 사용자가 입력하는 값을 문자열(String)으로 입력 후 정수화 시킴

if(length > MAX) {

System.out.println("숫자의 길이가 초과했습니다!");  // 요구사항6: 플레이어가 입력하는 수가 X자리의 범위가 넘으면 오류 메시지 출력 필요

}

else if (length < MAX) {

System.out.println("숫자의 길이가 짧습니다!");

}

else {

strike = compare(playerNumbers, Numbers, length, player, MAX);

if(strike == MAX) {

System.out.println(MAX + " 스트라이크 입니다!(게임 끝)");

break;

}

}

}

}

}


/*

 * 요구사항1: 게임 시작 시 랜덤으로 만들어지는 수는 2자리에서 5자리까지 설정 가능 O

 * 요구사항2: 게임 시작 시 랜덤으로 만들어지는 수의 각 자릿수는 1부터 9까지 임의의 수로 채워짐O

 * 요구사항3: 게임 시작 시 랜덤으로 만들어지는 수의 각 자릿수는 중복되지 않음O

 * 요구사항4: X자리의 랜덤 수를 생성은 메소드(Method)를 통해서 생성 시킴O

 * 요구사항5: 키보드를 통해 사용자가 입력하는 값을 문자열(String)으로 입력 후 정수화 시킴O

 * 요구사항6: 플레이어가 입력하는 수가 X자리의 범위가 넘으면 오류 메시지 출력 필요O

 * 요구사항7: 플레이어가 매회 값을 입력 시 값의 비교 결과 출력 (상단의 예시 참조)O

 * 요구사항8: 숨겨진 값 비교 및 결과 출력을 위한 메소드 생성 필요O

 * later

 * 

 * q를 입력했을때 브레이크 O

 * 다른 문자열이 들어왔을때(숫자만 입력되게 하기?) 포기

 * MAX보다 작은자릿수 입력못하게 하기 O

 * 플레이어가 중복된 숫자를 입력하지 못하게 하기

 *

 * */



댓글
댓글쓰기 폼