숫자 야구 게임이란?
실제 야구와는 관련이 없는 숫자 맞추기 심리 게임이다. 각자 3/4자리의 숫자를 임의로 정한 뒤, 서로에게 3/4자리의 숫자를 불러서 결과를 확인한다. 그리고 그 결과를 토대로 상대가 적은 숫자를 예상한 뒤 맞히는 게임이다. 원제, Bulls and Cows는 상업적으로 판매되는 보드 게임 마스터마인드보다 앞서 두 명 이상의 플레이어를 위한 오래된 코드 깨기 마인드 또는 종이 및 연필 게임이다. 숫자나 단어를 사용하는 1세기 이상 거슬러 올라가는 게임이며 두 명의 상대가 플레이한다. 일명 숫자 맞추기 게임이다.
숫자 야구 게임 룰
1. 숫자를 정한다.
사용되는 숫자는 0에서 9까지 서로 다른 숫자이다.
경우에 따라 0은 사용하지 않기도 하며 0이 첫번째 숫자로 올 수 없게하는 룰도 있다.
- 숫자는 맞지만 위치가 틀렸을 때는 볼
- 숫자와 위치가 전부 맞으면 스트라이크
- 숫자와 위치가 전부 틀리면 아웃
물론 무엇이 볼이고 스트라이크인지는 알려주지 않는다.
3. 숫자를 맞춘다.
4자리 숫자가 자리까지 정확하다면 승리한다.
숫자 야구 게임 제작기
온라인 야구 게임이였다면 플레이어 두명에서 대결을 했겠지만
지금은 1인 게임을 만들 것이기에 컴퓨터를 만들어준다.
public static int[] computer() {
int[] a = new int[4];
Random r = new Random();
a[0] = r.nextInt(9) + 1;
for (int i = 1; i < 4; i++) {
a[i] = r.nextInt(10);
for (int j = 0; j < i; j++) {
if (a[i] == a[j]) {
i--;
}
}
}
int bb = 1000 * a[0] + 100 * a[1] + 10 * a[2] + a[3];
System.out.println("랜덤: " + bb);
return a;
}
랜덤으로 4자리 숫자를 만드는 코드이다.
4자리 숫자는 중복되지 않고 첫자리는 0이 아니다.
public static int[] player(int x) {
int[] b = new int[4];
// ex) int x=5684;
b[0] = x / 1000;
b[1] = (x % 1000) / 100;
b[2] = (x % 1000 % 100) / 10;
b[3] = x % 1000 % 100 % 10;
System.out.println("입력한 수: " + b[0] + b[1] + b[2] + b[3]);
return b;
}
다음으로 플레이어 함수를 만든다.
4자리 숫자가 들어오면 자리수로 나눠 배열에 저장한다.
public static int[] compare(int[] a, int[] b) {
int[] c = new int[2];
int correctN = 0;
int result = 0;
for (int i = 0; i <= 3; i++) {
for (int j = 0; j <= 3; j++) {
if (a[i] == b[j]) {
correctN++;
//System.out.println("볼 개수" + correctN);
}
}
}
c[0] = correctN;
for (int i = 0; i <= 3; i++) {
if (a[i] == b[i]) {
result++;
//System.out.println("스트라이크 개수" + result);
}
}
c[1] = result;
return c;
}
또 4자리 숫자를 비교하는 함수를 만든다.
볼과 스트라이크 개수를 반환한다.
public static void main (String[] arg) {
System.out.println("야구 게임을 시작하겠습니다!");
Scanner sc = new Scanner(System.in);
System.out.println("시스템이 숫자를 선택하는 중입니다....");
int[] CNumber = computer();
System.out.println("임의의 숫자가 결정됐습니다.");
while (true) {
System.out.print("한자리 씩 0~9 중 숫자를 골라 네자리를 입력해주세요(중복x) \n>>");
int run = sc.nextInt();
int[] PNumber = player(run);
int[] CPValue = compare(CNumber, PNumber);
int strike = CPValue[1];
int ball = CPValue[0] - CPValue[1];
int out = 4 - ball - strike;
System.out.println("strike " + strike + ", ball " + ball + ", out" + out);
if(strike == 4) break;
}
}
마지막으로 main이다.
플레이어에게 네자리 숫자를 입력받고 스트라이크, 볼, 아웃 개수를 알려준다.
숫자 야구 게임 플레이
import java.util.Random;
import java.util.Scanner;
public class ballGame {
public static int[] computer() {
int[] a = new int[4];
Random r = new Random();
a[0] = r.nextInt(9) + 1;
for (int i = 1; i < 4; i++) {
a[i] = r.nextInt(10);
for (int j = 0; j < i; j++) {
if (a[i] == a[j]) {
i--;
}
}
}
int bb = 1000 * a[0] + 100 * a[1] + 10 * a[2] + a[3];
System.out.println("랜덤: " + bb);
return a;
}
public static int[] player(int x) {
int[] b = new int[4];
b[0] = x / 1000;
b[1] = (x % 1000) / 100;
b[2] = (x % 1000 % 100) / 10;
b[3] = x % 1000 % 100 % 10;
System.out.println("입력한 수: " + b[0] + b[1] + b[2] + b[3]);
return b;
}
public static int[] compare(int[] a, int[] b) {
int[] c = new int[2];
int correctN = 0;
int result = 0;
for (int i = 0; i <= 3; i++) {
for (int j = 0; j <= 3; j++) {
if (a[i] == b[j]) {
correctN++;
}
}
}
c[0] = correctN;
for (int i = 0; i <= 3; i++) {
if (a[i] == b[i]) {
result++;
}
}
c[1] = result;
return c;
}
public static void main (String[] arg) {
System.out.println("야구 게임을 시작하겠습니다!");
Scanner sc = new Scanner(System.in);
System.out.println("시스템이 숫자를 선택하는 중입니다....");
int[] CNumber = computer();
System.out.println("임의의 숫자가 결정됐습니다.");
while (true) {
System.out.print("한자리 씩 0~9 중 숫자를 골라 네자리를 입력해주세요(중복x) \n>>");
int run = sc.nextInt();
int[] PNumber = player(run);
int[] CPValue = compare(CNumber, PNumber);
int strike = CPValue[1];
int ball = CPValue[0] - CPValue[1];
int out = 4 - ball - strike;
System.out.println("strike " + strike + ", ball " + ball + ", out" + out);
if(strike == 4) break;
}
}
}
최종 코드이다.
잘 되는 것을 볼 수 있었다.
Next
다음엔 불편한 프롬프트 입력이 아닌 보기 좋게 입력을 화면에 나오는 GUI를 넣을 것이다.
'숫자 야구 게임' 카테고리의 다른 글
숫자 야구 게임 제작기 2 (0) | 2024.03.21 |
---|