ロシアブロック(九)パネルの中の障害ブロック
最初は純粋なC++ロシアのブロックフレームを作ったとき、パネルの中の障害ブロックを考えさせなかった.
今から追加しましょう.パネルにメンバー変数を追加して、障害ブロックのセットを覚えます.
私の最初の考えは1つの容器で1組のBoxを保存することです.例えばset、(setは中のboxが重複できないことを意味します).しかし、このように販売するときは少し複雑かもしれません.
比較的一般的な方法はboolの2次元配列を使用することです.2 D配列はパネル全体の平面を表します.boolは平面のどの点に障害ブロックがあり、どの点がないかを表す.
しかし、コンテナクラス、boolの2次元配列を練習するために、vectorで代用することもできます.
奥のvectorはboolからなる配列、つまりPanelの行を表しています.
外のvector<…>行からなる配列、つまりパネルの平面を表します.
だから中のvectorサイズは行の個数で、外のvectorサイズは列の個数であるべきです.これは必ずはっきりさせなければならない.
私たちはゲームが始まるとこの障害の2次元配列を作成し、すべてクリアします(ロシアのブロックが複雑なときは最初はクリアではなく、乱れた障害ブロックを埋めて、この学生は自分で実現することができます).
ここではいくつかのSTL標準アルゴリズムresizeとfillを用い,vectorの構造関数vector(size,value)も用いた.
アルゴリズムは紹介しませんが、幅の広い設定に注意してください.
今から追加しましょう.パネルにメンバー変数を追加して、障害ブロックのセットを覚えます.
私の最初の考えは1つの容器で1組のBoxを保存することです.例えばset
比較的一般的な方法はboolの2次元配列を使用することです.2 D配列はパネル全体の平面を表します.boolは平面のどの点に障害ブロックがあり、どの点がないかを表す.
しかし、コンテナクラス、boolの2次元配列を練習するために、vector
奥のvector
外の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
アルゴリズムは紹介しませんが、幅の広い設定に注意してください.