Study/Java

자바 배열 및 random, System.in.read 를 이용하여 야구 게임 만들기

토기발 2022. 3. 18. 13:50

자바의 배열 및 random, System.in.read를 이용하여 야구 게임을 만들겠습니다.

 

제가 만들 야구 게임은 3자리 숫자를 입력하여 컴퓨터가 랜덤으로 생성한 숫자를 맞추는 게임으로, 

수는 맞지만 자리가 다를 경우는 ball (=B), 자리와 수가 모두 같을 때는 strike (=S) 로 표시합니다.

또 모두 틀렸을 때는 out로 표시합니다. 

 

만약, 컴퓨터가 만든 숫자가 345일 때 356을 입력한다면 1S 1B가 되겠지요! 

 

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
import java.io.*;
 
public class TestRandom01 {
    public static void main(String[] args) throws IOException {
        char[] com = new char[3];
        char[] select = new char[3];
        int co = 0;
        
        for(int i=0; i<3++i) {
            com[i] = (char)(Math.random()*9 + 49);
            for(int j=0; j<i; ++j) {
                if (com[i] == com[j]) {
                    i--;
                    break;
                }
            }
        }
        
        while(true) {
            int s = 0, b = 0;
            for(int i=0; i<3++i) {
                select[i] = (char)System.in.read();
            }
            System.in.skip(5);
            co++;
            for(int i=0; i<3++i) {
                for (int j=0; j<3++j) {
                    if (com[i] == select[j]) {
                        if (i==j) {
                            s++;
                        }else {
                            b++;
                        }
                    }
                }
            }
            
            if (s==3) {
                break;
            }else if (s==0 && b==0) {
                System.out.println("out");
            }else {
                System.out.printf("%dS %dB\n", s, b);
            }
        }
        
        System.out.println(co+"번만에 맞추셨습니다.");
    }
}
 
 
 
cs

 

이하 설명입니다.


		char[] com = new char[3];
		char[] select = new char[3];

입력한 숫자를 하나씩 나누기 위해 char로 배열을 생성합니다.

com은 컴퓨터에서 생성하는 숫자이며, select는 사용자가 입력하는 숫자입니다.

		for(int i=0; i<3; ++i) {
			com[i] = (char)(Math.random()*9 + 49);
			for(int j=0; j<i; ++j) {
				if (com[i] == com[j]) {
					i--;
					break;
				}
			}
		}

컴퓨터에서 생성하는 숫자를 랜덤값으로 정합니다.

1~9의 숫자 3개를 랜덤값으로 뽑고 중복값을 제거합니다. 

 

		while(true) {
			int s = 0, b = 0;
			for(int i=0; i<3; ++i) {
				select[i] = (char)System.in.read();
			}
			System.in.skip(5);
			co++;

이제 사용자의 숫자를 입력받습니다.

System.in.read()를 이용하여 입력받은 값을 select[i]에 넣습니다.

엔터를 제거하기 위해 System.in.skip(5); 을 넣습니다.

횟수를 세기 위한 co변수를 추가하고 while문이 돌아갈 때마다 횟수를 늘려줍니다.

 

		for(int i=0; i<3; ++i) {
				for (int j=0; j<3; ++j) {
					if (com[i] == select[j]) {
						if (i==j) {
							s++;
						}else {
							b++;
						}
					}
				}
			}

컴퓨터의 숫자와 사용자의 숫자를 비교하는 코드를 작성합니다.

자릿수와 숫자가 모두 같다면 s를, 숫자만 같다면 b를 증가시킵니다.

			if (s==3) {
				break;
			}else if (s==0 && b==0) {
				System.out.println("out");
			}else {
				System.out.printf("%dS %dB\n", s, b);
			}
		}
		
		System.out.println(co+"번만에 맞추셨습니다.");
	}
}

결과를 출력할 코드를 작성합니다.

s가 3이면 (횟수)번만에 맞추셨습니다. 로 출력합니다.

모두 틀렸을 경우에는 out

그 외에는 printf로 처리합니다.

 

잘 출력되었습니다.