本文目錄一覽:
- 1、請教 老鼠走迷宮 的編程問題
- 2、java編程 老鼠走迷宮
- 3、跪求老鼠走迷宮遊戲,必須用C++編寫,用棧來實現,因為是數據結構課程設計所以只要現成代碼,越快越好。
- 4、求助 java一個二維數組代表迷宮。0代表道路 2表示牆壁。 假設老鼠會從數組[1][0]開始
- 5、java老鼠迷宮代碼難嗎
請教 老鼠走迷宮 的編程問題
走迷宮遊戲,程序開始進行時顯示一個迷宮地圖,迷宮中央有一隻老鼠,迷宮的右下方有一個糧倉,遊戲的任務是使用鍵盤的方向鍵操縱老鼠在規定的時間內走到糧倉處。
要求:
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、最後打印數組,看老鼠的實際路線。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/237388.html