📄 grid.cpp
字号:
#include "Grid.h"
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
Grid::Grid()
{
//将位示图的每一位清0,也即将每行清0
bit.resize(LINES);
for (int i=0; i<bit.size();i++)
{
bit[i].reset();
}
//测试网格
bit[19].set();
bit[18] = LineCode("0000111100001111");
bit[17].set();
bit[16] = LineCode("1111000000001111");
}
void Grid::show()//测试代码
{
for (int i=0; i<bit.size();i++)
{
string s1 = bit[i].to_string();
reverse(s1.begin(),s1.end());
cout<<s1<<endl;
}
cout<<"-------------------------"<<endl;
}
VectInt Grid::getFullLines() const
{
VectInt v;
for (int i=0; i<bit.size();i++)
{
if(bit[i].count()==bit[i].size())
{
v.push_back(i);
}
}
return v;
}
void Grid::clearLines(VectInt inFullLines)
{
//方法1:复制
/*IterGrid begin,second,end;
begin = bit.begin();
second = begin+1;
for (int i=0;i<inFullLines.size();i++)
{
end = begin+inFullLines[i]-1;
copy(begin,end,second);
bit[0].reset();
}*/
//方法2:删除(反方向删,且前提是行号向量升序)
IterGrid begin = bit.begin();
for (int i=inFullLines.size()-1;i>=0;i--)
{
bit.erase(begin+inFullLines[i]);
}
bit.insert(begin,inFullLines.size(),LineCode(0));
}
bool Grid::acceptBox(const Box &box)
{
Coord location = box.getLocation();
BoxCode code = box.getCode();
int x,y;
for (int i=0; i<16;i++)
{
if (true == code.test(15-i))
{
x = location.x+ i%4;
y = location.y+ i/4;
if (isOccupied(y,x))
{
return false;
}
setOccupied(y,x);
}
}
return true;
}
bool Grid::isOccupied(int x, int y) const
{
return bit[x].test(y);
}
void Grid::setOccupied(int x, int y)
{
bit[x].set(y);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -