ロシアブロック(九)パネルの中の障害ブロック


最初は純粋なC++ロシアのブロックフレームを作ったとき、パネルの中の障害ブロックを考えさせなかった.
今から追加しましょう.パネルにメンバー変数を追加して、障害ブロックのセットを覚えます.
 
私の最初の考えは1つの容器で1組のBoxを保存することです.例えばset、(setは中のboxが重複できないことを意味します).しかし、このように販売するときは少し複雑かもしれません.
比較的一般的な方法はboolの2次元配列を使用することです.2 D配列はパネル全体の平面を表します.boolは平面のどの点に障害ブロックがあり、どの点がないかを表す.
しかし、コンテナクラス、boolの2次元配列を練習するために、vectorで代用することもできます.
 
奥のvectorはboolからなる配列、つまりPanelの行を表しています.
外のvector<…>行からなる配列、つまりパネルの平面を表します.
 
だから中のvectorサイズは行の個数で、外のvectorサイズは列の個数であるべきです.これは必ずはっきりさせなければならない.
class Panel : public CWnd
{
private:
	std::vector<std::vector<bool>>  body;
 
 
私たちはゲームが始まるとこの障害の2次元配列を作成し、すべてクリアします(ロシアのブロックが複雑なときは最初はクリアではなく、乱れた障害ブロックを埋めて、この学生は自分で実現することができます).
void Panel::start()
{
	createBody();
	randomCreate();
	Invalidate(false);
}

void Panel::createBody()
{
	body.resize(getHeight(), vector<bool>(getWidth(),false));
	fill(body.begin(), body.end(),vector<bool>(getWidth(),false));
}

 
ここではいくつかのSTL標準アルゴリズムresizeとfillを用い,vectorの構造関数vector(size,value)も用いた.
アルゴリズムは紹介しませんが、幅の広い設定に注意してください.