[A*算法02]Graph类构建
Posted AIplusX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[A*算法02]Graph类构建相关的知识,希望对你有一定的参考价值。
写在前面
今天主要完成了基本地图Graph类的设计以及实现,我设置的控制台的大小是960X480,每个格子的大小是32,水平往右是x轴正方向,竖直向下是y轴正方向,因此x轴总共有30个格子,y轴总共有15个格子。
知识点
1:特定范围随机数生成方法:
#define RANDOM(a) (rand()%a)
#define RANDOM_RANGE(a,b) (rand()%(b-a+1)+a) //[i, j]
2:C语言字符串换行:
利用“ \\ ”符号进行同一个语句换行。
Graph类构建
首先是我设计了一个UserPara的结构体,用来存储用户数据,源码如下图所示:
typedef struct _UserPara
{
public:
int win_width = 960;
int win_height = 480;
int block_size = 32;
int obstacle_num = 88;
int map[30][15] = { 0 };// 960/32 = 30, 480/32 = 15
int map_x = win_width / block_size;
int map_y = win_height / block_size;
}UserPara;
我的设计思路是将所有可调参数都整理到这个struct里面,然后将这个struct再做为参数传递给Graph类,这样集中参数方便二次开发。
今天主要是做的是Graph类的地图绘制构建,效果图如下:
青色的方块是可走的路径,黑色的方块是障碍物,后期还会加入起点和终点,今天最主要是将基本框架搭建完毕,地图展现的源码如下所示:
void Graph::show_map()
{
srand((unsigned)time(NULL));
initgraph(graph_user_para.win_width, graph_user_para.win_height);
settextstyle(16, 8, _T("Courier"));
setbkcolor(WHITE);
cleardevice();
for (int i = 0; i < graph_user_para.obstacle_num; i++) {
graph_user_para.map[obstacle[i].x][obstacle[i].y] = OBSTACLE;
}
for (int i = 0; i < graph_user_para.map_x; i++) {
for (int j = 0; j < graph_user_para.map_y; j++) {
switch (graph_user_para.map[i][j])
{
case PATH:
setfillcolor(LIGHTCYAN);
break;
case OBSTACLE:
setfillcolor(BLACK);
break;
default:
break;
}
fillrectangle(i * graph_user_para.block_size, j * graph_user_para.block_size, \\
(i + 1) * graph_user_para.block_size, (j + 1) * graph_user_para.block_size);
}
}
}
为了增加代码的简洁性,我尽量减少在程序中使用绝对位置,而是使用相对位置进行图像绘制。
Graph类的构造函数和析构函数如下所示:
Graph::Graph(UserPara graph_user_para)
{
graph_user_para = graph_user_para;
obstacle = new Point[graph_user_para.obstacle_num];
for (int i = 0; i < graph_user_para.obstacle_num; i++) {
obstacle[i].x = int(RANDOM_RANGE(0, graph_user_para.map_x));
obstacle[i].y = int(RANDOM_RANGE(0, graph_user_para.map_y));
//graph_user_para.map[obstacle[i].x][obstacle[i].y] = OBSTACLE;
}
}
Graph::~Graph()
{
delete[] obstacle;
}
记住,在C++类进行析构的时候一定要释放new的内存,否则很容易造成内存泄漏。
以上是关于[A*算法02]Graph类构建的主要内容,如果未能解决你的问题,请参考以下文章
论文笔记:Weighted Graph Cuts without Eigenvectors:A Multilevel Approach