📄 mapfunc.java
字号:
/*
* Created on 2006-6-30
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package all;
import java.awt.*;
import java.awt.image.ImageObserver;
/**
* @author kaito
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class MapFunc implements ImageObserver {
int enterx=200,entery=0;//地图开始的横纵坐标
int gridX=5,gridY=5;//地图格子数
int si,sj,ei,ej;
int[][] maze=new int[30][30];
int enter=300,width=20;
Image wall1,wall2;//墙的壁纸
Image wall12,wall22;//2d墙的壁纸
Graphics gw1,gw2;//2d墙画面
int w=106,h=85;//墙的大小
double wa=0.53,ha=0.175,wb=-0.49,hb=0.24;//构建单个地图坐标的加权值
public void mapInit(){
int i,j;
si=1;sj=1;ei=gridY;ej=gridX; // 设置出口和入口
for(i=0;i<=gridY+1;i++)
{
for(j=0;j<=gridX+1;j++){
if(i==0||j==0||i==gridY+1||j==gridX+1)
maze[i][j]=15; // 设置外墙
else
maze[i][j]=3; // 初始化迷宫内部
}
}
genmaze(ei,ej); // 产生迷宫
maze[ei][ej]=maze[ei][ej]&0xd; // 拆掉出口右墙
mapinit2d();
}
public void mapinit2d(){
gw1=wall12.getGraphics();
gw1.setColor(Color.BLACK);
gw1.fillRect(0,0,width,width);
gw2=wall22.getGraphics();
gw2.setColor(Color.BLACK);
gw2.fillRect(0,0,width,width);
}
public void genmaze(int i,int j){
int n;
maze[i][j]|=0x4;
while(maze[i][j+1]==3||maze[i+1][j]==3||maze[i][j-1]==3||maze[i-1][j]==3){
n=(int)(4*Math.random()+1);
if(n==1&&maze[i][j+1]==3){
maze[i][j]&=0xd;
genmaze(i,j+1);
}
else if(n==2&&maze[i-1][j]==3){
maze[i][j]&=0xe;
genmaze(i-1,j);
}
else if(n==3&&maze[i][j-1]==3){
maze[i][j-1]&=0xd;
genmaze(i,j-1);
}
else if(n==4&&maze[i+1][j]==3){
maze[i+1][j]&=0xe;
genmaze(i+1,j);
}
}
}
public void paintmaze25d(Graphics g,People people1){
int i,j;
g.clearRect(0,0,(gridX+3)*w,(gridY+6)*h);
j=0;
for(i=2;i<=gridY;i++){
g.drawImage(wall1,(int)((j-1)*wa*w+(i-1)*wb*w+enterx),(int)((i-1)*hb*h+(j-1)*ha*h+entery),(int)((j-1)*wa*w+(i-1)*wb*w+w+enterx),(int)((i-1)*hb*h+(j-1)*ha*h+h+entery),0,0,w,h,this);
}
for(i=1;i<=gridY;i++){
for(j=1;j<=gridX+1;j++){
if(j==people1.girlInMapX+1&&i==people1.girlInMapY){
people1.paintPeople(g);
int tempi=i,tempj=j;
if((maze[i][j-1]&2)==2){
j=people1.girlInMapX;i=people1.girlInMapY;
g.drawImage(wall1,(int)((j-1)*wa*w+(i-1)*wb*w+enterx),(int)((i-1)*hb*h+(j-1)*ha*h+entery),(int)((j-1)*wa*w+(i-1)*wb*w+w+enterx),(int)((i-1)*hb*h+(j-1)*ha*h+h+entery),0,0,w,h,this);
}
i=tempi;j=tempj;
}
if(j<=gridX){
if((maze[i][j]&1)==1){
g.drawImage(wall2,(int)((j-1)*wa*w+(i-1)*wb*w+enterx),(int)((i-1)*hb*h+(j-1)*ha*h+entery),(int)((j-1)*wa*w+(i-1)*wb*w+w+enterx),(int)((i-1)*hb*h+(j-1)*ha*h+h+entery),0,0,w,h,this);
}
if((maze[i][j]&2)==2){
g.drawImage(wall1,(int)((j-1)*wa*w+(i-1)*wb*w+enterx),(int)((i-1)*hb*h+(j-1)*ha*h+entery),(int)((j-1)*wa*w+(i-1)*wb*w+w+enterx),(int)((i-1)*hb*h+(j-1)*ha*h+h+entery),0,0,w,h,this);
}
}
}
}
i=gridY+1;
for(j=1;j<=gridX;j++){
g.drawImage(wall2,(int)((j-1)*wa*w+(i-1)*wb*w+enterx),(int)((i-1)*hb*h+(j-1)*ha*h+entery),(int)((j-1)*wa*w+(i-1)*wb*w+w+enterx),(int)((i-1)*hb*h+(j-1)*ha*h+h+entery),0,0,w,h,this);
}
}
public void paintmaze2d(Graphics g,People people1){
int x,y,i,j;
g.clearRect(enter,enter,(gridX+3)*width+enter,(gridY+6)*width);
g.drawImage(wall12,enter+width/4,enter+width/4,(gridX+2)*width+enter,enter+width+width/4,0,0,width,width,this);
g.drawImage(wall22,enter+width/4,enter+2*width+width/4,width+enter+width/4,(gridY+2)*width+enter,0,0,width,width,this);
g.drawImage(wall12,enter+width/4,(gridY+1)*width+enter,(gridX+2)*width+enter,(gridY+2)*width+enter,0,0,width,width,this);
g.drawImage(wall22,(gridX+1)*width+enter,width+enter,(gridX+2)*width+enter,(gridY)*width+enter+width/4,0,0,width,width,this);
for(i=1;i<=gridY;i++){
for(j=1;j<=gridX;j++){
x=(j)*width+enter;
y=(i)*width+enter;
if((maze[i][j]&1)==1){
g.drawImage(wall12,x,y,x+width,y+width,0,0,width,width*4,this);
}
if((maze[i][j]&2)==2){
g.drawImage(wall22,x+width,y,x+2*width,y+width,0,0,width*4,width,this);
}
}
//System.out.println(maze[i][0]+" "+maze[i][1]+" "+maze[i][2]+" "+maze[i][3]+" "+maze[i][4]+" "+maze[i][5]+" ");
}
System.out.println();
g.setColor(Color.RED);
g.fillRect(enter+people1.girlInMapX*20+13,13+enter+20*people1.girlInMapY,5,5);
}
public boolean imageUpdate(Image arg0, int arg1, int arg2, int arg3, int arg4, int arg5) {
// TODO Auto-generated method stub
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -