- Home ›
- Applet(アプレット)入門 ›
- アプレットサンプル ›
- HERE
迷路を表示する
広告
このアプレットは、5秒毎に新しい迷路を作成して表示するだけのものです。
実際に実行すると下記のような感じになります。
5秒経過すると次の迷路が表示されます。
迷路作成のアルゴリズムは「棒倒し法」です。プログラム的には特に目新しいことは行っておらず、5秒毎に迷路を作成しなおしてrepaintメソッドを呼び出して画面を更新してるだけです。
迷路作成の部分だけ参考までに記載しておきます。
int block[][];
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
public void init(){
block = new int[21][21];
makeMaze();
}
private void makeMaze(){
/* 全体をクリア */
for (int i = 0 ; i < 21 ; i++){
for (int j = 0 ; j < 21 ; j++){
block[i][j] = 0;
}
}
/* 外枠をセット */
for (int i = 0 ; i < 21 ; i++){
block[0][i] = 1;
block[20][i] = 1;
block[i][0] = 1;
block[i][20] = 1;
}
/* 基準点をセット */
for (int i = 1 ; i <= 9 ; i++){
for (int j = 1 ; j <= 9 ; j++){
block[i * 2][j * 2] = 1;
}
}
/* 迷路作成 */
for (int i = 1 ; i <= 9 ; i++){
for (int j = 1 ; j <= 9 ; j++){
if (i == 1){
int d = (int)(Math.random() * 4);
block[i * 2 + dx[d]][j * 2 + dy[d]] = 1;
}else{
boolean flag = true;
while(flag){
int d = (int)(Math.random() * 3);
if (block[i * 2 + dx[d]][j * 2 + dy[d]] == 0){
block[i * 2 + dx[d]][j * 2 + dy[d]] = 1;
flag = false;
}
}
}
}
}
}
サンプル
下記が全てのソースファイルです。
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
public class Sample4 extends Applet implements Runnable{
Thread thread = null;
Dimension size;
Image back;
Graphics buffer;
int block[][];
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
public void init(){
size = getSize();
back = createImage(size.width, size.height);
buffer = back.getGraphics();
block = new int[21][21];
makeMaze();
thread = new Thread(this);
thread.start();
}
private void makeMaze(){
/* 全体をクリア */
for (int i = 0 ; i < 21 ; i++){
for (int j = 0 ; j < 21 ; j++){
block[i][j] = 0;
}
}
/* 外枠をセット */
for (int i = 0 ; i < 21 ; i++){
block[0][i] = 1;
block[20][i] = 1;
block[i][0] = 1;
block[i][20] = 1;
}
/* 基準点をセット */
for (int i = 1 ; i <= 9 ; i++){
for (int j = 1 ; j <= 9 ; j++){
block[i * 2][j * 2] = 1;
}
}
/* 迷路作成 */
for (int i = 1 ; i <= 9 ; i++){
for (int j = 1 ; j <= 9 ; j++){
if (i == 1){
int d = (int)(Math.random() * 4);
block[i * 2 + dx[d]][j * 2 + dy[d]] = 1;
}else{
boolean flag = true;
while(flag){
int d = (int)(Math.random() * 3);
if (block[i * 2 + dx[d]][j * 2 + dy[d]] == 0){
block[i * 2 + dx[d]][j * 2 + dy[d]] = 1;
flag = false;
}
}
}
}
}
}
public void update(Graphics g){
paint(g);
}
public void paint(Graphics g){
buffer.setColor(Color.black);
buffer.fillRect(0, 0, size.width, size.height);
for (int i = 0 ; i < 21 ; i++){
for (int j = 0 ; j < 21 ; j++){
if (block[i][j] == 1){
buffer.setColor(Color.white);
buffer.fillRect(j * 15, i * 15, 15, 15);
buffer.setColor(Color.blue);
buffer.drawRect(j * 15 + 1, i * 15 + 1, 13, 13);
}
}
}
buffer.setColor(Color.red);
buffer.fillRect(15 + 1, 15 + 1, 13, 13);
buffer.setColor(Color.blue);
buffer.fillRect(15 * 19 + 1, 15 * 19 + 1, 13, 13);
g.drawImage(back, 0, 0, this);
}
public void run(){
while(true){
repaint();
makeMaze();
/* 5000ミリ秒待機する */
try{
Thread.sleep(5000);
}catch (InterruptedException e){
}
}
}
}
( Written by Tatsuo Ikura )
JavaDrive