迷宫java
① java自动走迷宫线程问题
以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
(1) 根据二维数组,输出迷宫的图形。
(2) 探索迷宫的四个方向:RIGHT为向右,DOWN向下,LEFT向左,UP向上,输出从入口到出口的行走路径。
② java迷宫图形界面
这是我之前课程设计做的一个迷宫,Swing做的,发在javaeye的博客上了,有打包成jar的,安装了jdk可以直接双击运行,有源码,还有我写的一个说明文档,网址如下:
http://zpsailor.javaeye.com/admin/blogs/651141
自己下载下吧,我就不给你发到邮箱了。
③ 求用java语言寻找走出迷宫路线的算法
首先给定一个初始坐标,然后构建一个容器保存坐标值,之后进行迭代,横坐标+1,或者纵坐标+1,这个顺寻自己定义(四个方向),经过的“路径”保存在那个容器中,如果遇到死角,以此往回迭代,在容器中将遇到死角的那个坐标删除。最后找到自己定义的那个迷宫出口坐标。
④ 求Java关于迷宫的算法(用栈实现)
packagecom.Albert.LabyringhStack;
publicclassPoint{
intx;
inty;
intdirection;//direction指向此点附近的一个点应该有四个编号为1234
publicintgetX(){
returnx;
}
publicvoidsetX(intx){
this.x=x;
}
publicintgetY(){
returny;
}
publicvoidsetY(inty){
this.y=y;
}
publicintgetDirection(){
returndirection;
}
publicvoidsetDirection(intdirection){
this.direction=direction;
}
publicvoidaddDirection(){
this.direction++;
}
publicPoint(){
}
publicPoint(intx,inty){
super();
this.x=x;
this.y=y;
this.direction=1;
}
publicPoint(intx,inty,intdirection){
super();
this.x=x;
this.y=y;
this.direction=direction;
}
}
packagecom.Albert.LabyringhStack;
importjava.util.*;
publicclassLabyringhStack{
publicPointS;
publicPointF;
char[][]mazemap;
Stack<Point>path;
publicLabyringhStack(){
}
publicLabyringhStack(char[][]ma){//初始化存入数组
this.mazemap=newchar[ma.length][ma[0].length];
for(inti=0;i<ma.length;i++){
for(intj=0;j<ma[0].length;j++){//mazemap[0]必须有元素不可为空
this.mazemap[i][j]=ma[i][j];
}
}
S=returnPlace('S');
F=returnPlace('F');
}
publicPointreturnPlace(chars){//返回数组中字符的位置
Pointpoint=newPoint();
for(inti=0;i<this.mazemap.length;i++){
for(intj=0;j<this.mazemap[0].length;j++){//mazemap[0]必须有元素不可为空
if(this.mazemap[i][j]==s)
{point.setX(i);
point.setY(j);
point.setDirection(1);
}
}
}
returnpoint;
}
publiccharreturnChar(Pointpoint){
if(point.getX()>=0&&point.getY()>=0)
returnthis.mazemap[point.getX()][point.getY()];
else
return'#';
}
publicvoidreplacePlace(Pointpoint,chars){//更改特定位置处的字符
mazemap[point.getX()][point.getY()]=s;
}
publicvoidprintPath(){
Stack<Point>tempPath=newStack<Point>();
while(!path.empty()){//对栈进行反序
tempPath.push(path.pop());
}
while(!tempPath.empty()){
System.out.print("("+tempPath.peek().getX()+","+tempPath.pop().getY()+")");
}
}
publicbooleangetPath(){//取得路径的算法如果有路径就返回真
path=newStack<Point>();
S.setDirection(1);
path.push(S);
replacePlace(S,'X');
while(!path.empty()){
PointnowPoint=path.peek();//取得当前位置
if(nowPoint.getX()==F.getX()&&nowPoint.getY()==F.getY()){
//printPath();
returntrue;
}
Pointtemp=newPoint();//存放下一个可走的位置
intfind=0;//标志是否可向下走
while(nowPoint.getDirection()<5&&find==0){
switch(nowPoint.getDirection()){
case1:temp=newPoint(nowPoint.getX(),nowPoint.getY()-1,1);break;//取得当前位置左边的位置
case2:temp=newPoint(nowPoint.getX()+1,nowPoint.getY(),1);break;//取得当前位置下边的位置
case3:temp=newPoint(nowPoint.getX(),nowPoint.getY()+1,1);break;//取得当前位置右边的位置
case4:temp=newPoint(nowPoint.getX()-1,nowPoint.getY(),1);break;//取得当前位置上边的位置
}
nowPoint.addDirection();//指向下一个需要验证的点
if(returnChar(temp)=='O'||returnChar(temp)=='F')find=1;//如果能向下走则置为1
}
if(find==1){//如果可走就进栈
replacePlace(temp,'X');//设置成X防止回走
// printArr();
path.push(temp);
}else{//如果不可走就退栈
replacePlace(nowPoint,'O');
path.pop();
}
}
returnfalse;
}
publicvoidprintArr(){
for(inti=0;i<mazemap.length;i++){
for(intj=0;j<mazemap[0].length;j++){//mazemap[0]必须有元素不可为空
System.out.print(mazemap[i][j]);
}
System.out.println();
}
System.out.println();
}
}
packagecom.Albert.LabyringhStack;
publicclassMain{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
char[][]mazemap={
{'M','M','M','M','M','M','M','M'},
{'M','S','O','O','M','M','M','M'},
{'M','M','M','O','M','M','M','M'},
{'M','M','O','O','O','O','M','M'},
{'M','M','M','M','M','F','M','M'},
{'M','M','M','M','M','M','M','M'},
{'M','M','M','M','M','M','M','M'}
};
LabyringhStacksolution=newLabyringhStack(mazemap);
if(solution.getPath()){
System.out.print("迷宫路径如下:");
solution.printPath();
}
else{
System.out.println("没有可走的路");
}
}
}
⑤ Java迷宫的游戏
这个太简单了。。我用类C的代码写给你看看。。。直接手写的,不调试了
,谁让你就给这点分呢。。。。其实分啥都不是。。。
其实就是搜索,为了简单我就用深度优先了
int dir[4][2]={
{1,0},
{-1,0},
{0,1},
{0,-1}
};//用来控制方向的数组
int flag = 0;
int map[][];//这个就是你的迷宫
void dfs( int x, int y ){
if( flag ){
return;
}
map[x][y] = 0;
for(int i = 0; i < 4; i++ ){
int dx = x + dir[i][0];
int dy = y + dir[i][1];
if( 0 <= dx && dx < 行数 && 0 <= dy && dy < 列数 && map[dx][dy] == 1 ){
dfs(dx,dy);
}
}
map[x][y] = 1;
}
这个就是回溯函数了。。。。
⑥ 用java语言控制小机器人走迷宫的算法
我昨天刚写了个走迷宫的界面(一个初始小球,一个目标小球,随机在界面种生成障碍(迷宫图),然后初始小球移动到目标小球那),不知道是否跟你的想法一样。用的是回溯法(目前我只知道这个算法走迷宫),你可以查下。PS:我电脑没联网不能把代码给你…QQ254774042。
⑦ 我正在用java写一个迷宫游戏,现在已经能生成迷宫和移动小人了,请大家给想一想还能实现什么有趣的功
增强游戏的可玩性, 那么可以像RPG游戏那样,添加很多怪物NPC, 需要刷等级,才能打败堵在前面的怪兽, 通过获取胜利, 但是我不建议这样做: 原因1: 不能突出迷宫游戏的益智策略性, 原因2: 如果要做好,代码量很大, 还可能需要用到游戏框架.
迷宫游戏: 更偏向于益智 和 策略 ,所以可以使用下面的一些思路,来增强可玩性.~并且代码量比较少
地图_宝箱: 打开宝箱后,可以获得道具奖励.需要道具钥匙
地图_丛林:玩家需要(普通斧头)进行伐木,获取木材
地图_小木桥: 一座破损的小木桥,需要玩家收集一定数量的木材, 交给桥头的NPC,才能通过.
地图_堵路石: 一块巨大的石头,堵住了前进的路, 需要道具(开山斧)才能打开前进的道路.(这条道路,不一定是正确的)
地图_传送门: 可以(随即)传送到预先设定好的几个目的地 ,可能是让玩家多跑一段路, 也可以让玩家少跑一段路
----------------------------分割线---------------------------------------------
道具: 金币,获取方式:1,出售木材等道具给NPC. 2, 某些分支道路上可以捡到 . 金币的作用是购买道具,或者购买小游戏的次数.
道具:普通斧头:伐木用,采集木材.
道具: 木材, 可以维修桥梁.
道具: 开山斧, 可以敲碎堵路的巨石.
道具: 球鞋, 可以增加玩家的移动速度.
道具: 探照灯: 可以驱散一定范围内的迷雾.可以看清该区域的走势.
道具: 记号, 可以在地图上做标记,来识别这个位置是否来过.
道具: 钥匙, 可以打开宝箱.
----------------------------分割线---------------------------------------------
NPC_0: 桥头NPC,站立桥头, 如果交付一点的木材, 可以维修桥梁.帮助玩家通过
NPC_1: 道具商店: 出售道具, (开山斧,球鞋,探照灯....) ,回购道具,以出售价格的50%回收道具
NPC_2: 小游戏屋: 各种游戏,最初免费玩3次. 后面花费一定的金币才可以玩,
答对可以随即获得道具,比如:知识问答,猜谜语 , 找茬,等...
NPC_3: 游戏设置: 花金币,可以切换游戏的背景音乐. 颜色,风格 等
⑧ java怎么生成迷宫地图
//作者:zhongZw
packagecn.zhongZw.model;
importjava.util.ArrayList;
importjava.util.Random;
publicclassMazeModel{
privateintwidth=0;
privateintheight=0;
privateRandomrnd=newRandom();
publicMazeModel(){
this.width=50;//迷宫宽度
this.height=50;//迷宫高度
}
publicintgetWidth(){
returnwidth;
}
publicvoidsetWidth(intwidth){
this.width=width;
}
publicintgetHeight(){
returnheight;
}
publicvoidsetHeight(intheight){
this.height=height;
}
publicMazeModel(intwidth,intheight){
super();
this.width=width;
this.height=height;
}
publicArrayList<MazePoint>getMaze(){
ArrayList<MazePoint>maze=newArrayList<MazePoint>();
for(inth=0;h<height;h++){
for(intw=0;w<width;w++){
MazePointpoint=newMazePoint(w,h);
maze.add(point);
}
}
returnCreateMaze(maze);
}
privateArrayList<MazePoint>CreateMaze(ArrayList<MazePoint>maze){
inttop=0;
intx=0;
inty=0;
ArrayList<MazePoint>team=newArrayList<MazePoint>();
team.add(maze.get(x+y*width));
while(top>=0){
int[]val=newint[]{
-1,-1,-1,-1
};
inttimes=0;
booleanflag=false;
MazePointpt=(MazePoint)team.get(top);
x=pt.getX();
y=pt.getY();
pt.visted=true;
ro1:while(times<4){
intdir=rnd.nextInt(4);
if(val[dir]==dir)
continue;
else
val[dir]=dir;
switch(dir){
case0://左边
if((x-1)>=0&&maze.get(x-1+y*width).visted==false){
maze.get(x+y*width).setLeft();
maze.get(x-1+y*width).setRight();
team.add(maze.get(x-1+y*width));
top++;
flag=true;
breakro1;
}
break;
case1://右边
if((x+1)<width&&maze.get(x+1+y*width).visted==false){
maze.get(x+y*width).setRight();
maze.get(x+1+y*width).setLeft();
team.add(maze.get(x+1+y*width));
top++;
flag=true;
breakro1;
}
break;
case2://上边
if((y-1)>=0&&maze.get(x+(y-1)*width).visted==false){
maze.get(x+y*width).setUp();
maze.get(x+(y-1)*width).setDown();
team.add(maze.get(x+(y-1)*width));
top++;
flag=true;
breakro1;
}
break;
case3://下边
if((y+1)<height&&maze.get(x+(y+1)*width).visted==false){
maze.get(x+y*width).setDown();
maze.get(x+(y+1)*width).setUp();
team.add(maze.get(x+(y+1)*width));
top++;
flag=true;
breakro1;
}
break;
}
times+=1;
}
if(!flag){
team.remove(top);
top-=1;
}
}
returnmaze;
}
}
- 迷宫
//作者:zhongZw
//邮箱:[email protected]
packagecn.zhongZw.model;
importjava.util.*;
importjava.lang.*;
publicclassMazePoint{
privateintleft=0;
privateintright=0;
privateintup=0;
privateintdown=0;
privateintx;
privateinty;
publicbooleanvisted;
publicMazePoint(intx,inty){
this.x=x;
this.y=y;
}
publicintgetLeft(){
returnleft;
}
publicvoidsetLeft(){
this.left=1;
}
publicintgetRight(){
returnright;
}
publicvoidsetRight(){
this.right=1;
}
publicintgetUp(){
returnup;
}
publicvoidsetUp(){
this.up=1;
}
publicintgetDown(){
returndown;
}
publicvoidsetDown(){
this.down=1;
}
publicintgetX(){
returnx;
}
publicvoidsetX(intx){
this.x=x;
}
publicintgetY(){
returny;
}
publicvoidsetY(inty){
this.y=y;
}
}
[java]view plain
⑨ java老鼠迷宫代码难吗
非常难。思路:
1、设老鼠的行进路线都是优先选择下->右->上->左。
2、设老鼠很聪明,走过的路线走撒泡尿,表示鼠大爷到此一游,我们可以把数组的值改为3,表示走过,但走不通。
3、这是一个int[8][8]的二位数组,那么开始位置下标是1,1,结束位置是6,6。行和列分别用、j表示。
4、实际路线我们可以设置2表示,我们可以使用递归,让老鼠不断测试路线。
5、最后打印数组,看老鼠的实际路线。
⑩ 如何使用JAVA开发一个迷宫小游戏
你得知道游戏的机制
迷宫需要些什么
画图如何画
怎么判定是否走出迷宫
是否遇到墙,此路不通
搞懂了这些流程,做起来就快了