當前位置:首頁 » 編程語言 » 迷宮java

迷宮java

發布時間: 2022-06-14 14:02:03

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;

  • }

  • }

  • 迷宮
  • [java]view plain

  • //作者: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老鼠迷宮代碼難嗎

非常難。思路:
1、設老鼠的行進路線都是優先選擇下->右->上->左。
2、設老鼠很聰明,走過的路線走撒泡尿,表示鼠大爺到此一游,我們可以把數組的值改為3,表示走過,但走不通。
3、這是一個int[8][8]的二位數組,那麼開始位置下標是1,1,結束位置是6,6。行和列分別用、j表示。
4、實際路線我們可以設置2表示,我們可以使用遞歸,讓老鼠不斷測試路線。
5、最後列印數組,看老鼠的實際路線。

⑩ 如何使用JAVA開發一個迷宮小游戲

你得知道游戲的機制
迷宮需要些什麼
畫圖如何畫
怎麼判定是否走出迷宮
是否遇到牆,此路不通
搞懂了這些流程,做起來就快了

熱點內容
我的世界怎麼擴容伺服器內存 發布:2024-05-05 17:19:54 瀏覽:47
java讀取文件字元 發布:2024-05-05 17:15:18 瀏覽:11
三星怎麼應用加密 發布:2024-05-05 17:13:18 瀏覽:151
cad字體在那個文件夾 發布:2024-05-05 17:08:20 瀏覽:330
什麼時候用編譯器 發布:2024-05-05 17:08:20 瀏覽:765
應急救援腳本 發布:2024-05-05 17:08:17 瀏覽:337
我的世界搭建無正版驗證伺服器 發布:2024-05-05 17:03:48 瀏覽:818
我的世界伺服器地址寶可夢 發布:2024-05-05 17:00:16 瀏覽:255
dede企業源碼 發布:2024-05-05 16:57:53 瀏覽:786
如何查看java版本 發布:2024-05-05 16:45:05 瀏覽:494