:線の描画(続き)、矩形や円の描画、文字の描画、画面遷移 など
提出フォロー:演習12 対角線を描く
・画面上に左上から右下へ赤色太さ10の線を描く ・画面上に右上から左下へ黄色太さ20の線を描く
作成例
//演習12 対角線を描く
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 red10 = new Pen(Color.Red, 10); //【追加】ペン(赤、10)を生成
Pen yel20 = new Pen(Color.Yellow, 20); //【追加】ペン(黄、20)を生成
protected override void OnPaint(PaintEventArgs e) { //Formのメソッドをオーバーライド
base.OnPaint(e); //まず、Formクラスにおけるメソッドの内容(基本再描画処理)を実行
e.Graphics.DrawImage(backb, 0, 0); //背景画像を(0,0)から描画
e.Graphics.DrawLine(red10, 0, 0, backb.Width - 1, backb.Height - 1); //【追加】左上から右下へ赤色10の線を描画
e.Graphics.DrawLine(yel20, backb.Width - 1, 0, 0, backb.Height - 1); //【追加】左上から右下へ黄色20の線を描画
int mx = backb.Width / 2, my = backb.Height / 2; //中央座標を得る
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); //インスタンスを画面に出す
}
}
テーマ15 Penクラスのプロパティ
・生成したPenオブジェクトは、Colorプロパティで色を変更できる ・また、Widthプロパティで太さを変更できる ・よって、生成済みのPenオブジェクトは使いまわし可能
演習13 対角線を描く・改
・Penオブジェクトを1つのみにしよう
作成例
//演習13 対角線を描く・改
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, 10); //【変更】ペンを生成(初期値は赤、10)
protected override void OnPaint(PaintEventArgs e) { //Formのメソッドをオーバーライド
base.OnPaint(e); //まず、Formクラスにおけるメソッドの内容(基本再描画処理)を実行
e.Graphics.DrawImage(backb, 0, 0); //背景画像を(0,0)から描画
e.Graphics.DrawLine(mypen, 0, 0, backb.Width - 1, backb.Height - 1); //【変更】左上から右下へ赤色10の線を描画
mypen.Color = Color.Yellow; //【追加】ペン色を黄色に
mypen.Width = 20; //【追加】ペン幅を20に
e.Graphics.DrawLine(mypen, backb.Width - 1, 0, 0, backb.Height - 1); //【変更】左上から右下へ黄色20の線を描画
int mx = backb.Width / 2, my = backb.Height / 2; //中央座標を得る
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); //インスタンスを画面に出す
}
}
提出:演習13 対角線を描く・改