~cpp
import javax.swing.JOptionPane;
public class Board {
private int array[][]; //판의 배열
private int max_x; //판의 가로크기
private int max_y; //판의 세로크기
//판을 생성
public Board(int x, int y) {
max_x = x;
max_y = y;
array = new int[max_y][max_x];
for (int i = 0; i < max_y; i++)
for (int j = 0; j < max_x; j++)
array[i][j] = 0;
}
//발자국이 가득 채워졌니?
public boolean IsStepFull() {
for (int i = 0; i < max_y; i++)
for (int j = 0; j < max_x; j++)
if (array[i][j] == 0)
return false;
return true;
}
//주어진 위치가 벽이니?
public boolean IsPostionWall(int x, int y) {
if (x == -1 || x == max_x || y == -1 || y == max_y)
return true;
else
return false;
}
//발자국을 찍는다
public void PutStep(int x, int y) {
array[y][x]++;
//아래주석표시를 지우면 발자국을 찍을때마다 보여줌
//ShowStep();
}
//발자국을 보여준다
public void ShowStep() {
String output = "";
for (int i = 0; i < max_y; i++)
{
for (int j = 0; j < max_x; j++)
output += array[i][j] + " ";
output += '\n';
}
JOptionPane.showMessageDialog(null, output);
}
}
~cpp
public class Roach {
private int p_x; // 바퀴의 현재 x 위치
private int p_y; // 바퀴의 현재 y 위치
//바퀴의 이동
public void Move(Board bo, int x, int y) {
p_x = x;
p_y = y;
bo.PutStep(p_x, p_y);
while (!bo.IsStepFull()) {
int c_x; // 바퀴가 이동할 x 위치
int c_y; // 바퀴가 이동할 y 위치
do
{
c_x = p_x;
c_y = p_y;
int dir = (int)(Math.random() * 8);
switch (dir)
{
case 0:
c_y--;
break;
case 1:
c_x++;
c_y--;
break;
case 2:
c_x++;
break;
case 3:
c_x++;
c_y++;
break;
case 4:
c_y++;
break;
case 5:
c_x--;
c_y++;
break;
case 6:
c_x--;
break;
case 7:
c_x--;
c_y--;
break;
}
} while (!SeeNextPos(bo, c_x, c_y));
p_x = c_x;
p_y = c_y;
bo.PutStep(p_x, p_y);
}
}
//이동할 자리를 살핀다
//벽이면 false 벽이 아니면 true
public boolean SeeNextPos(Board bo, int x, int y) {
if (bo.IsPostionWall(x, y))
return false;
else
return true;
}
}
~cpp
import javax.swing.JOptionPane;
public class Human {
// 바퀴를 놓는다
public void PutRoach (Roach ro, Board bo, int x, int y) {
ro.Move(bo, x, y);
}
// KillRoach를 어떻게 사용할까???
public void KillRoach (Roach ro) {
//생명을 보호합시다 ^^
}
// 판을 본다
public void SeeBoard (Board bo) {
bo.ShowStep();
}
public static void main(String[] args) {
int start_x, start_y; // 바퀴의 시작위치 받을 변수
int board_x, board_y; // 판의 크기 받을 변수
Human sehwan = new Human();
Roach roach = new Roach();
board_x = Integer.parseInt(JOptionPane.showInputDialog(null, "격자의 가로크기"));
board_y = Integer.parseInt(JOptionPane.showInputDialog(null, "격자의 세로크기"));
start_x = Integer.parseInt(JOptionPane.showInputDialog(null, "바퀴의 가로위치"));
start_y = Integer.parseInt(JOptionPane.showInputDialog(null, "바퀴의 세로위치"));
// 시작위치 맨왼쪽위가 (0,0)
Board board = new Board(board_x, board_y);
sehwan.PutRoach(roach, board, start_x, start_y); // 바퀴를 놓는다
sehwan.SeeBoard(board); // 다 돌면 판을 본다
}
}
~cpp
class 클래스이름 {
// 변수 선언부
…
// 메소드 선언부
…
}
인스턴스 생성~cpp 클래스이름 클래스인스턴스이름 = new 클래스이름(); 또는 클래스이름 클래스인스턴스이름; 클래스인스턴스이름 = new 클래스이름();다.변수 및 메소드의 접근제어
~cpp
클래스이름(형식매개변수 리스트) { … }
클래스이름(형식매개변수 리스트) {
다른 객체 생성자 호출; // 반드시 첫번째 줄에서 이루어져야 함.
…
}
클래스이름 변수이름 = new 클래스이름(실매개변수 리스트);
나.this~cpp [접근권한] static 변수 선언; [접근권한] static 메소드 선언; 클래스 변수와 클래스 메소드의 접근) 클래스이름.클래스메소드() 클래스메소드() 객체참조값.클래스메소드()
~cpp
static 변수선언=초기값;
또는
static 배열형변수선언=new 배열형;
static {
여러 개의 변수들의 초기화
또는
배열의 초기화;
}