B라는 객체가 피쉬라고 가정을 하고 a, s, w, z 로 왼쪽, 오른쪽, 위, 아래로 움직이도록 Scanner로 받아서 처리해 줍니다.
파일이름은 Game.java 라는 파일을 만들 겠습니다.
- 소스코드
import java.util.Scanner;
// 공통 클래스
// abstract는 공통 클래스를 생성헤서 메소드를 관리 한다
abstract class GameObject{
protected int distance; // 오브젝트 이동 변수
protected int x, y; // 오브젝트 좌표
protected int px, py; // 이동된 오브젝트에 -를 생성
// 초기 클래스 오브젝트 생성
public GameObject(int startX, int startY, int 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 x, int y, int 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의 배열 변수에 재생성 해준다.
}
}
}
'IT, 인터넷 > JAVA, 스프링부트' 카테고리의 다른 글
자바 BufferedWriter, FileWriter, File를 이용해서 파일 생성 및 삭제하기 (0) | 2021.10.05 |
---|---|
자바 좌표값을 랜덤으로 뽑아서 오브젝트 충돌이 되는지 확인 (0) | 2021.09.30 |
java.lang.reflect.Array를 이용한 배열 생성 (0) | 2021.09.30 |
자바 과목의 점수로 합계, 평균, 등수 구하기 (0) | 2021.09.29 |
자바 Scanner로 숫자 10개 입력 받아 합 구하기 (0) | 2021.09.29 |