迷宮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開發一個迷宮小游戲
你得知道游戲的機制
迷宮需要些什麼
畫圖如何畫
怎麼判定是否走出迷宮
是否遇到牆,此路不通
搞懂了這些流程,做起來就快了