mirror of
https://gitee.com/yyz_o/bk_bishe_pi.git
synced 2025-09-07 23:21:26 +00:00
2025.5.15第一次提交,修复大量应切换vector造成的bug,并添加实机测试文件夹。
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include<iostream>
|
||||
#include<string>
|
||||
#include<vector>
|
||||
#include<cstddef>
|
||||
#include"eyebot++.h"
|
||||
#include"maze_parameter.h"
|
||||
#include"maze_func.h"
|
||||
@@ -21,89 +22,40 @@ bool check_mark()
|
||||
bool S_mark;
|
||||
bool E_mark;
|
||||
|
||||
if (x>0 && y>0) //情况1
|
||||
if (x > 0)
|
||||
{
|
||||
if (y == size_y - 1) //N
|
||||
{
|
||||
N_mark = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
N_mark = mark[x][y+1];
|
||||
}
|
||||
W_mark = mark[x-1][y]; //W
|
||||
S_mark = mark[x][y-1]; //S
|
||||
if (x == size_x -1) //E
|
||||
{
|
||||
E_mark = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
E_mark = mark[x+1][y];
|
||||
}
|
||||
W_mark = mark[x-1][y];
|
||||
}
|
||||
else if (x==0 && y>0) //情况2
|
||||
else
|
||||
{
|
||||
if (y == size_y - 1) //N
|
||||
{
|
||||
N_mark = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
N_mark = mark[x][y+1];
|
||||
}
|
||||
W_mark = true; //W
|
||||
S_mark = mark[x][y-1]; //S
|
||||
if (x == size_x - 1) //E
|
||||
{
|
||||
E_mark = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
E_mark = mark[x+1][y];
|
||||
}
|
||||
W_mark = true;
|
||||
}
|
||||
else if (x>0 && y==0) //情况3
|
||||
|
||||
if (y > 0)
|
||||
{
|
||||
if (y == size_y - 1) //N
|
||||
{
|
||||
N_mark = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
N_mark = mark[x][y+1];
|
||||
}
|
||||
W_mark = mark[x-1][y]; //W
|
||||
S_mark = true; //S
|
||||
if (x == size_x -1) //E
|
||||
{
|
||||
E_mark = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
E_mark = mark[x+1][y];
|
||||
}
|
||||
S_mark = mark[x][y-1];
|
||||
}
|
||||
else //(x==0 && y==0)
|
||||
else
|
||||
{
|
||||
if (y == size_y - 1) //N
|
||||
{
|
||||
N_mark = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
N_mark = mark[x][y+1];
|
||||
}
|
||||
W_mark = true; //W
|
||||
S_mark = true; //S
|
||||
if (x == size_x -1) //E
|
||||
{
|
||||
E_mark = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
E_mark = mark[x+1][y];
|
||||
}
|
||||
S_mark = true;
|
||||
}
|
||||
|
||||
if (x < size_x - 1)
|
||||
{
|
||||
E_mark = mark[x+1][y];
|
||||
}
|
||||
else
|
||||
{
|
||||
E_mark = true;
|
||||
}
|
||||
|
||||
if (y < size_y - 1)
|
||||
{
|
||||
N_mark = mark[x][y+1];
|
||||
}
|
||||
else
|
||||
{
|
||||
N_mark = true;
|
||||
}
|
||||
|
||||
bool N_road = (!wall[x][y+1][0] && N_mark);
|
||||
@@ -126,15 +78,22 @@ void maze_entry(int x, int y, int dir, int open)
|
||||
switch (maze_dir)
|
||||
{
|
||||
case 0: //0表示北(上),表示(x,y+1)坐标单元格的下方墙壁信息
|
||||
if (y == mark[0].size() - 1 && open) //检测是否超出容器范围,如果超出,则扩大容器:对每一个内层尾插数据
|
||||
if (y == static_cast<int>(mark[0].size()) - 1 && open) //检测是否超出容器范围,如果超出,则扩大容器:对每一个内层尾插数据
|
||||
{
|
||||
for (int i = 0; i < mark.size() - 1; i++)
|
||||
if (!mark.empty() && !wall.empty()) //插入安全性检测,确保容器非空
|
||||
{
|
||||
mark[i].emplace_back(0);
|
||||
for (size_t i = 0; i < mark.size(); i++)
|
||||
{
|
||||
mark[i].emplace_back(0);
|
||||
}
|
||||
for (size_t i = 0; i < wall.size(); i++)
|
||||
{
|
||||
wall[i].emplace_back(std::vector<int>(2,0));
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < wall.size() - 1; i++)
|
||||
else
|
||||
{
|
||||
wall[i].emplace_back(vector<int>(2,0));
|
||||
cout << "error: mark or wall empty" << endl;
|
||||
}
|
||||
}
|
||||
wall[x][y+1][0] = !open;
|
||||
@@ -143,8 +102,21 @@ void maze_entry(int x, int y, int dir, int open)
|
||||
case 1: //1表示西(左),表示(x,y)坐标单元格的左侧墙壁信息
|
||||
if (x == 0 && open) //检测是否超出容器范围,如果超出,则扩大容器:头插一个内层
|
||||
{
|
||||
mark.emplace(mark.begin(), mark[0].size(), 0);
|
||||
wall.emplace(wall.begin(), wall[0].size(), vector<int>(2,0));
|
||||
if (!mark.empty() && !wall.empty()) //插入安全性检测,确保容器非空
|
||||
{
|
||||
// std::vector<int> mark_insert(mark[0].size(), 0);
|
||||
// mark.insert(mark.begin(), mark_insert);
|
||||
|
||||
// std::vector<std::vector<int>> wall_insert(wall[0].size(), std::vector<int>(2,0));
|
||||
// wall.insert(wall.begin(), wall_insert);
|
||||
|
||||
mark.emplace(mark.begin(), std::vector<int>(mark[0].size(), 0)); //在mark头部插入一个内层
|
||||
wall.emplace(wall.begin(), std::vector<std::vector<int>>(wall[0].size(), std::vector<int>(2, 0))); //在wall头部插入一个内层
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "error: mark or wall empty" << endl;
|
||||
}
|
||||
}
|
||||
wall[x][y][1] = !open;
|
||||
break;
|
||||
@@ -152,23 +124,37 @@ void maze_entry(int x, int y, int dir, int open)
|
||||
case 2: //2表示南(下),表示(x,y)坐标单元格的下侧墙壁信息
|
||||
if (y == 0 && open) //检测是否超出容器范围,如果超出,则扩大容器:对每一个内层头插数据
|
||||
{
|
||||
for (int i = 0; i < mark.size() - 1; i++)
|
||||
if (!mark.empty() && !wall.empty()) //插入安全性检测,确保容器非空
|
||||
{
|
||||
mark[i].emplace(mark[i].begin(), 0);
|
||||
for (size_t i = 0; i < mark.size(); i++)
|
||||
{
|
||||
mark[i].emplace(mark[i].begin(), 0);
|
||||
}
|
||||
for (size_t i = 0; i < wall.size(); i++)
|
||||
{
|
||||
wall[i].emplace(wall[i].begin(), std::vector<int>(2,0));
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < wall.size() - 1; i++)
|
||||
else
|
||||
{
|
||||
wall[i].emplace(wall[i].begin(), vector<int>(2,0));
|
||||
cout << "error: mark or wall empty" << endl;
|
||||
}
|
||||
}
|
||||
wall[x][y][0] = !open;
|
||||
break;
|
||||
|
||||
case 3: //3表示东(右),表示(x+1,y)坐标单元格的左侧墙壁信息
|
||||
if (x == (mark.size() - 1) && open) //检测是否超出容器范围,如果超出,则扩大容器:尾插一个内层
|
||||
if (x == static_cast<int>(mark.size()) - 1 && open) //检测是否超出容器范围,如果超出,则扩大容器:尾插一个内层
|
||||
{
|
||||
mark.emplace_back(mark[0].size(), 0);
|
||||
wall.emplace_back(wall[0].size(), vector<int>(2,0));
|
||||
if (!mark.empty() && !wall.empty()) //插入安全性检测,确保容器非空
|
||||
{
|
||||
mark.emplace_back(std::vector<int>(mark[0].size(), 0));
|
||||
wall.emplace_back(std::vector<std::vector<int>>(wall[0].size(), std::vector<int>(2, 0)));
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "error: mark or wall empty" << endl;
|
||||
}
|
||||
}
|
||||
wall[x+1][y][1] = !open;
|
||||
break;
|
||||
@@ -183,7 +169,7 @@ bool unmarked(int x, int y, int dir)
|
||||
switch(maze_dir)
|
||||
{
|
||||
case 0:
|
||||
if (y < mark[0].size() - 2)
|
||||
if (y < (static_cast<int>(mark[0].size()) - 1))
|
||||
{
|
||||
if (mark[x][y+1] == 0)
|
||||
{
|
||||
@@ -193,7 +179,7 @@ bool unmarked(int x, int y, int dir)
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (x > 1)
|
||||
if (x > 0)
|
||||
{
|
||||
if (mark[x-1][y] == 0)
|
||||
{
|
||||
@@ -203,7 +189,7 @@ bool unmarked(int x, int y, int dir)
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (y > 1)
|
||||
if (y > 0)
|
||||
{
|
||||
if (mark[x][y-1] == 0)
|
||||
{
|
||||
@@ -213,7 +199,7 @@ bool unmarked(int x, int y, int dir)
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (x < mark.size() - 2)
|
||||
if (x < (static_cast<int>(mark.size()) - 1))
|
||||
{
|
||||
if (mark[x+1][y] == 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user