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)を使った、『さくらインターネット』用メール送信テンプレート