java迷宫代码及注释 JAVA迷宫

java老鼠迷宫代码难吗

非常难。思路:

成都创新互联公司是一家专注于网站设计制作、网站设计与策划设计,绩溪网站建设哪家好?成都创新互联公司做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:绩溪等地区。绩溪做网站价格咨询:028-86922220

1、设老鼠的行进路线都是优先选择下-右-上-左。

2、设老鼠很聪明,走过的路线走撒泡尿,表示鼠大爷到此一游,我们可以把数组的值改为3,表示走过,但走不通。

3、这是一个int[8][8]的二位数组,那么开始位置下标是1,1,结束位置是6,6。行和列分别用、j表示。

4、实际路线我们可以设置2表示,我们可以使用递归,让老鼠不断测试路线。

5、最后打印数组,看老鼠的实际路线。

java 怎样给源代码添加注释

1、单行(single-line)--短注释://…… 单独行注释:在代码中单起一行注释, 注释前最好有一行空行,并与其后的代码具有一样的缩进层级。如果单行无法完成,则应采用块注释。 注释格式:/* 注释内容 */ 行头注释:在代码行的开头进行注释。主要为了使该行代码失去意义。 注释格式:// 注释内容 行尾注释:尾端(trailing)--极短的注释,在代码行的行尾进行注释。一般与代码行后空8(至少4)个格,所有注释必须对齐。 注释格式:代码 + 8(至少4)个空格 + // 注释内容 2、块(block)--块注释:/*……*/ 注释若干行,通常用于提供文件、方法、数据结构等的意义与用途的说明,或者算法的描述。一般位于一个文件或者一个方法的前面,起到引导的作用,也可以根据需要放在合适的位置。这种域注释不会出现在HTML报告中。注释格式通常写成: /* * 注释内容 */ 3、文档注释:/**……*/ 注释若干行,并写入javadoc文档。每个文档注释都会被置于注释定界符 /**......*/ ...

c++编写一个迷宫游戏,求完整代码。最好能有适当的注释。

#include stdio.h

#include iostream

#include conio.h

#include windows.h

#include time.h

using namespace std;

#define Height 25//高度,必须为奇数

#define Width 25 //宽度,必须为奇数

#define Wall 1 //用1表示墙

#define Road 0 //用0表示路

#define Start 2

#define End 3

#define up 72

#define down 80

#define left 75

#define right 78

#define flag 5

int map[Height+2][Width+2];

int x=2,y=1; //玩家当前位置,刚开始在入口处

class Migong

{

public:

void gotoxy(int x,int y); //移动坐标的函数声明

void shengcheng(int x,int y); //随机生成迷宫的函数声明

void display(int x,int y); //显示迷宫的函数声明

void chushi(); //初始化迷宫的函数声明

};

class Wanjia:public Migong //玩家类由迷宫类派生来

{

public:

void gonglue(int x,int y);

void shang(int x,int y);

void xia(int x,int y);

void zuo(int x,int y);

void you(int x,int y);

void game(); //游戏运行包括移动的函数声明

};

void Migong::gotoxy(int x,int y) //移动坐标 这是使光标 到(x,y)这个位置的函数.调用 COORD 需要#include.

{

COORD coord;

coord.X=x;

coord.Y=y;

SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );

}

void Migong::shengcheng(int x,int y) //随机生成迷宫

{

int c[4][2]={0,1,1,0,0,-1,-1,0}; //四个方向 //数组c 0 1 向右

// 1 0 向下

// -1 0 向上

// 0 -1 向左

int i,j,t;

//将方向打乱

for(i=0;i4;i++)

{

j=rand()%4; //随机生成j

t=c[i][0];c[i][0]=c[j][0];c[j][0]=t; //将c[i][0]和c[j][0]交换

t=c[i][1];c[i][1]=c[j][1];c[j][1]=t; //类似上

}

map[x][y]=Road; //当前位置设为路

for(i=0;i4;i++) //沿四个方向设置

if(map[x+2*c[i][0]][y+2*c[i][1]]==Wall) //沿c[i][0]、c[i][1]方向前2步如果是墙

{

map[x+c[i][0]][y+c[i][1]]=Road; //让该方向前一步设为路

shengcheng(x+2*c[i][0],y+2*c[i][1]); //在该方向前两步继续生成地图 因为这里是递归函数,当执行到最后一点发现都不能走的时候,

//会返回到上一个函数,也就是上一个点,再次判断是否可以产生地图 ,知道地图上所有点被遍历完。

}

}

