ゲーム開発演習 講義メモ

:文字の描画、画面遷移、画面再描画 など

テーマ21 文字の描画(再掲載+α)

・フォームアプリケーションではフォントや書式を指定して文字列を画面上に描画できる
・この時、フォント、ブラシ、位置を指定できる
・フォントは、System.Drawing.Fontクラスのコンストラクタで生成できる
・このコンストラクタは多数のオーバーロードがあるが、フォント名とポイント数(大きさ)を指定する Font(string, float)が便利
・例: Font f = new Font("メイリオ", 15);
・太字などの書式を指定するにはFont(string, float, FontStyle)を用いると良い
・FontStyleはSystem.Drawing.FontStyle列挙型で、列挙子のBoldで太字にできる
・例: Font f = new Font("メイリオ", 15, FontStyle.Bold);
・文字の描画はGraphics.DrawStringメソッドで行う
・書式例: e.Graphics.DrawString(文字列, フォント, ブラシ, 左上X座標, 左上Y座標)

演習19 スコアの表示

・画面右上(400,10)から文字列「SCORE:000,000」を表示しよう
・フォントはメイリオ、色は黄色、サイズは20、スタイルはBoldとする

作成例

//演習19 スコアの表示
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)
    Brush bred = new SolidBrush(Color.FromArgb(63, 255, 0, 0)); //ブラシを生成(赤の透明色)
    Brush byel = new SolidBrush(Color.Yellow); //【追加】ブラシを生成(黄色)
    Font f20 = new Font("メイリオ", 20, FontStyle.Bold); //【追加】フォントを生成(メイリオ20P太字)
    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.FillRectangle(bred, 78, 411, 485, 64); //判定エリアを透明赤で塗りつぶす
        e.Graphics.DrawRectangle(mypen, 78, 411, 485, 64); //判定エリアの描画
        e.Graphics.DrawString("SCORE:000,000", f20, byel, 400, 10); //【追加】スコアの描画
    }
    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); //インスタンスを画面に出す
    }
}

テーマ22 画面遷移

・フォームアプリケーションでは、画面ごとに表示内容を与え、切り替えながら進めることが多い
・これを画面遷移といい、例えば「スタート画面⇔プレイ画面⇒ゲームオーバー画面⇒スタート画面」と示す
・プログラムにおいては、画面をゲームモードとして表し、これを示す変数を定義して用いると良い
・例: int gamemode = 0; //0:スタート画面、1:プレイ画面、9:ゲームオーバー画面
・OnPaintメソッド等において、ゲームモードごとに異なる処理を記述し、OnKeyDownメソッドなどにおいて、ゲームモードを変更すれば良い

テーマ23 画面再描画

・プログラム側で動的に画面を書き換えた場合、画面への反映をWindow.Forms.Controlクラスの Invalidate()メソッドを呼ぶことで
 依頼する必要がある

演習20 タイトル画面の追加

・クラス変数gamemodeを0で初期化しておく(0:スタート画面、1:プレイ画面)
・gamemodeが0であれば、背景画像、タイトル「GAME1」、メッセージ「Hit Enter to Start」を表示
・gamemodeが1であれば、背景画像、判定エリア、スコアを表示
・タイトル「GAME1」はメイリオ、80ポイント、太字、黄色、(100,100)から
・メッセージ「Hit Enter to Start」はメイリオ、25ポイント、太字、黄色、(200,300)から

提出:演習20 タイトル画面の追加

コメントを残す

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