首页 > 编程知识 正文

老鼠迷宫java,老鼠迷宫的数学题

时间:2023-12-27 22:26:35 阅读:324559 作者:RIYA

本文目录一览:

请教 老鼠走迷宫 的编程问题

走迷宫游戏,程序开始进行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓,游戏的任务是使用键盘的方向键操纵老鼠在规定的时间内走到粮仓处。

要求:

1.老鼠形象可以辨认,可用键盘操纵老鼠上下左右移动;

2.迷宫的墙足够结实老鼠不可穿墙而过;

3.正确检测结果,若老鼠在规定的时间内走到粮仓处,提示成功,否则提示失败

4.添加编辑迷宫的功能,可以修改当前迷宫,修改内容:墙变路,路变墙,找出走出迷宫的所有路径,以及最短路径。

期待达人帮助,提供思路或是编号的程序都可。

java编程 老鼠走迷宫

简单点说叫做寻路,涉及到深度优先搜索和广度优先搜索,当然在存在类似“战争迷雾”效果的同时还要涉及到动态规划和回溯。

跪求老鼠走迷宫游戏,必须用C++编写,用栈来实现,因为是数据结构课程设计所以只要现成代码,越快越好。

#include "stdafx.h"

#include stack

using namespace std;

const int rows = 8,cols = 8;

HINSTANCE hInst;

HBITMAP ball;

HDC hdc,mdc,bufdc;

HWND hWnd;

DWORD tPre,tNow;

char *str;

int nowPos,prePos;

bool find;

stackint path;

int mapIndex[rows*cols] = { 0,2,0,0,0,0,0,0,   //材1#59049;

0,1,0,1,1,1,1,0,   //材2#59049;

0,1,0,1,0,1,1,0,   //材3#59049;

0,1,0,0,0,1,1,0,   //材4#59049;

0,1,1,1,1,1,1,0,   //材5#59049;

0,1,0,0,0,0,1,0,   //材6#59049;

0,0,1,1,1,1,1,0,   //材7#59049;

0,0,0,0,0,0,3,0 }; //材8#59049;

int  record[rows*cols];

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

void MyPaint(HDC hdc);

int APIENTRY WinMain(HINSTANCE hInstance,

                   HINSTANCE hPrevInstance,

                   LPSTR     lpCmdLine,

                   int       nCmdShow)

{

MSG msg;

MyRegisterClass(hInstance);

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

  while( msg.message!=WM_QUIT )

  {

      if( PeekMessage( msg, NULL, 0,0 ,PM_REMOVE) )

      {

          TranslateMessage( msg );

          DispatchMessage( msg );

      }

else

{

tNow = GetTickCount();

if(tNow-tPre = 100)

MyPaint(hdc);

}

  }

return msg.wParam;

}

//****注册窗口*************************

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = (WNDPROC)WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = NULL;

wcex.hCursor = NULL;

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName = NULL;

wcex.lpszClassName = "canvas";

wcex.hIconSm = NULL;

return RegisterClassEx(wcex);

}

//****初始化*************************************

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HBITMAP bmp;

hInst = hInstance;

hWnd = CreateWindow("canvas", "迷宫" , WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)

{

return FALSE;

}

MoveWindow(hWnd,10,10,430,450,true);

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

hdc = GetDC(hWnd);

mdc = CreateCompatibleDC(hdc);

bufdc = CreateCompatibleDC(hdc);

bmp = CreateCompatibleBitmap(hdc,cols*50,rows*50);

SelectObject(mdc,bmp);

HBITMAP tile;

int rowNum,colNum;

int i,x,y;

tile = (HBITMAP)LoadImage(NULL,"tile.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);

ball = (HBITMAP)LoadImage(NULL,"ball.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);

for (i=0;irows*cols;i++)

{

record[i] = mapIndex[i];

rowNum = i / cols;

colNum = i % cols;

x = colNum * 50;

y = rowNum * 50;

SelectObject(bufdc,tile);

if(!mapIndex[i])

BitBlt(mdc,x,y,50,50,bufdc,0,0,SRCCOPY);

else

{

if(mapIndex[i] == 2)

{

nowPos = i;

path.push(i);

record[i] = 0;

}

BitBlt(mdc,x,y,50,50,bufdc,0,0,WHITENESS);

}

}

prePos = cols * rows + 1;

MyPaint(hdc);

return TRUE;

}

//****核心代码*********************************

void MyPaint(HDC hdc)

{

int rowNum,colNum;

int x,y;

int up,down,left,right;

rowNum = prePos / cols;

colNum = prePos % cols;

x = colNum * 50;

y = rowNum * 50;

SelectObject(bufdc,ball);

BitBlt(mdc,x,y,50,50,bufdc,0,0, WHITENESS);

rowNum = nowPos / cols;

colNum = nowPos % cols;

x = colNum * 50;

y = rowNum * 50;

SelectObject(bufdc,ball);

BitBlt(mdc,x,y,50,50,bufdc,0,0, SRCCOPY);

if(!find)

{

str = "迷宫入口";

up    = nowPos - cols;

down  = nowPos + cols;

left  = nowPos - 1;

right = nowPos + 1;

if(up=0 record[up])

{

path.push(up);

record[up] = 0;

prePos = nowPos;

nowPos = up;

      if(mapIndex[nowPos] == 3)

find = true;

}

else if(down=cols*rows-1 record[down])

{

path.push(down);

record[down] = 0;

prePos = nowPos;

nowPos = down;

if(mapIndex[nowPos] == 3)

find = true;

}

else if(left=rowNum*cols record[left])

{

path.push(left);

record[left] = 0;

prePos = nowPos;

nowPos = left;

if(mapIndex[nowPos] == 3)

find = true;

}

else if(right=(rowNum+1)*cols-1 record[right])

{

path.push(right);

record[right] = 0;

prePos = nowPos;

nowPos = right;

if(mapIndex[nowPos] == 3)

find = true;

}

else

{

if(path.size() = 1) //#59076;#59343;#58864;#58892;

str = "xxxxx";

else

{

path.pop();

prePos = nowPos;

nowPos = path.top();

}

}

}

else

{

str = "找到出口";

}

TextOut(mdc,0,0,str,strlen(str));

BitBlt(hdc,10,10,cols*50,rows*50,mdc,0,0,SRCCOPY);

tPre = GetTickCount();

}

//****消息函数***********************************

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

switch (message)

{

case WM_KEYDOWN:

if(wParam==VK_ESCAPE)

PostQuitMessage(0);

break;

case WM_DESTROY:

DeleteDC(mdc);

DeleteDC(bufdc);

DeleteObject(ball);

ReleaseDC(hWnd,hdc);

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

 }

 return 0;

}

//  可以运行   请采纳

有不懂的可以联系我

这个可是标准c++的   这是结果

这是源代码 

求助 java一个二维数组代表迷宫。0代表道路 2表示墙壁。 假设老鼠会从数组[1][0]开始

这个可以用 堆栈 来完成。

用堆栈的基本思路就是。

设置一个起点A。将 A 入栈 。

从A开始找到第一个可以达到的点B。将 B 入栈 。

如果B无路可走。则在A点处重新换一个可达到的点。否则继续 2-3 。直到达到终点。或者五路可走。

详细的解释,这儿有一篇博文:

java老鼠迷宫代码难吗

非常难。思路:

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

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

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

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

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。