C# でDXライブラリを使って簡単なシューティングをクラス化して標準化 / メインループとプレイヤー (1) では、メインループと初期化部分を Game クラスとしてクラス化しました。(Game クラスの start メソッド内で、キーアクションの処理部分と描画部分を分けて、start の引数の無名ブロックを呼び出すようにしました。) 今回は、それに引き続いてプレイヤーを左右矢印キーで左右に動くようにしている部分をクラス化し、Player クラスを作成します。 プレイヤーの初期処理は、使用する画像の決定と一回のキー押下でどのくらい移動するかの距離を設定する事にしました。また、初期位置を画面下部中央に設置する為に、スクリーンサイズが必要になるので、Game クラスのインスタンスも同時に引き渡しています。 Player クラス
ここでは情報をプロパティとして定義しています。 1) image : 画像ハンドル 2) graph_w : 画像幅 3) graph_h : 画像高さ 4) x : 描画座標 5) y : 描画座標 6) move_offset : キー押下による移動距離 7) game : Game クラスのインスタンス
class Player {
// *******************
// コンストラクタ
// *******************
public Player(Game game, string name, int offset) {
this.game = game;
// 画像の読み込み
image = DX.LoadGraph(name);
// 画像のサイズを取得
int w, h;
DX.GetGraphSize(image, out w, out h);
graph_w = w;
graph_h = h;
// プレーヤーの初期位置
x = game.screen_w / 2 - h / 2;
y = game.screen_h - 70;
// キー押下による移動距離
move_offset = offset;
}
public int image { get; set; }
public int graph_w { get; set; }
public int graph_h { get; set; }
public int x { get; set; }
public int y { get; set; }
public int move_offset { get; set; }
public Game game { get; set; }
}
次に、この Player クラスを使用して、Program クラスの記述を変更すると以下のようになります。 ただ、この時点ではまだ Player の処理が Program クラス での記述に依存してしまっているので、キーの処理と描画の処理を Player クラスのメソッドとして変更する必要があります
// メインゲームインスタンス作成
Game game = new Game(800, 600);
// 初期化
game.init();
// プレイヤーインスタンス作成
Player player = new Player(game, "player.png", 5);
game.start(
// *******************
// 主処理
// *******************
(int counter) => {
// 右矢印キー
if (DX.CheckHitKey(DX.KEY_INPUT_RIGHT) == 1) {
player.x += player.move_offset;
if (player.x + player.graph_w > game.screen_w) {
player.x = game.screen_w - player.graph_w;
}
}
// 左矢印キー
if (DX.CheckHitKey(DX.KEY_INPUT_LEFT) == 1) {
player.x -= player.move_offset;
if (player.x < 0) {
player.x = 0;
}
}
},
// *******************
// 描画処理
// *******************
() => {
DX.DrawGraph(player.x, player.y, player.image, DX.TRUE);
}
);
関連する記事 C# でDXライブラリを使って簡単なシューティングをクラス化して標準化 / メインループとプレイヤー (3)
|
|
【VS(C#)の最新記事】
- Replit : cs-list
- C# : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する
- C#( Form ) : ウインドウ枠の無い吹き出しの作成
- C# のタプル( Visual Studio 2017 でテスト )
- C# : インターネット上の JSON ファイルのフォーマットを クラスとして定義して1行でオブジェクト化して使用する
- C# の文法的文字列処理
- C# : System.Data.Odbc によるデータベースのテーブルからのデータ取得処理( サンプルの SQL は MySQL 用です )
- C# : Excel を データベースとして DataGridView に読み込む
- C# : dynamic 型 による Excel へのアクセス
- C# : フォームを表示せずに、通知領域にアイコンを表示させる常駐プログラム
- Microsoft Access に対してSQLを入力してその結果を DataGridView に表示する最も簡単なコード
- C# : System.Data.Odbc データ取得(SELECT)処理( MySQL ) : ※ using 無し( Dispose 実行 )
- C# : SQL 文を外部テキストにして、String.Format でデータ部分を置き換えて利用する
- C# コンソールアプリを AN HTTPD で実行
- C# : SQLServer( SQLExpress ) の SMO を使用してテーブルの CREATE TABLE 文 を取得する
- C# : DataGridView に TKMP.DLL の IMAP(POP3) で受信したメールを非同期に表示する( 添付ファイルも取得 )
- C# : TKMP.DLLを使った、メール送信テンプレート
- C# と VB.net : TKMP.DLL を使って IMAP でメール本文の一覧を取得する( コンソール )
- C# でDataTable と DataSource を使用して、DataGridView にデータを表示するテンプレート( 行をダブルクリックしてダイアログを表示して行データを処理 )
- (C#) / VS2010 または VS2012 : TKMP.DLL(3.1.2 または 3.1.8)を使った、『さくらインターネット』用メール送信テンプレート






