공부/과제.

JAVA 문제풀이 13 배열 낚시 게임

햄이; 2021. 4. 28. 11:00

 

Q1. 이차원 배열을 이용한 낚시게임 (세부 문제 내용은 코드 확인)

package Day9;

import java.util.Random;
import java.util.Scanner;

/*
 * Q.20 낚시게임
 * 5*5 크기의 호수에 물고기 3마리가 있다.
 * 물고기의 좌표는 랜덤을 통해 물고기의 위치가 정해진다.
 * (단, 같은 자리에 물고기가 2마리 있을 수 없다.)
 * 호수와 물고기의 세팅이 끝나면 낚시 게임이 시작된다.
 * 
 * 1. 낚시꾼의 캐스팅을 입력한다
 * 2. x,y좌표를 입력하세요 : 좌표 입력(엔터) 
 * 좌표값 0~4사이가 아니면 잘못된 캐스팅 출력하고 재 캐스팅
 * 캐스팅을 올바르게 했다면 좌표에 물고기가 있는지 체크할 것
 * 만약 그 위치에 물고기가 있으면 "물고기 1마리를 잡았습니다." 출력
 * 
 * 낚시대를 움직이는 게임 시작
 * 3. 위 2. 아래 3. 왼쪽 4. 오른쪽 : (이동숫자)(엔터) 입력
 * 캐스팅 위치에서 위 -y 아래 +y 왼쪽 -x 오른쪽 +x 한 칸씩 이동
 * 만약 호수의 크기를 벗어나는 캐스팅이면 "더 이상 이동을 할 수 없습니다" 출력
 * 다시 3번 과정으로 이동
 * 물고기 3마리를 모두 잡으면 축하합니다 출력을 하고 프로그램 종료
 * */
public class Question3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub


		Random r = new Random();
		Scanner sc = new Scanner(System.in);
		int [][] place = new int[5][5];
		int row; //물고기 좌표 행
		int col; //물고기 좌표 열

		int x; // 캐스팅 좌표 행
		int y; // 캐스팅 좌표 열
		int fish = 0; // 잡은 물고기의 수


		while(fish<3) {//물고기의 수가 3미만 일 때만 반복

			//물고기 세 마리 랜덤으로 넣어주기
			for(int i=0; i<3; i++) {
				row = r.nextInt(5);
				col = r.nextInt(5);
				if(place[row][col]==0) {
					place[row][col] = 1; //비어있는 자리일 때 1(물고기) 입력
				}else {
					i--;
				}
			}

			//테스트용 물고기의 위치 출력
			System.out.println("물고기의 위치");
			for(int i=0; i<place.length; i++) {
				for(int j=0; j<place.length; j++) {
					if(place[i][j]!=0) 
						System.out.println(+i+" "+j+" ");
				}
			}

 

 

while(fish<3) {

	System.out.println("캐스팅 하겠습니다.");
	System.out.println("X좌표를 입력하세요");
	x = sc.nextInt();
	System.out.println("Y좌표를 입력하세요");
	y = sc.nextInt();
	int fishing; // 낚시대 방향

	if(x>=0 && x<5 && y>=0 && y<5) { //x,y좌표가 0~4 사이일 때

		if(place[x][y]==1) { // 물고기가 있을 때
			System.out.println("물고기 1마리를 잡았습니다.");
			place[x][y] = 0; // 물고기가 잡혀서 그 자리는 0으로 바꿔준다.
			fish++; // 잡은 물고기 수 +1
		}else {
			System.out.println("물고기가 없습니다.");
		}


	//캐스팅 위치에서 낚시대 이동 시작
		while(true) {
			System.out.println("낚시대를 어디로 움직이시겠습니까?");
			System.out.println("1. 위  | 2. 아래 | 3. 왼쪽 | 4. 오른쪽 ");
			fishing = sc.nextInt();

			if(fishing>0 && fishing<5) { // 1~4 사이의 메뉴를 선택했을 때

				switch(fishing) {
				case 1 :{ // 위
					y--;
					if(y<0 || y>4) {
						System.out.println("더이상 이동할 수 없습니다.");
						y++;
					}
					System.out.println("현재 좌표"+x+" "+y);
					break;
				}case 2 :{ // 아래
					y++;
					if(y<0 || y>4) {
						System.out.println("더이상 이동할 수 없습니다.");
						y--;
					}
					System.out.println("현재 좌표"+x+" "+y);
					break;
				 }case 3 :{ // 왼쪽
					x--;
					if(x<0 || x>4) {
						System.out.println("더이상 이동할 수 없습니다.");
						x++;
					}
					System.out.println("현재 좌표"+x+" "+y);
					break;

				  }case 4 :{ // 오른쪽
					x++;
					if(x<0 || x>4) {
						System.out.println("더 이상 이동할 수 없습니다.");
						x--;
					}
					System.out.println("현재 좌표"+x+" "+y);
					break;
					}
				}
                

		//물고기 마리수 체크
	if(place[x][y]!=0) {
			System.out.println("물고기 1마리를 잡았습니다.");
			place[x][y]=0;
			fish++;
			System.out.println("현재 물고기 수 :"+fish);
			if(fish==3) {
				System.out.println("축하합니다 물고기 3마리를 모두 잡았습니다.");
				break;
			}
		}
	       }else {
			  System.out.println("잘못된 입력입니다. 다시 선택해주세요");
			}
 		}

	}else {
				System.out.println("잘못된 캐스팅입니다.");
				System.out.println();
			}		
		}
	}
}
}

코드가 밀리게 나와서 중간에 반 잘라서 업로드!

 

맨 처음 실행화면
물고기 3마리를 다 잡고 난 뒤의 결과 화면