예제 #1
0
    /**
     *	テスト用のブロックを配置
     */
    void setTestBlocks(int w, int h, int color, Stage stg, int[] blocks)
    {
        //	配置指定でブロックが無い場合は、配置先を変更しないので別途盤面をクリアしておく
        stg.clearAllBlocks();

        Stage.BlockInfo[] area = new Stage.BlockInfo[w * h];

        for (int y = 0; y < h; y++)
        {
            for (int x = 0; x < w; x++)
            {
                int index;
                index       = x + y * w;
                area[index] = new Stage.BlockInfo();

                if (1 == blocks[index])
                {
                    area[index].state       = Stage.BLOCK_STATE.EXISTS;
                    area[index].color_index = color;
                }
                else
                {
                    area[index].state       = Stage.BLOCK_STATE.NONE;
                    area[index].color_index = 0;
                }
            }
        }

        //	指定されたブロックの領域を配置
        stg.placeBlocks(0, 0, area, w, h);
    }
예제 #2
0
 /**
  *	判定用のブロック状態を作成
  */
 Stage.BlockInfo[] createPatternArea(Tetrimino tetrimino)
 {
     Tetrimino.Pattern pat     = tetrimino.getPattern();
     Stage.BlockInfo[] patArea = new Stage.BlockInfo[pat.w * pat.h];
     for (int y = 0; y < pat.h; y++)
     {
         for (int x = 0; x < pat.w; x++)
         {
             int             index = x + y * pat.w;
             Stage.BlockInfo binfo = new Stage.BlockInfo();
             if ('1' == pat.pat[index])
             {
                 binfo.state       = Stage.BLOCK_STATE.EXISTS;
                 binfo.color_index = tetrimino.getColorIndex();
             }
             else
             {
                 binfo.state       = Stage.BLOCK_STATE.NONE;
                 binfo.color_index = 0;
             }
             patArea[index] = binfo;
         }
     }
     return(patArea);
 }
예제 #3
0
    public void     placeBlocks()
    {
        Stage stg = new Stage(6, 10);

        int block_w = 6;
        int block_h = 10;

        Stage.BlockInfo[] area = new Stage.BlockInfo[block_w * block_h];

        int index;

        for (int y = 0; y < block_h; y++)
        {
            for (int x = 0; x < block_w; x++)
            {
                index                   = x + y * block_w;
                area[index]             = new Stage.BlockInfo();
                area[index].state       = Stage.BLOCK_STATE.EXISTS;
                area[index].color_index = index;                        //	確認用にインデックスをそのまま入れておく
            }
        }

        Stage.BlockInfo[,] stgBinfo = stg.getBlockInfo();
        int blank_count = 0;

        //[todo]	このループ何とかする
        for (int y = 0; y < block_h; y++)
        {
            for (int x = 0; x < block_w; x++)
            {
                if ((stgBinfo[x, y].state == Stage.BLOCK_STATE.NONE) && (stgBinfo[x, y].color_index == 0))
                {
                    blank_count++;
                }
            }
        }

        Assert.AreEqual(block_w * block_h, blank_count);

        stg.placeBlocks(0, 0, area, 6, 10);

        int exists_count = 0;

        for (int y = 0; y < block_h; y++)
        {
            for (int x = 0; x < block_w; x++)
            {
                index = x + y * block_w;
                if ((stgBinfo[x, y].state == Stage.BLOCK_STATE.EXISTS) && (stgBinfo[x, y].color_index == index))
                {
                    exists_count++;
                }
            }
        }

        Assert.AreEqual(block_w * block_h, exists_count);
    }
예제 #4
0
    /**
     *	指定されたブロックの状態と盤面を比較
     */
    //	比較するブロックの色は、ひとまず1色のみにしておく
    //	「ブランク=0」それ以外は指定の色とみなす
    void compareBlocks(int block_w, int block_h, int[] blocks, int block_color, Stage.BlockInfo[,] binfos)
    {
        for (int y = 0; y < block_h; y++)
        {
            for (int x = 0; x < block_w; x++)
            {
                //	消えたラインの分、一番上のラインは何もなくなる
                Stage.BlockInfo binfo = binfos[x, y];
                int             block = blocks[x + y * block_w];

                Assert.IsTrue(((block == 1) && (binfo.state == Stage.BLOCK_STATE.EXISTS)) ||
                              ((block == 0) && (binfo.state == Stage.BLOCK_STATE.NONE)), "[" + x + "," + y + "] is not match"
                              );
                Assert.IsTrue(((block == 1) && (binfo.color_index == block_color)) ||
                              ((block == 0) && (binfo.color_index == 0)), "[" + x + "," + y + "] is not match"
                              );
            }
        }
    }