- 이번에는 자바 배열과 그동안 배운 문법을 통해서 배스킨라빈스 31게임을 만들어 보겠습니다.
- 술자리에서 많이 하는 게임이죠?
- 숫자는 1~31까지 부르는 게임입니다.
- 이때 1~3개까지만 부를 수 있고, 31을 부르면 지는 게임입니다.
- 이 게임은 컴퓨터와 사용자만 한다는 가정하에 제작해보도록 하겠습니다.
ex) 예시
베스킨라빈스31, 컴퓨터부터 시작!!!
cop : 1 2 3
몇개 부르겠습니까?(1~3) : 2
user : 4 5
...
com : 30
몇개 부르겠습니까?(1~3) : 3
user : 31
com 승! user 패!
- 컴퓨터가 30을 불렀는데, 사용자가 3개 부를 순 없겠죠?
- 그래서 몇개를 누르든 31만 나와야 합니다.
- 이런 경우의 수까지 잘 계산해서 만들어보세요!
1. 1~31까지 담는 배열 처리
- 배스킨라빈스는 1~31의 숫자를 반환합니다.
- 물론 그냥 숫자로도 할 수 있지만, 배열 공부를 위해 배열에 1~31까지의 숫자를 담아 보겠습니다.
- 그리고 게임은 31이 아닐 때까지 반환해야 하므로 반복문을 사용하겠습니다.
## 배열 처리 코드 - Ex15_ArrayBR31.java
package ch18_array;
import java.util.Scanner;
public class Ex15_ArrayBR31 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //Scanner호출
//1~31까지 담을 배열
int nums[] = new int[31];
//1~31까지 값을 담기
for(int i=0;i<nums.length;i++) {
nums[i] = i + 1;
}
//몇번까지 진행됬는지를 담는 변수
int count = 0;
//컴퓨터가 부르는 개수 랜덤 범위
int min = 1, max = 3;
int r = 0; //랜덤한 숫자 선언
//시작문구
System.out.println("배스킨라빈스31, 컴퓨터부터 시작!!!");
while(count != nums.length) { //마지막 번호인 31과 같지 않을 때까지 반환
}
scan.close(); //Scanner종료
}
}
- 설명은 주석에 달았습니다.
2. 반복문 내부 처리 - 게임처리
- 컴퓨터 먼저 1~3 사이로 랜덤 하게 숫자를 부릅니다.
- 이때, 27까지 불려진 상태라면 컴퓨터는 28,29,30만 3개를 부릅니다.
- 28까지 불려진 상태라면 컴퓨터는 29,30만 2개를 부릅니다.
- 그리고 29까지 불려진 상태라면 당연히 1개만 부르겠죠?
- 사용자는 1~3사이의 숫자를 입력하면 숫자를 이어서 부르게 처리합니다.
- 사용자가 1~3사이의 숫자를 누른 것이 아니라면 다시 입력하도록 처리해야 합니다.
- 사용자는 28일 때 1~3사이 숫자를 모두 부를 수 있게 처리합니다. 잘못생각할 수도 있기 때문입니다.
- 사용자가 29일 때는 1을 부르는 게 아니라면 모두 2로 처리해야합니다. 3을 부르면 31 숫자를 넘어가기 때문에 에러가 발생합니다. 배열의 개수보다 높은 숫자를 불렀기 때문입니다.
- 사용자가 30일 때는 1~3사이를 눌러도 무조건 1로 처리를 해줘야 합니다.
- 이 경우들을 잘 생각해서 만들어줘야 합니다.
## 반복문 내부 코드 - Ex15_ArrayBR31.java
package ch18_array;
import java.util.Scanner;
public class Ex15_ArrayBR31 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //Scanner호출
//1~31까지 담을 배열
int nums[] = new int[31];
//1~31까지 값을 담기
for(int i=0;i<nums.length;i++) {
nums[i] = i + 1;
}
//몇번까지 진행됬는지를 담는 변수
int count = 0;
//컴퓨터가 부르는 개수 랜덤 범위
int min = 1, max = 3;
int r = 0; //랜덤한 숫자 선언
//시작문구
System.out.println("배스킨라빈스31, 컴퓨터부터 시작!!!");
while(count != nums.length) { //마지막 번호인 31과 같지 않을 때까지 반환
if(count < 27) { //27보다 작을 때 1~3사이 랜덤 숫자
r = (int)(Math.random()*(max - min + 1) + min);
}else if(count == 27){ //27이면 무조건 3개 부름
r = 3;
}else if(count == 28){ //28이면 무조건 2개
r = 2;
}else { //29면 무조건 1개
r = 1;
}
//com : 출력
System.out.print("com : ");
//r개수만큼만 숫자 반환
for(int i=0;i<r;i++) {
System.out.print(nums[count] + " ");
count++; //실행숫자는 1씩 증가
}
System.out.println();
//com 순서에서 31보다 커지면 user승 후 반복문 벗어남
if(count > 30) {
System.out.println("user 승! com 패!");
break;
}
//user입력
System.out.print("몇개 부르겠습니까?(1~3) : ");
int num = scan.nextInt();
//1~3사이를 누른 게 아니면 다시 숫자 받기
while(num > 3 || num < 1) {
System.out.println("1~3사이만 부르세요.");
System.out.print("몇개 부르겠습니까?(1~3) : ");
num = scan.nextInt();
}
//29까지 불렀을 때
if(count == 29){
if(num != 1) { //사용자가 1개를 입력한게 아니면
num = 2; //3이어도 2로 변경
}
}else if(count == 30) { //30까지 나온 경우는
num = 1; //1~3사이를 눌러도 무조건 1개로 31처리
}
//사용자 숫자 출력
System.out.print("user : ");
for(int i=0;i<num;i++) {
System.out.print(nums[count] + " ");
count++;
}
System.out.println();
//사용자가 31 부르면 com 승
if(count > 30) {
System.out.println("com 승! user 패!");
break;
}
}
scan.close(); //Scanner종료
}
}
- 코드에 주석으로 설명을 달아놨습니다.
## 반복문 내부 결과 - Ex15_ArrayBR31.java
'컴퓨터언어 > JAVA(자바)' 카테고리의 다른 글
[JAVA강좌] 34강 다차원 배열 (0) | 2024.01.29 |
---|---|
[JAVA] 33강 자바 객체 배열 - 학생 성적 관리 (0) | 2024.01.29 |
[JAVA강좌] 31강 자바 배열 - 로또 프로그램 (1) | 2024.01.29 |
[JAVA강좌] 30강 배열 정렬 - sort() (0) | 2024.01.26 |
[JAVA강좌] 29강 배열 복사하기 (0) | 2024.01.26 |