본문 바로가기

컴퓨터언어/JAVA(자바)

[JAVA강좌] 32강 자바 배열 - 배스킨라빈스31게임

728x90
반응형

 

 

 

 

 

 

 

 

- 이번에는 자바 배열과 그동안 배운 문법을 통해서 배스킨라빈스 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종료
	}

}

 

- 설명은 주석에 달았습니다. 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

728x90
반응형