1. 숫자 야구게임
- out : 숫자 x / 자릿수 x
- 1 ball : 숫자 o / 자릿수 x
- 1 strike : 숫자 o / 자릿수 o
- 1strike 1ball : 1strike 숫자 1개 / 1ball 숫자 1개
- 1~9까지 원하는 자리수의 난수를 발생하여 맞추는 게임
[ 예시 ] 자 공격하세요. (사용자 숫자 입력)
숫자는 100이상 999 이하의 겹치지 않는 숫자여야 합니다.
자 공격하세요.
(사용자 숫자 입력)
숫자는 100이상 999 이하의 겹치지 않는 숫자여야 합니다.
자 공격하세요.
(사용자 숫자 입력)
0 스트라이크 1 볼
자 공격하세요.
(사용자 숫자 입력)
숫자는 100이상 999 이하의 겹치지 않는 숫자여야 합니다.
자 공격하세요.
(사용자 숫자 입력)
1 스트라이크 2 볼
자 공격하세요.
(사용자 숫자 입력)
홈런
게임을 종료합니다.
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
import java.util.Random;
import java.util.Scanner;
class Baseball
{
private final int MAX;
private int[] baseBall;
private int[] attBaseBall;
private Random rnd;
public final int START_NUM;
public final int END_NUM;
private int bCnt;
private int sCnt;
public Baseball(int numberOfDigits)
{
MAX = numberOfDigits;
baseBall = new int[MAX];
attBaseBall = new int[MAX];
rnd = new Random();
START_NUM = setStartRange();
END_NUM = START_NUM*10-1;
makeRNum(baseBall);
printArr(); // 디버깅
}
private int setStartRange()
{
int num = 1;
for(int i=0;i<MAX-1;i++)
num *= 10;
return num;
}
private boolean numRange(int num)
{
if(num<START_NUM || num>END_NUM) return false;
else return true;
}
private void makeRNum(int[] arrNum)
{
while(true)
{
int rNum = rnd.nextInt(END_NUM-START_NUM+1)+START_NUM;
mkArr(arrNum, rNum);
if(chkNumArr(arrNum)) break;
}
}
private void mkArr(int[] arrNum, int num)
{
int divisor = 1;
for(int i=0;i<arrNum.length-1;i++)
divisor *= 10;
for(int i=0;i<arrNum.length;i++)
{
arrNum[i] = num / divisor;
num %= divisor;
divisor /= 10;
}
}
private boolean chkNumArr(int[] arrNum)
{
for(int i=0;i<arrNum.length-1;i++)
{
for(int j=i+1;j<arrNum.length;j++)
{
if(arrNum[i]==arrNum[j])
return false;
}
}
return true;
}
private void printArr()
{
for(int i=0;i<baseBall.length;i++)
System.out.print(baseBall[i]);
System.out.println();
}
public boolean setINum(int num)
{
boolean result = true;
if(numRange(num))
{
mkArr(attBaseBall, num);
result = chkNumArr(attBaseBall);
}
else result = false;
return result;
}
public void playGame()
{
int sCnt = 0;
int bCnt = 0;
for(int i=0;i<baseBall.length;i++)
{
for(int j=0;j<attBaseBall.length;j++)
{
if(baseBall[i] == attBaseBall[j])
{
if(i==j) sCnt++;
else bCnt++;
}
}
}
this.sCnt = sCnt;
this.bCnt = bCnt;
}
public boolean showResult()
{
boolean result = false;
if(sCnt==MAX)
{
System.out.println("홈런");
result = true;
}
else if(sCnt==0 && bCnt == 0)
System.out.println("아웃");
else
System.out.println(sCnt + " 스트라이크 " + bCnt + " 볼");
return result;
}
}
class BaseballGame
{
private Baseball computer;
public BaseballGame(int numberOfDigits)
{
this.computer = new Baseball(numberOfDigits);
}
private boolean attack(int num)
{
return computer.setINum(num);
}
public boolean playBaseballGame(int num)
{
boolean result = false;
if(attack(num))
{
computer.playGame();
result = computer.showResult();
}
else
System.out.println("숫자는 " + computer.START_NUM + "이상 " + computer.END_NUM + " 이하의 겹치지 않는 숫자여야 합니다.");
return result;
}
}
class BaseballGameUI
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int numberOfDigits = 0;
int iNum = 0;
System.out.println("숫자 야구 게임을 시작합니다.");
while(true)
{
System.out.println("원하는 자리수를 선택하세요.");
System.out.println("1~9까지 선택가능");
numberOfDigits = sc.nextInt();
if(numberOfDigits >=1 && numberOfDigits <= 9) break;
System.out.println("잘못 입력하셨습니다.");
}
BaseballGame bbGame = new BaseballGame(numberOfDigits);
while(true)
{
System.out.println("자 공격하세요.");
iNum = sc.nextInt();
boolean result = bbGame.playBaseballGame(iNum);
if(result)
{
System.out.println("게임을 종료합니다.");
break;
}
}
sc.close();
}
}
|
cs |
'Java > Day13' 카테고리의 다른 글
[Java] 난수 - 두 수 사이의 난수 생성 & 로또 숫자 생성 (0) | 2021.11.15 |
---|---|
[Java] 변수 (0) | 2021.11.15 |