~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 { 여러 개의 변수들의 초기화 또는 배열의 초기화; }