前回に引き続き、今回はWorldクラス最後の解説として、PictureBoxから派生させてコントロールとなったWorldクラスの描画処理とアバター機能追加の為に新作した"AvatarController"ダイアログをやろうと思ったのですが、最後の最後で「文字数オーバーエラー」が出てしまいました。(エディターの「文字数:」はまだ16,140だったのですが...)

 

取り敢えず、PictureBoxから派生させてコントロールとなったWorldクラスの描画処理のみをやります。

 

【Worldクラス後半-その1】

        ///////////////////
        //描画関係メソッド
        ///////////////////
        //画面消去

        public void Clear()
        {
            gHandle.Clear(this.BackColor);    //解説:これは仮想画面Canvas(ビットマップ)の描画用ハンドルです。
        }

        //背景(Map)を表示する    //解説:Mapは文字ベースのオリジナル地形図です。
        public void ShowMap()
        {
            bool changed = false;                        //WorldのMapと論理マップ(PrevMap)との差異フラグ
            for(int j = 0; j < Wld_Height; j++)            //Y座標
            {
                for(int i = 0; i < Wld_Width; i++)        //X座標
                {
                    //ビットマップ表示
                    int n = Check_What(i, j);            //(i, j)の位置に何があるか
                    if(PrevMap[Wld_Width * j + i] != n)    //前回から変更があれば
                    {
                        PrevMap[Wld_Width * j + i] = n;    //記録して
                        changed = true;                    //差異フラグを立てる
                    }
                    Cell c;                                //Cell(解説:セルがいた場合の情報収集用)
                    switch(n)
                    {
                        case 0:    //野原
                        case 1:    //山
                        case 2:    //河川
                        case 3:    //食物
                            if(changed)                    //前回から変更があれば(解説:正確には「あった場合のみ」
                                gHandle.DrawImage(Terrain_Bmp[n], i * 16, j * 16);    //解説:nに応じた「地形ビットマップ配列」を表示
                            break;
                        default:
                            if(n > 3)                    //Cell(4 + ID)の場合
                            {
                                c = Get_Cell(i, j);        //(i, j)の位置あるCellを取得
                                if(c.ID == MyID && c.Alive)    //アバターの場合
                                    gHandle.DrawImage(Cell_Bmp[Max_Tribe], i * 16, j * 16);    //解説:アバタービットマップを表示
                                else                        //アバターではない場合
                                    gHandle.DrawImage(Cell_Bmp[c.Tribe], i * 16, j * 16);    //解説:死亡セルはTribeが"3"となり、ここで表示
                            }
                            else if(n == -1)
                                MessageBox.Show("地形ファイル(*.trn)に許容されない文字が含まれています。",
                                                "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        break;
                    }
                }
                if(changed)        //変化が一つでもあれば、World(描画領域)を更新
                    this.Image = (Image)Canvas;    //解説:Worldクラスインスタンスのコントロールの背景画面となる
            }
        }
    }
 

次回にAvatarControllerダイアログをすべてカバーできるとよいのですが...(心配)