void Migong::display(int x,int y) //显示迷宫

{

gotoxy(2*y-2,x-1);

switch(map[x][y])

{

case Start:

cout"入";break; //显示入口

case End:

cout"出";break; //显示出口

case Wall:

cout"■";break; //显示墙

case Road:

cout" ";break; //显示路

case up:

cout"↑";break; //在攻略中的标记 下同

case down:

cout"↓";break;

case left:

cout"←";break;

case right:

cout"→";break;

case flag:

cout" ";break; //标记,防止攻略遍历时候无线循环

}

}

void Migong::chushi()

{

int i,j;

srand((unsigned)time(NULL)); //初始化随机种子

for(i=0;i=Height+1;i++)

for(j=0;j=Width+1;j++)

if(i==0||i==Height+1||j==0||j==Width+1) //初始化迷宫 默认四周是路

map[i][j]=Road;

else map[i][j]=Wall;

shengcheng(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); //从随机一个点开始生成迷宫,该点行列都为偶数

for(i=0;i=Height+1;i++) //边界处理 把最开始默认为路的堵上,以免跑出迷宫

{

map[i][0]=Wall;

map[i][Width+1]=Wall;

}

for(j=0;j=Width+1;j++) //边界处理

{

map[0][j]=Wall;

map[Height+1][j]=Wall;

}

map[2][1]=Start; //给定入口

map[Height-1][Width]=End; //给定出口

for(i=1;i=Height;i++) //i初始为1,结束为height,以免画出外围

for(j=1;j=Width;j++) //画出迷宫 同上

display(i,j);

}

void Wanjia::game()

{

int x=2,y=1; //玩家当前位置,刚开始在入口处

int c; //用来接收按键

while(1)

{

gotoxy(2*y-2,x-1);

cout"☆"; //画出玩家当前位置

if(map[x][y]==End) //判断是否到达出口

{

gotoxy(30,24); //到达此坐标

cout"到达终点,按任意键结束";

getch();

break;

c=getch();

}

if(c!=-32)

{

c=getch();

switch(c)

{

case 72: //向上走

if(map[x-1][y]!=Wall)

{

display(x,y);

x--;

}

break;

case 80: //向下走

if(map[x+1][y]!=Wall)

{

display(x,y);

x++;

}

break;

case 75: //向左走

if(map[x][y-1]!=Wall)

{

display(x,y);

y--;

}

break;

case 77: //向右走

if(map[x][y+1]!=Wall)

{

display(x,y);

y++;

}

break;

case 112: //按下P

gonglue(2,1);break; //如果按下P执行攻略函数

}

}

}

}

void Wanjia::shang(int x,int y)

{

if(map[x][y]==End) //判断是否到达出口

{

gotoxy(52,20); //到达此坐标

cout"到达终点,按任意键结束";

getch();

exit(0);

}

if(map[x-1][y]!=Wallmap[x-1][y]!=upmap[x-1][y]!=downmap[x-1][y]!=leftmap[x-1][y]!=rightmap[x-1][y]!=flag)

{ //当移动后的下一个位置没有被走过且不是墙

map[x][y]=up;

display(x,y);

x--;

gonglue(x,y); //递归,攻略下一个点

}

}

void Wanjia::xia(int x,int y)

{

if(map[x][y]==End) //判断是否到达出口

{

gotoxy(52,20); //到达此坐标

cout"到达终点,按任意键结束";

getch();

exit(0);

}

if(map[x+1][y]!=Wallmap[x+1][y]!=upmap[x+1][y]!=downmap[x+1][y]!=leftmap[x+1][y]!=rightmap[x+1][y]!=flag) //当移动后的下一个位置没有被走过且不是墙

{

map[x][y]=down;

display(x,y);

x++;

gonglue(x,y); //递归,攻略下一个点

}

}

