• PUDN用户
    了解作者
  • Java
    开发工具
  • 3KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 72
    下载次数
  • 2008-09-27 22:00
    上传日期
一个java写的小迷宫游戏程序,可以随即地产生迷宫地图,欢迎各位使用!
JMazeApplet.rar
  • www.pudn.com.txt
    218B
  • JMazeApplet.java
    11.1KB
内容介绍
import javax.swing.JApplet; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; //QQ:276081463 class Global { public static boolean bGameOver=true; public static int N=100; //地图维数N*N public static int MapBuf[][]; //保存地图的缓冲区 public static int MyX=100,MyY=100; //我方老鼠在迷宫内的位置 public static int EnemyX=100,EnymyY=100; //敌方方老鼠在迷宫内的位置 static int Left=50,Bottom=50; //屏幕左边,上边界,以像素为单位 static int Width=400,Height=400; //屏幕的宽度和高度,以像素为单位 static int PartialMapX=N-19; //用于显示的部分地图X坐标 static int PartialMapY=N-19; //用于显示的部分地图Y坐标 static int PartialMapCX=22; //用于显示的部分地图X长度 static int PartialMapCY=22; //用于显示的部分地图Y长度 static int GridLen=20; /////////////////////////////////////////////////// //初始化地图缓冲区 public static void InitMap(int n) //创建地图缓冲区 { N=n; MapBuf=new int [n+2][n+2]; //除去两条边界,正好是N*N } public static void Reset() { PartialMapX=N-20; PartialMapY=N-20; MyX=N; MyY=N; bGameOver=true; for(int i=0;i<N+2;i++) for(int j=0;j<N+2;j++) MapBuf[i][j]=0; } /////////////////////////////////////////////////////////// //将整个迷宫地图挖出来 public static void CreateMap() { //坐标(0,1)为出口,(N,N)为老鼠起始地址 DigMap m1=new DigMap(1,1,1);//标号为1,从坐标(1,1)开始挖 DigMap m2=new DigMap(2,N,N);//标号为2,从坐标(N,N)开始挖 DigMap m3=new DigMap(3,1,N);//标号为3,从坐标(1,N)开始挖 DigMap m4=new DigMap(4,N,1);//标号为4,从坐标(N,1)开始挖 boolean bLink=false; //判断地图是否挖通 //初始点先挖掉 m1.DigIt(); m2.DigIt(); MapBuf[0][1]=1; //从两边同时挖 while(!bLink) { bLink=m1.ContinuouslyDig();//随机方向,随机步长,返回是否挖通 if(!bLink) bLink=m2.ContinuouslyDig(); } m3.DigIt(); m4.DigIt(); bLink=false; while(!bLink) bLink=m3.ContinuouslyDig(); bLink=false; while(!bLink) bLink=m4.ContinuouslyDig(); } public static void ShowWholeMap(Graphics G) //显示整个地图 { } public static void ShowPartialMap(Graphics G) //只显示当前的部分地图 { // G.clearRect(Left,Bottom,Width+20,Height+20); G.setColor( Color.BLACK); for(int i=0;i<PartialMapCX;i++) for(int j=0;j<PartialMapCY;j++) { if(MapBuf[PartialMapX+i][PartialMapY+j]==0) G.fillRect(Left+i*GridLen,Bottom+j*GridLen,GridLen,GridLen); } G.setColor( Color.BLUE); if(PartialMapX<=0&&PartialMapY<=1) G.fillRect(Left+(0-PartialMapX)*GridLen,Bottom+(1-PartialMapY)*GridLen,GridLen,GridLen); G.setColor( Color.RED); G.fillRect(Left+(MyX-PartialMapX)*GridLen,Bottom+(MyY-PartialMapY)*GridLen,GridLen,GridLen); if(bGameOver) G.drawString("Gameover!",200,45); else G.drawString("Playing game!",200,45); G.drawString("按Enter键开始游戏",20,15); G.drawString("方向键移动红方块",20,30); G.drawString("出口在左上角",20,45); G.drawString("QQ:276081463",300,45); } } class DigMap { int Tag; //被挖点的标记 int X,Y; //在地图中的当前位置 int VX,VY; //x,y点的方向为(1,0)向左,(-1,0)向右,(0,1)向下,(0,-1)向上 int Step; //在一个方向上一次可以走动的步数 /*////////////////////////////////// *///构造函数传入3个参数,用于初始化Tag,X,Y DigMap(int t,int x,int y) { Tag=t; X=x; Y=y; VX=1; VY=0; } /*////////////////////////////////////////////////////////////////// *///将当前点挖 void DigIt() { Global.MapBuf[X][Y]=Tag; //将改点做标记,表示被挖过 } /*//////////////////////////////////////////////////////////////// *///在当前方向上走一步 void Walk() { X+=VX; Y+=VY; } /*///////////////////////////////////////////////////////////////// *///(x,y)点在(vx,vy)方向上的下一点是否被挖 boolean IsNextDigged(int x,int y,int vx,int vy) { return Global.MapBuf[x+vx][y+vy]==Tag;//改点的下一坐标是否为同一标记 } /*////////////////////////////////////////////////////////////////// *///检测是否撞墙,如果撞墙,则将方向取反 void HitWall() { if(X+VX<1||X+VX>Global.N) VX=(-1)*VX; if(Y+VY<1||Y+VY>Global.N) VY=(-1)*VY; } ////////////////////////////////////////////////////////////////////// ///检测当前的下一点 是否可以被挖,如果他在当前方向上的周围3个点都没被挖,则返回true boolean CanNextBeDigged() { int x=X+VX,y=Y+VY; //下一点的坐标 int vx=VY,vy=VX; //与原方向转弯的两个方向 if(IsNextDigged(x,y,VX,VY)) return false;//前一点是否被挖 if(IsNextDigged(x,y,vx,vy)) return false;//左一点是否被挖 if(IsNextDigged(x,y,-vx,-vy)) return false;//右一点是否被挖 return true;//周围都没被挖 } /*///////////////////////////////////////////////////////////////// ////如果下一个点没有被挖,而又不可挖, *///则必须跳到下一个点的周围三个点的之一 void Jump() { Walk(); int vx=VY,vy=VX;//与原方向转弯的两个方向 if(IsNextDigged(X,Y,VX,VY)) { Walk(); //前一点被挖,走过去 } else if(IsNextDigged(X,Y,vx,vy)) { X+=vx; //左一点被挖,走过去 Y+=vy; } else if(IsNextDigged(X,Y,-vx,-vy)) { X-=vx; Y-=vy; //右一点被挖,走过去 } } /*///////////////////////////////////////////////////////////////// *///检测是否已经连接上了,即当前点的周围存有被另一种标记挖过的点 boolean IsLinked() { boolean r=false; int vx=VY,vy=VX;//与原方向转弯的两个方向 //如果改点既不是自身标记又不是原有标记,则该点被别的挖过 if(Global.MapBuf[X+VX][Y+VY]!=Tag&&Global.MapBuf[X+VX][Y+VY]!=0) r=true; //前一个点是否被别的挖 else if(Global.MapBuf[X+vx][Y+vy]!=Tag&&Global.MapBuf[X+vx][Y+vy]!=0) r=true;//左一个点是否被别的挖 else if(Global.MapBuf[X-vx][Y-vy]!=Tag&&Global.MapBuf[X-vx][Y-vy]!=0) r=true;//右一个点是否被别的挖 return r; } /*///////////////////////////////////////////////////////////// ////产生随机方向 *///(-1,0)向左,(1,0)向右,(0,-1)向上,(0,1)向下 void RandomVxy() { int vx=VY; int vy=VX; int k=(int)(Math.random()*80); //将随机数平均分成4个空间,产生4个方向 if(0<=k && k<10) {VX=(-1)*VX; VY=(-1)*VY;} //向左 else if(10<=k&&k<20) {/*VX=(); VY=0;*/} //向右 else if(20<=k&&k<50) {VX=vx; VY=vy;}//向上 else if(50<=k&&k<=80) {VX=-vx; VY=-vy;} // } /*/////////////////////////////////////////////////////////// *///产生随机步长,在一个方向上一次可以走动的步数 void RandomStep() { Step=1+(int)(Math.random()*3); } /*///////////////////////////////////////////////////////// * 在当前方向上连续走Step步, *///如果挖通,返回true,反之,false; boolean ContinuouslyDig() { RandomVxy(); RandomStep(); int i=0; while(i<Step) { HitWall(); //首先检测是否撞墙,如果撞墙方向取反 //对于下一点的三种策略:1走过 2走过去挖掉 3跳过去 if(IsNextDigged(X,Y,VX,VY))//检测下一点是否被挖 { Walk();//已经被挖,走过去 } else if(CanNextBeDigged())//没有被挖,是否可以挖 { Walk();//可以挖,走过去, DigIt();//挖掉 if(IsLinked()) return true;//如果挖通,跳出循环,并返回 } else { //不可以挖,跳过去 Jump();
评论
    相关推荐
    • 基于java迷宫小游戏
      迷宫游戏包含三个难度等级选择,有菜单栏,及退出操作,可以观察到路线,等等功能。
    • Java Swing 小游戏 迷宫
      Java Swing 小游戏 迷宫 键盘事件的 监听 数组的应用
    • Java迷宫游戏
      JAVA实现的迷宫游戏,生成迷宫算法简单,随机生成,概率上不能百分之百生成能通的迷宫,但因为是随机数字,连续几次生成同一个数字的概率相对很,所以生成不通的迷宫的可能性也相当相当的
    • java迷宫小游戏
      可以简单找出路径,但是不是最优路径,还需要优化查找最优路径
    • 迷宫游戏Java语言版
      迷宫游戏Java语言实现,可以自动生成迷宫。界面尚好,可以一玩。 有兴趣的看看。
    • java迷宫小游戏源码打包
      java迷宫游戏,添加难度选择,自动演示功能 截图: http://hiphotos.baidu.com/pposحؼ
    • java实现迷宫小游戏
      java实现迷宫小游戏的完整代码,按下空格为系统提示,上下左右控制移动。本实例需要从 .txt 文件中读取迷宫并绘制。 本程序适用于java程序员巩固类与对象、文件读取、事件响应、awt包中各种工具的相关概念以及对...
    • java迷宫小游戏
      java迷宫小游戏java迷宫小游戏java迷宫小游戏java迷宫小游戏java迷宫小游戏
    • Java小游戏迷宫
      Java代码编写的小游戏,已经可以在eclipse上运行成功。
    • java实现的迷宫小游戏
      Java实现的迷宫小游戏Java的期末课程设计,可以很好地学习Java语言,对初学者帮助很大。