用Qt写一个迷宫游戏
一段时间以前,我用c写了个使用随机数生成迷宫的代码,现在在自学学Qt,于是就想到了利用这个代码改一个小游戏。
现在记录一下自己的学习过程,也算抛砖引玉,各位看官请多指教。
话不多说现在开始。
使用的是Qt的IDE:QT Creater
step 1:把迷宫生成的c代码用c++类改写
为了方便,先把代码改写成类,诸位有兴趣可以拿去一玩。
代码丑了点,但是能用就行了。
maze.h
#ifndef MAZE_H
#define MAZE_H
/**************************************************
* -1:边界 0:墙壁
* 1:空单元(初始化后未判定的单元)
* 2:待定墙壁(新建已定单元时建立)
* 3:已定单元(确定迷宫树已延伸到的单元)
* 4:打通墙壁(延伸操作)
* 5.起点
* 6.终点
* 7.已经过路径
***************************************************/
class maze {
private:
int level; //迷宫阶数
int** map; //地图存储空间
int start_x, start_y; //起终点
//生成基础地图(单元格)
void base();
//使点的周围设为待定(2)
void _2(int i, int j);
//设定迷宫开始延伸的起点
void start() ;
//循环停止判定(是否存在未判定的区域)
bool judge();
//操作(如果相邻空单元(1)则打通(变为4),如果不相邻空单元则为墙壁(0))
void op(int i, int j);
//随机选择一个待定墙壁判断并操作
void random2();
public:
//构造函数申请内存空间
maze(int in_level);
~maze();
//获取地图
int getlevel() ;
int** getmap();
int getside();
//生成地图
void makemap();
int p_x, p_y; //当前位置
//重置地图
void rebuildmap();
int* operator[](int index);
};
#endif // MAZE_H
maze.cpp
#include "maze.h"
//生成基础地图(单元格)
void maze::base() {
for (int i = 0; i < level * 2 + 1; i++) {
for (int j = 0; j < level * 2 + 1; j++) {
if (i == 0 || j == 0 || i == level * 2 + 1 - 1 ||
j == level * 2 + 1 - 1) {
map[i][j] = -1;
} else if (i % 2 != 0 && j % 2 != 0) {
map[i][j] = 1;
} else {
map[i][j] = 0;
}
}
}
}
//使点的周围设为待定(2)
void maze:: _2(int i, int j) {
if (map[i - 1][j] == 0) {
map[i - 1][j] = 2;
}
if (map[i + 1][j] == 0) {
map[i + 1][j] = 2;
}
if (map[i][j - 1] == 0) {
map[i][j - 1] = 2;
}
if (map[i][j + 1] == 0) {
map[i][j + 1] = 2;
}
}
//设定迷宫开始延伸的起点
void maze:: start() {
map[start_x][start_y] = 5;
_2(start_x, start_y);
}
//循环停止判定(是否存在未判定的区域)
bool maze:: judge() {
bool flag = 0;
for (int i = 0; i < level * 2 + 1; i++) {
for (int j = 0; j < level * 2 + 1; j++) {
if (map[i][j] == 2) {
flag = 1;
return flag;
}
}
}
return flag;
}
//操作(如果相邻空单元(1)则打通(变为4),如果不相邻空单元则为墙壁(0))
void maze:: op(int i, int j) {
if ((map[i - 1][j] == 3 || map[i - 1][j] == 5) && map[i + 1][j] == 1) {
map[i][j] = 4;
map[i + 1][j] = 3;
_2(i + 1, j);
start_x = i + 1;
start_y = j;
} else if ((map[i][j - 1] == 3 || map[i][j - 1] == 5) &&
map[i][j + 1] == 1) {
map[i][j] = 4;
map[i][j + 1] = 3;
_2(i, j + 1);
start_x = i;
start_y = j + 1;
} else if ((map[i + 1][j] == 3 || map[i + 1][j]

最低0.47元/天 解锁文章
2618

被折叠的 条评论
为什么被折叠?



