공부했던 자료 정리하는 용도입니다.

재배포, 수정하지 마세요.

 

 

 

 

 


빙고게임

 

간단한 빙고게임을 구현했다. 크기가 어느 정도인(정사각형) 빙고를 할지 입력받아서 각판의 내용을 입력받는다. 입력이 끝나면 실시간으로 전체 칸을 보여주면서 좌표를 입력할 때마다 해당 칸에 X표를 친다. q나 Q를 누르면 게임이 종료된다.

 

 Scanner 객체이름.nextLine( )  : 버퍼의  enter 를 제거해준다.

 

 

실행결과


 

크기를 입력받아서 해당 크기만큼의 2차원 배열을 생성한 다음에  for 문을 사용해서 각 빙고 값에 해당하는 값을 입력받는다. 입력이 모두 끝나면  for 문을 이용해서 전체 빙고판을 출력하고 좌표를 입력받아서 해당 좌표의 값을  x 로 바꾸는 과정을  while 문으로 무한히 반복한다.  if 문을 사용해서  q  Q 를 입력하면 프로그램이 종료된다. 사용자가 배열의 값을 벗어나는 좌표를 입력하는 경우는  try - catch 문으로 예외처리를 해서 값을 다시 입력하도록 처리했다.

 

package Example;

import java.util.*;	//Scanner 클래스를 사용하기 위한 import

public class Example {
	public static void main(String[] args) {
			
		int x = 0, y = 0;	//좌표값을 계산하기 위한 변수 x, y
		
		Scanner scanner = new Scanner(System.in);	//입력을 받기 위한 Scanner클래스의 객체 생성
		System.out.print("빙고의 크기(n을 입력하면 n x n의 빙고칸이 생성됨) : ");
		int tmp = scanner.nextInt();	//입력받은 문자열을 int로 변환해서 tmp에 저장
		scanner.nextLine();	//버퍼비우기(안하면 enter가 버퍼에 남아있을 수 있음)
		
		String[][] bingo = new String[tmp][tmp];	//입력한 빙고크기(tmp)만큼의 2차원배열 생성
		
		for(int i = 0 ; i < bingo.length ; i++) {	//각 빙고칸들의 값을 입력받기 위한 반복문(행의크기(i)만큼 반복)
			for(int j = 0 ; j < bingo[i].length ; j++) {	//열의 크기(j)만큼 반복
				
				System.out.print("(" + (i + 1) + ", " + (j + 1) + ") 의 값 입력: " );
				bingo[i][j] = scanner.nextLine();	//해당 배열의 위치에 입력받은 문자열값을 저장
			}
		}
		
		while(true) {	//입력을 계속해서 받기위한 반복문
			
			System.out.println("\n=======현재 빙고=======");
			for(int i = 0 ; i < bingo.length ; i++) {	//입력받은 전체빙고칸을 최종적으로 출력하기 위한 반복문
				for(int j = 0 ; j < bingo[i].length ; j++) {
					System.out.print(bingo[i][j] + "\t");
				}
				System.out.println();
			}
			System.out.println("=======================");
			
			System.out.print("(q를 누르면 종료)좌표를 입력하세요 ex) 1,2 : ");	
			String temp = scanner.nextLine();	//빙고칸을 x로 만들기 위해서 사용자에게 좌표를 입력받는다
			
			if(temp.equals("q") || temp.equals("Q")) {	//만약 q나 Q를 입력할 경우
				break;	//while문을 벗어남(프로그램 종료)
				
			}else {
				String[] loc = temp.split(",");	// 예를들어 입력이 1,2로 들어올 경우 콤마(,)를 기준으로 양옆의 숫자들을 분리해서 String배열인 loc에 저장한다.
				
				//좌표값을 저장할 x와 y에 loc[i]의 값을 int형으로 변환해서 저장한다.(split으로 분리된 값은 String타입)
				x = Integer.parseInt(loc[0]) - 1;	//사용자는 배열의 크기를 1부터 생각하지만 실제 배열은 0부터 시작하므로 1씩 뺀 값을 저장한다.
				y = Integer.parseInt(loc[1]) - 1;
				
				try{
					bingo[x][y] = "x";	//배열의 값을 벗어나는 값이 들어오면 오류가 발생할 수 있으므로 예외처리
					
				}catch (Exception e) {	//예외가 발생할 경우
					System.out.println("빙고의 크기에서 벗어나는 값입니다. 다시입력해주세요.");
					continue;	//while문의 처음으로 돌아간다
				}	
			}
		}
	}
}

'Back end > Java 문제' 카테고리의 다른 글

[Java] ArrayList 구현  (0) 2019.07.18
[Java] 배열회전  (0) 2019.07.10
[Java] 빈도수 구하기  (0) 2019.07.05
[Java] 배열 정렬(sort)  (0) 2019.07.03
[Java] 총합, 평균, 최대, 최소  (0) 2019.06.26

+ Recent posts