⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 grid.cpp

📁 俄罗斯方块
💻 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 + -