void Wanjia::zuo(int x,int y)

{

if(map[x][y]==End) //判断是否到达出口

{

gotoxy(52,20); //到达此坐标

cout"到达终点,按任意键结束";

getch();

exit(0);

}

if(map[x][y-1]!=Wallmap[x][y-1]!=upmap[x][y-1]!=downmap[x][y-1]!=leftmap[x][y-1]!=rightmap[x][y-1]!=flag) //当移动后的下一个位置没有被走过且不是墙

{

map[x][y]=left;

display(x,y);

y--;

gonglue(x,y); //递归,攻略下一个点

}

}

void Wanjia::you(int x,int y)

{

if(map[x][y]==End) //判断是否到达出口

{

gotoxy(52,20); //到达此坐标

cout"到达终点,按任意键结束";

getch();

exit(0);

}

if(map[x][y+1]!=Wallmap[x][y+1]!=upmap[x][y+1]!=downmap[x][y+1]!=leftmap[x][y+1]!=rightmap[x][y+1]!=flag) //当移动后的下一个位置没有被走过且不是墙

{

map[x][y]=right;

display(x,y);

y++;

gonglue(x,y); //递归,攻略下一个点

}

}

void Wanjia::gonglue (int x,int y)

{

gotoxy(2*y-2,x-1);

cout"☆"; //画出玩家当前位置

if(map[x][y]==End) //判断是否到达出口

{

gotoxy(52,20); //到达此坐标

cout"到达终点,按任意键结束";

getch();

exit(0);

}

shang(x,y); //上下左右

xia(x,y);

zuo(x,y);

you(x,y);

map[x][y]=flag; //当上下左右都无法走的时候,即为死路,因为递归函数开始向后,所以讲死路点值置为flag,变成无形之墙。

display(x,y);

}

int main()

{

cout" 移动迷宫 "endl;

cout"--------------------"endl;

cout"欢迎来到移动迷宫游戏"endl;

cout"--------------------"endl;

cout"游戏说明:给定一出口和入口"endl;

cout"玩家控制一个五角星(☆)从入口走到出口"endl;

cout"系统会记录你所走的步数"endl;

cout"按回车进入游戏";

cout"(按下P键可以获得攻略。)";

getch();

system("cls"); //清屏函数 ,清除开始界面

Wanjia w1;

w1.chushi();

w1.game(); //开始游戏

// w1.gonglue(2,1); //功略显示

getch();

return 0;

}

————————————————

版权声明:本文为CSDN博主「失落之风」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:

喜欢的源码拿走,把小赞赞留下

关于Java走迷宫的问题。我已经有相关代码了,但是我看不懂。麻烦高手帮忙注释一下,然后再修改点儿。

package 走迷宫;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;

import java.util.TimerTask;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

// 迷宫

public class Maze extends JFrame implements ActionListener {

private JPanel panel;

private JPanel northPanel;

private JPanel centerPanel;

private MazeGrid grid[][];

private JButton restart;

private JButton dostart;

private int rows;// rows 和cols目前暂定只能是奇数

private int cols;

private ListString willVisit;

private ListString visited;

private LinkedListString comed;

private long startTime;

private long endTime;

public Maze() {

rows = 25;

cols = 25;

willVisit = new ArrayListString();

visited = new ArrayListString();

comed = new LinkedListString();

init();

this.setTitle("回溯法--走迷宫");

this.add(panel);

this.pack();

this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public void init() {

panel = new JPanel();

northPanel = new JPanel();

centerPanel = new JPanel();

panel.setLayout(new BorderLayout());

restart = new JButton("重新生成迷宫");

dostart = new JButton("开始走迷宫");

grid = new MazeGrid[rows][cols];

centerPanel.setLayout(new GridLayout(rows, cols, 1, 1));

centerPanel.setBackground(new Color(0, 0, 0));

northPanel.add(restart);

northPanel.add(dostart);

dostart.addActionListener(this);

restart.addActionListener(this);

for (int i = 0; i grid.length; i++)

for (int j = 0; j grid[i].length; j++) {

if (j % 2 == 0 i % 2 == 0)

grid[i][j] = new MazeGrid(true, 20, 20);

else

grid[i][j] = new MazeGrid(false, 20, 20);

}

grid[0][0].setVisited(true);

grid[0][0].setPersonCome(true);

grid[0][0].setStart(true);

visited.add("0#0");

grid[rows - 1][cols - 1].setEnd(true);

grid = createMap(grid, 0, 0);

for (int i = 0; i grid.length; i++)

for (int j = 0; j grid[i].length; j++) {

grid[i][j].repaint();

centerPanel.add(grid[i][j]);

}

panel.add(northPanel, BorderLayout.NORTH);

panel.add(centerPanel, BorderLayout.CENTER);

}

/**

* 生成迷宫

*

* @param mazeGrid

* @param x

* @param y

* @return

*/

public MazeGrid[][] createMap(MazeGrid mazeGrid[][], int x, int y) {

int visitX = 0;

int visitY = 0;

if (x - 2 = 0) {

if (!mazeGrid[x - 2][y].isVisited()) {

willVisit.add((x - 2) + "#" + y);

}

}

if (x + 2 cols) {

if (!mazeGrid[x + 2][y].isVisited()) {

willVisit.add((x + 2) + "#" + y);

}

}

if (y - 2 = 0) {

if (!mazeGrid[x][y - 2].isVisited()) {

willVisit.add(x + "#" + (y - 2));

}

}

if (y + 2 rows) {

if (!mazeGrid[x][y + 2].isVisited()) {

willVisit.add(x + "#" + (y + 2));

}

}

if (!willVisit.isEmpty()) {

int visit = (int) (Math.random() * willVisit.size());

String id = willVisit.get(visit);

visitX = Integer.parseInt(id.split("#")[0]);

visitY = Integer.parseInt(id.split("#")[1]);

mazeGrid[(visitX + x) / 2][(visitY + y) / 2].setMark(true);

mazeGrid[visitX][visitY].setVisited(true);

if (!visited.contains(id)) {// 将这个点加到已访问中去

visited.add(id);

}

willVisit.clear();

createMap(mazeGrid, visitX, visitY);

} else {

if (!visited.isEmpty()) {

String id = visited.remove(visited.size() - 1);// 取出最后一个元素

visitX = Integer.parseInt(id.split("#")[0]);

visitY = Integer.parseInt(id.split("#")[1]);

mazeGrid[visitX][visitY].setVisited(true);

createMap(mazeGrid, visitX, visitY);

}

}

return mazeGrid;

}

/**

* 走迷宫

*

* @param mazeGrid

* @param x

* @param y

*/

public String goMaze(MazeGrid mazeGrid[][], int x, int y) {

int comeX = 0;

int comeY = 0;

// left

if (x - 1 = 0) {

if (mazeGrid[x - 1][y].isMark()) {

if (!comed.contains((x - 1) + "#" + y))

willVisit.add((x - 1) + "#" + y);

}

}

// right

if (x + 1 cols) {

if (mazeGrid[x + 1][y].isMark()) {

if (!comed.contains((x + 1) + "#" + y))

willVisit.add((x + 1) + "#" + y);

}

}

// up

if (y - 1 = 0) {

if (mazeGrid[x][y - 1].isMark()) {

if (!comed.contains(x + "#" + (y - 1)))

willVisit.add(x + "#" + (y - 1));

}

}

// down

if (y + 1 rows) {

if (mazeGrid[x][y + 1].isMark()) {

if (!comed.contains(x + "#" + (y + 1)))

willVisit.add(x + "#" + (y + 1));

}

}

if (!willVisit.isEmpty()) {

int visit = (int) (Math.random() * willVisit.size());

String id = willVisit.get(visit);

comeX = Integer.parseInt(id.split("#")[0]);

comeY = Integer.parseInt(id.split("#")[1]);

mazeGrid[x][y].setPersonCome(false);

mazeGrid[comeX][comeY].setPersonCome(true);

mazeGrid[x][y].repaint();

mazeGrid[comeX][comeY].repaint();

willVisit.clear();

comed.add(x + "#" + y);

} else {

if (!comed.isEmpty()) {

String id = comed.removeLast();

comeX = Integer.parseInt(id.split("#")[0]);

comeY = Integer.parseInt(id.split("#")[1]);

mazeGrid[x][y].setPersonCome(false);

mazeGrid[comeX][comeY].setPersonCome(true);

mazeGrid[x][y].repaint();

mazeGrid[comeX][comeY].repaint();

comed.addFirst(x + "#" + y);

}

}

return comeX + "#" + comeY;

}

int comeX = 0;

int comeY = 0;

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("重新生成迷宫")) {

refreshMap(grid);

} else if (e.getActionCommand().equals("开始走迷宫")) {

startTime = System.currentTimeMillis();

dostart.setVisible(false);

restart.setText("禁止刷新");

int delay = 1000;

int period = 500;// 循环间隔

java.util.Timer timer = new java.util.Timer();

timer.scheduleAtFixedRate(new TimerTask() {

public void run() {

if (grid[rows - 1][cols - 1].isPersonCome()) {

endTime = System.currentTimeMillis();

JOptionPane.showMessageDialog(null, "已经走出迷宫,耗时"

+ (endTime - startTime) / 1000 + "秒", "消息提示",

JOptionPane.ERROR_MESSAGE);

this.cancel();

restart.setText("重新生成迷宫");

} else {

String id = goMaze(grid, comeX, comeY);

comeX = Integer.parseInt(id.split("#")[0]);

comeY = Integer.parseInt(id.split("#")[1]);

}

}

}, delay, period);

}

}

