老鼠迷宮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-tw/n/237388.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:04
下一篇 2024-12-12 12:04

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論