본문 바로가기

IT, 인터넷/JAVA, 스프링부트

자바 피쉬 게임 만들기

반응형

B라는 객체가 피쉬라고 가정을 하고 a, s, w, z 로 왼쪽, 오른쪽, 위, 아래로 움직이도록 Scanner로 받아서 처리해 줍니다.

파일이름은 Game.java 라는 파일을 만들 겠습니다.

 

  • 소스코드

import java.util.Scanner; 

// 공통 클래스

// abstract는 공통 클래스를 생성헤서 메소드를 관리 한다

abstract class GameObject

      protected int distance// 오브젝트 이동 변수

      protected int xy// 오브젝트 좌표

      protected int pxpy// 이동된 오브젝트에 -를 생성

 

      // 초기 클래스 오브젝트 생성

      public GameObject(int startXint startYint distance) { 

        this.x = px = startX; 

        this.y = py = startY; 

        this.distance = distance; 

     }

 

    protected abstract void move(); 

    protected abstract char getShape(); 

 

class Bear extends GameObject { 

 

      Scanner sc = new Scanner(System.in); 

 

      public Bear(int xint yint distance) { 

        super(x, y, distance); // 부모 [GameObject] 클래스에 값을 set

     } 

     public void move() { 

       px = x; 

       py = y; 

 

       String s = sc.next(); 

       char c = s.charAt(0); 

 

       switch(c) { 

         case 'a': 

             x = x - distance; 

             break;

         case 's': 

             x = x + distance; 

             break

         case 'z': 

             y = y + distance; 

             break

         case 'w': 

             y = y - distance; 

             break

      } 

 

       // 화면에서 사라지지 않도록 코딩

       if(x < 0) {

           x = 0;

       }

       

       // x좌표가 0~14 이므로 15가 되면 밑으로 이동하게 set

       if(x == 15) {

           x = 0;

           y += 1;

       }

    } 

 

    // 오브젝트를 생성해 준다

    public char getShape() { 

      return 'B'

    } 

 

class GameMap { 

 

  private char map[][]; 

 

  //맵 생성 

  public GameMap() { 

    map = new char[10][15]; 

    for(int i = 0; i < 10; i++) { 

      for(int j = 0; j < 15; j++) { 

        map[i][j] = '-'

       } 

    } 

  } 

  

    //Bear and Fish 초기 Object 설정  

    public void inputObject(GameObject obj) { 

        map[obj.y][obj.x] = obj.getShape(); 

    } 

 

    //Bear or Fish Object 그리기 

    public void drawObject(GameObject obj) { 

        try { 

            // map의 배열에 오브젝트를 생성해 준다.

            map[obj.y][obj.x] = obj.getShape(); 

            

            if(obj.x != obj.px// x, px가 같지 않은 경우만 -

                map[obj.py][obj.px] = '-'

            

            if(obj.y != obj.py// y, py가 같지 않은 경우만 -

                map[obj.py][obj.px] = '-'

        } 

        catch(Exception e) { // 에러 발생시 실행 : y 좌표가 좌표 이탈시에 에러 발생

            obj.y = obj.py

            obj.x = obj.px

        } 

    } 

 

    //전체 맵 그리기 

    public void showMap() { 

      for(int i = 0; i < 10; i++) { 

        for(int j = 0; j < 15; j++) { 

          System.out.print(map[i][j]); 

        } 

        System.out.println(); 

      } 

    } 

 

public class Game { 

  public static void main(String[] args) { 

      

      // x,y 난수값 생성

      int xmin = 0, xmax = 14;

      int x = (int) (Math.random() * (xmax - xmin + 1) + xmin);

      

      int ymin = 0, ymax = 9;

      int y = (int) (Math.random() * (ymax - ymin + 1) + ymin);

      

        GameMap GM = new GameMap(); 

        Bear B = new Bear(x, y, 1);  // 오브젝트 생성

        GM.inputObject(B); // map 배열에 오브젝트를 생성해 준다

 

        System.out.println("**Bear의 Fish 먹기 게임을 시작합니다**"); 

 

        // 게임시작

        while(true) { 

          GM.showMap(); // 게임이 시작 되면 map을 그려준다.

          System.out.println("왼쪽(a), 오른쪽(s), 위(w), 아래(z) >> "); 

          B.move(); // 입력한 값으로 이동

          // 오브젝트를 이동한 만큼 다시 생성을 하면 게임 시작전 showMap으로 맵을 다시 그린다.

          GM.drawObject(B); // 이동한 오브젝트를 map의 배열 변수에 재생성 해준다.

       } 

  } 

 

 

반응형