/**

* 刷新地图

*/

public void refreshMap(MazeGrid mazeGrid[][]) {

comeX = 0;

comeY = 0;

willVisit.clear();

visited.clear();

comed.clear();

this.remove(panel);

init();

this.add(panel);

this.pack();

this.setVisible(true);

}

public static void main(String args[]) {

long start = System.currentTimeMillis();

new Maze();

long end = System.currentTimeMillis();

System.out.println("使用ArrayList生成迷宫耗时:" + (end - start) + "毫秒");

}

}

JAVA代码,帮忙加点注释,分不多了

/**

* 在该类中创建了服务器端的ServerSocket,

* 当有客户发出连接服务器的请求时,

* 生成与客户端进行通信的Socket对象。

*/

public class MultiServer {

public static void main(String args[]) throws IOException {

System.out.println("建立并等等待连接......");

// 创建 服务器端 ServerSocket 监听5500端口

ServerSocket serverSocket = new ServerSocket(5500);

// 初始化是个socket对象

Socket connectToClient = null;

while (true) {

// 等待客户端的连接 获得客户端Socket

connectToClient = serverSocket.accept();

new ServerThread(connectToClient);

}

}

}

你这while方法没break,你确定没问题?

JAVA数据结构迷宫求解!

#includestdio.h

#includegraphics.h

#includeconio.h

typedef struct{

int x,y;

int dir;

}pos,elem;

typedef struct{

elem* b,* t;

int size;

}stack;

void initstack(stack* s)

{

s-b=(elem*)malloc(50*sizeof(elem));

if(s-b){

s-t=s-b;

s-size=50;

return;

}

exit(0);

}

void push(stack* s,elem* e)

{

*s-t=*e;

s-t++;

}

void pop(stack* s,elem* e)

{

*e=*--s-t;

}

void gettop(stack* s,elem* e)

{

*e=*(s-t-1);

}

void clearstack(stack* s)

{

s-t=s-b;

}

int stackempty(stack* s)

{

return !(s-t-s-b);

}

int destroystack(stack* s)

{

free(s-b);

free(s);

return 1;

}

