講義メモ:ゲーム開発演習

同心円の描画のフォロー、塗りつぶし、文字の描画、タイトル画面と画面遷移 など

演習16 同心円の描画・改

・DrawEllipseメソッドは円を描く場合に直感的ではないので、ペンと中心座標と半径を指定して呼び出せるようにブリッジとなる
 DrawCircleメソッドを組み込んみよう
例: void DrawCircle(PaintEventArgs e, Pen p, int x, int y, int r)
・左上X座標は「中心x - 半径r」、左上Y座標は「中心y - 半径r」、高さと幅は「2 * r」となる

作成例

//演習16 同心円の描画・改
using System; //フォームアプリケーションに必須
using System.Windows.Forms; //フォームアプリケーションに必須
using System.Drawing; //Image用
class Program : Form { //Formクラスを継承
    Image backb = Image.FromFile("backb.bmp"); //背景画像の読込
    Image enemy = Image.FromFile("enemy.gif"); //アイテム画像の読込
    Image burn = Image.FromFile("burn.gif"); //効果用画像の読込
    Pen mypen = new Pen(Color.Red, 2); //ペンを生成(初期値は赤、2)
    void DrawCircle(PaintEventArgs e, Pen p, int x, int y, int r) { //【以下追加】ペン、中心座標、半径を指定して円を描画
        e.Graphics.DrawEllipse(p, x - r, y - r, 2 * r, 2 * r); //円の描画を呼ぶ
    }
    protected override void OnPaint(PaintEventArgs e) { //Formのメソッドをオーバーライド
        base.OnPaint(e); //まず、Formクラスにおけるメソッドの内容(基本再描画処理)を実行
        e.Graphics.DrawImage(backb, 0, 0); //背景画像を(0,0)から描画
        e.Graphics.DrawRectangle(mypen, 78, 411, 485, 64); //判定エリアの描画
        int mx = backb.Width / 2, my = backb.Height / 2; //中央座標を得る
        mypen.Color = Color.Yellow; //ペン色を黄色に
        mypen.Width = 10;  //ペン幅を10に
        for (int i = 1; i <= 4; i++) { //4回繰返す
            DrawCircle(e, mypen, mx, my, 15 * i); //【変更】ペン、中心座標、半径を指定して円を描画
        }
        //e.Graphics.DrawImage(enemy, mx - enemy.Width / 2, my - enemy.Height / 2); //アイテム画像を中央に描画
        //e.Graphics.DrawImage(burn, mx - burn.Width / 2, my - burn.Height / 2); //アイテム画像を中央に描画
    }
    void OnKeyDown(object o, KeyEventArgs e) { //キーボードが押された時に呼ばれるメソッド
        if(e.KeyCode.ToString() == "Escape") { //Escキーが押されたら
            Close(); //フォームアプリケーション終了
        }
    }
    Program() { //コンストラクタ
        KeyDown += new KeyEventHandler(OnKeyDown); //キーボードが押された時に呼ばれるメソッドを登録
    }
    static void Main() { //publicの指定は任意
        Program p = new Program(); //継承したフォームのインスタンスを生成
        p.Width = 660; //インスタンスのWidthプロパティに幅を代入
        p.Height = 520; //インスタンスのHeightプロパティに高さを代入
        p.Text = "Game"; //インスタンスのTextプロパティにフォーム名を代入
        p.ControlBox = false; //ControlBoxを非表示にする
        p.FormBorderStyle = FormBorderStyle.Fixed3D; //フォームサイズ変更を禁止
        Application.Run(p); //インスタンスを画面に出す
    }
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です