#include "play_maze.h"
#include "ui_play_maze.h"
#include <QDebug>
//using namespace std;
play_maze::play_maze(QWidget *parent) :
QWidget(parent),
ui(new Ui::play_maze)
{
ui->setupUi(this);
control_direction=2;//往右
setWindowFlags(windowFlags()&~Qt::WindowMaximizeButtonHint); // 禁止最大化按钮
setFixedSize(this->width(),this->height()); // 禁止拖动窗口大小
//this->move((a.desktop()->width() - this->width()) / 2, (app.desktop()->height() - win.height()) / 2);
QDesktopWidget *deskdop = QApplication::desktop();
move((deskdop->width() - this->width())/2, (deskdop->height() - this->height())/2);
control_LEFT.load(":img/img/control_left.jpg");
control_RIGHT.load(":img/img/control_right.jpg");
target.load(":img/img/target.jpg");
road.load(":img/img/road.jpg");
wall.load(":img/img/wall.jpg");
}
play_maze::~play_maze()
{
delete ui;
}
void play_maze::on_get_row_valueChanged(int arg1)
{
pre_maze_row=arg1;
flag_get_row=true;
// qDebug()<<"pre_maze_row";
}
void play_maze::on_get_col_valueChanged(int arg1)
{
pre_maze_col=arg1;
flag_get_col=true;
}
void play_maze::on_creat_maze_clicked()//创建迷宫
{
if(flag_click){
return;
}
if(flag_get_row){
maze_row=pre_maze_row;
}
else{
maze_row=10;
//qDebug()<<"hhhh";
}
if(flag_get_col){
maze_col=pre_maze_col;
}
else{
maze_col=10;
}
//qDebug()<<maze_row<<" "<<maze_col<<endl;
flag_success=false;
//获取行列值
control_X=1;
control_Y=1;
target_X=maze_row-3;
target_Y=maze_col-3;
//qDebug()<<target_X<<" "<<target_Y<<endl;
// maze=new point *[maze_row];
// for(int i=0;i<maze_row;i++){
// maze[i]=new point[maze_col];
// }
for(int i=0;i<maze_row;i++){
for(int j=0;j<maze_col;j++){
maze[i][j].i=i;
maze[i][j].j=j;
maze[i][j].state=0;
}
}
int max;
if(maze_row>=maze_col)
max=maze_row;
else
max=maze_col;
maze_cell_size=650/max;
startTimer(5*650/max);
//qDebug()<<"get row and col"<<endl;
build_maze_stack.clear();
int i=3,j=3;
maze[i][j].state=1;
point temp;
temp.i=i;
temp.j=j;
temp.state=1;
bool up=false,down=false,left=false,right=false;
srand((unsigned)time(NULL));
while(true){//利用prim算法生成迷宫
temp.i=i;
temp.j=j;
int randnum=rand()%4;
switch (randnum) {
case 0: if(!up&&i>2&&maze[i-2][j].state==0){
build_maze_stack.push(temp);
maze[i-2][j].state=1;
maze[i-1][j].state=1;
i=i-2;
if(maze[i-1][j].state==0)
up=false;
else
up=true;
if(maze[i+1][j].state==0)
down=false;
else
down=true;
if(maze[i][j-1].state==0)
left=false;
else
left=true;
if(maze[i][j+1].state==0)
right=false;
else
right=true;
}
else{
up=true;
}
break;
case 1: if(!down&&i<maze_row-3&&maze[i+2][j].state==0)
{
build_maze_stack.push(temp);
maze[i+2][j].state=1;
maze[i+1][j].state=1;
i=i+2;
if(maze[i-1][j].state==0)
up=false;
else
up=true;
if(maze[i+1][j].state==0)
down=false;
else
down=true;
if(maze[i][j-1].state==0)
left=false;
else
left=true;
if(maze[i][j+1].state==0)
right=false;
else
right=true;
}
else{
down=true;
}
break;
case 2: if(!left&&j>2&&maze[i][j-2].state==0)
{
build_maze_stack.push(temp);
maze[i][j-2].state=1;
maze[i][j-1].state=1;
j=j-2;
if(maze[i-1][j].state==0)
up=false;
else
up=true;
if(maze[i+1][j].state==0)
down=false;
else
down=true;
if(maze[i][j-1].state==0)
left=false;
else
left=true;
if(maze[i][j+1].state==0)
right=false;
else
right=true;
}
else{
left=true;
}
break;
case 3: if(!right&&j<maze_col-3&&maze[i][j+2].state==0)
{
build_maze_stack.push(temp);
maze[i][j+2].state=1;
maze[i][j+1].state=1;
j=j+2;
if(maze[i-1][j].state==0)
up=false;
else
up=true;
if(maze[i+1][j].state==0)
down=false;
else
down=true;
if(maze[i][j-1].state==0)
left=false;
else
left=true;
if(maze[i][j+1].state==0)
right=false;
else
right=true;
}
else{
right=true;
}
break;
}
if(up&&down&&left&&right){
if(!build_maze_stack.isEmpty()){
i=build_maze_stack.top().i;
j=build_maze_stack.top().j;
build_maze_stack.pop();
if(maze[i-1][j].state==0)
up=false;
else
up=true;
if(maze[i+1][j].state==0)
down=false;
else
down=true;
if(maze[i][j-1].state==0)
left=false;
else
left=true;
if(maze[i][j+1].state==0)
right=false;
else
right=true;
}
else{
maze[1][1].state=2;
maze[maze_row-3][maze_col-3].state=3;
creat_maze=true;
for(int i=0; i<maze_row; i++)//这一段是防止生成迷宫后依旧显示路线
for(int j=0; j<maze_col; j++){
path[i][j].state=0;//在这里的状态表示父节点,1,2,3,4分别表示从上下左右发展过来
path[i][j].i=i;
path[i][j].j=j;
}
//qDebug()<<"creat maze successfully!"<<endl;
return;
}
}
}
}
void play_maze::on_search_path_clicked()//宽度优先算法
{
if(!creat_maze){
return;
}
if(flag_click||flag_success){
return;
}
open.clear();
qDebug()<<"begin find path";
ftime.start();
for(int i=0; i<maze_row; i++)
for(int j=0; j<maze_col; j++){
path[i][j].state=0;//在这里的状态表示父节点,1,2,3,4分别表示从上下左右发展过来
path[i][j].i=i;
path[i][j].j=j;
}
//用于记录该点是否搜索
没有合适的资源?快使用搜索试试~ 我知道了~
实验三:走迷宫源码(prim+A*)
共23个文件
jpg:7个
cpp:4个
h:3个
需积分: 0 0 下载量 89 浏览量
2023-10-07
23:37:41
上传
评论
收藏 1.35MB ZIP 举报
温馨提示
计算机软件实习
资源推荐
资源详情
资源评论
收起资源包目录
aimaze.zip (23个子文件)
solve_maze
point.h 381B
play_maze.ui 6KB
mainwindow.h 510B
mainwindow.cpp 900B
img.qrc 365B
main.cpp 356B
tubiao.rc 41B
play_maze.h 3KB
play_maze.cpp 30KB
mainwindow.ui 1016B
img
wall.jpg 16KB
control_left.jpg 21KB
target.jpg 87KB
mainwindow.jpg 79KB
control_right.jpg 35KB
df.png 106KB
road.jpg 2KB
BG.jpg 45KB
tubiao.ico 2.05MB
point.cpp 170B
solve_maze.pro.user.e19f903.4.8-pre1 24KB
solve_maze.pro 1KB
solve_maze.pro.user 19KB
共 23 条
- 1
资源评论
tarnishwyy
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功