int mg[10][10]={

{-1,-0,-1,-1,-1,-1,-1,-1,-1,-1},

{-1,-0,-0,-0,-1,-0,-0,-0,-0,-1},

{-1,-0,-1,-0,-1,-0,-1,-1,-0,-1},

{-1,-0,-1,-1,-0,-0,-0,-0,-0,-1},

{-1,-0,-0,-1,-0,-1,-1,-0,-0,-1},

{-1,-0,-0,-0,-0,-0,-1,-0,-0,-1},

{-1,-0,-1,-0,-0,-0,-0,-1,-0,-1},

{-1,-0,-1,-1,-0,-0,-0,-1,-0,-1},

{-1,-0,-0,-0,-1,-0,-0,-1,-0,-0},

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}

};

void step(stack* s,pos* cur,stack* result);

void savepath(stack* s,pos* cur,stack* result);

void draw(int y,int x);

void step(stack* s,pos* cur,stack* result)

{

if(stackempty(result)||s-t-s-bresult-t-result-b){

for(cur-dir++;cur-dir5;cur-dir++){

setfillstyle(SOLID_FILL,15);

switch(cur-dir){

case 1:

if(!mg[cur-y-1][cur-x]){

mg[cur-y][cur-x]=1;

push(s,cur);

cur-y--;

cur-dir=0;

draw(cur-y,cur-x);

return;

}

break;

case 2:

if(!mg[cur-y][cur-x+1]){

mg[cur-y][cur-x]=1;

push(s,cur);

cur-x++;

cur-dir=0;

draw(cur-y,cur-x);

return;

}

break;

case 3:

if(!mg[cur-y+1][cur-x]){

mg[cur-y][cur-x]=1;

push(s,cur);

cur-y++;

cur-dir=0;

draw(cur-y,cur-x);

return;

}

break;

case 4:

if(!mg[cur-y][cur-x-1]){

mg[cur-y][cur-x]=1;

push(s,cur);

cur-x--;

cur-dir=0;

draw(cur-y,cur-x);

return;

}

break;

default:

exit(0);

}

}

}

mg[cur-y][cur-x]=0;

setfillstyle(SOLID_FILL,0);

draw(cur-y,cur-x);

pop(s,cur);

}

void savepath(stack* s,pos* cur,stack* result)

{

pos* top=s-t;

if(stackempty(result)){

push(result,cur);

while(tops-b)

push(result,--top);

}

else if(result-t-result-bs-t-s-b){

clearstack(result);

push(result,cur);

while(tops-b)

push(result,--top);

}

}

void draw(int y,int x)

{

bar(100+15*x,100+15*y,115+15*x,115+15*y);

}

void main(void)

{

int i;

int x,y;

int gd=DETECT,gm;

stack* s=NULL;

stack* result=NULL;

pos* cur=NULL;

initgraph(gd,gm,"");

for(x=0;x10;x++)

for(y=0;y10;y++){

if(mg[y][x]){

setfillstyle(SOLID_FILL,3);

draw(y,x);

}

}

result=(stack*)malloc(sizeof(stack));

initstack(result);

s=(stack*)malloc(sizeof(stack));

cur=(pos*)malloc(sizeof(pos));

initstack(s);

cur-x=1;

cur-y=0;

cur-dir=0;

push(s,cur);

cur-x=1;

cur-y=1;

cur-dir=1;

do{

if(cur-x==9cur-y==8)

savepath(s,cur,result);

step(s,cur,result);

}while(!stackempty(s));

if(stackempty(result))

printf("no way available");

else{

int ch=0;

printf("following is the shortest path:\n");

while(!stackempty(result)){

pop(result,cur);

setfillstyle(SOLID_FILL,15);

draw(cur-y,cur-x);

if(ch5){

putchar('\n');

ch=0;

}

printf("(%d,%d,%d) ",cur-x,cur-y,cur-dir);

ch++;

}

}

printf("\n");

destroystack(s);

destroystack(result);

free(cur);

printf("Press any key to end");

while(!kbhit());

closegraph();

}


网站标题:java迷宫代码及注释 JAVA迷宫
本文URL:http://myzitong.com/article/hgidgg.html