使用Windows和c++编程做一个小游戏
目的是做一个游戏,现在其中一个模块不知道怎么做;
!!最恶心的就是只能用这些个东西做啊,其他都不让用
问题:运行这个游戏后,玩家进入界面,有两个功能:选择地图,自定义地图。‘选择地图’则进入选择地图界面挑选地图进入游戏(这些功能都还没做(╯°□°)╯︵ ┻━┻)。
自定义地图,其实也就是画一些线段,矩形(也可以理解为四条线段),然后要怎么把这个自定义的地图保存起来,用什么方式保存起来,下一步用的时候怎么拿进来处理。(这些功能都还没做)
因为我的游戏运行是需要利用地图中的所有线段,所以上面保存以后还要能方便我的读取.
游戏地图是类似下图这样的(随便画的):

一点想法(不知行不行)
保存为bmp格式的?(因为存储了每个像素),所以大概会好读取一点?然后把它变成一个二维数组,背景用0表示,墙壁(线段)用1表示,这样就得到了数组

然后再遍历这个数组,进行处理,返回一个**vector<line>**(LINE是我自己定义的结构体)</line>
struct LINE {
POINT p1;
POINT p2;
};
至于获取线段,直接遍历就行,像下面这样。
//读取二维数组(0,1表示),返回一个表示地图中的 线段 数组
vector<LINE> ReadFromArray(vector<vector<int>> matrix) {
vector<LINE> allLines;
//行遍历
for (int i = 0; i < matrix.size(); i++) {
int cnt = 0;
for (int j = 0; j < matrix[i].size(); j++) {
if (matrix[i][j]==1)//墙壁
cnt++;
else {
if (cnt >= 2) {
allLines.push_back({ POINT{j - 1,i},POINT{j - cnt,i} });
}
cnt = 0;
}
}
if (cnt >= 2) {
int j = matrix[i].size();
allLines.push_back({ POINT{j - 1,i},POINT{j - cnt,i} });
}
}
//列遍历
for (int i = 0; i < matrix[0].size(); i++) {
int cnt = 0;
for (int j = 0; j < matrix.size(); j++) {
if (matrix[j][i] == 1)//墙壁
cnt++;
else {
if (cnt >= 2) {
allLines.push_back({ POINT{i,j - 1},POINT{i,j - cnt} });
}
cnt = 0;
}
}
if (cnt >= 2) {
int j = matrix.size();
allLines.push_back({ POINT{i,j - 1},POINT{i,j - cnt} });
}
}
//到这里所有直线段已经加入vector
return allLines;
}