Month: April 2025

次回予告と今回の講義メモ

オブジェクト指向演習:次回予告:3人の魔導士の続き(オブジェクト配列、乱数の改良) ゲーム開発演習:次回予告:メッセージボックス、システム側からの必要に応じた再描画の確認、背景画像の描画 講義メモ:memo20250426.txt

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

ゲーム開発演習(2):フォームサイズの固定化とコントールボックスの非表示、背景画像の表示 など 演習4 フォームの初期位置の指定:再掲載 ・フォームの初期位置を(300, 0)にしよう 作成例 //演習4 フォームの初期位置の指定 using System; //C#標準クラス用 using System.Windows.Forms; //C#が提供するApplication、Formクラス用 using System.Drawing; //Sizeクラス用 class Program {     static void Main() { //実行用メソッド(publicはなくてOK)         Form f = new Form(); //Formクラスのインスタンスを生成         f.Text = "Game"; //Form名を設定         Size s = new Size(640, 480); //幅と高さの大きさのSizeインスタンスを生成         f.Size = s; //インスタンスプロパティで大きさを設定         f.StartPosition = FormStartPosition.Manual; //「手動設定」を設定         Point p = new Point(300,0); //X座標とY座標のPointインスタンスを生成         f.Location = p; //インスタンスプロパティで初期位置を設定         Application.Run(f); //生成済のインスタンスを実行     } } テーマ5 フォームサイズの固定化とコントロールボックスの非表示 ・特に指定のないフォームはフォームサイズの変更や最大化が可能 ・これは固定サイズで開発したいゲームプログラムの場合、弊害を起こすので、フォームサイズを固定化すると良い ・フォームサイズの固定化には、FormのインスタンスプロパティFormBorderStyleに、  FormBorderStyle列挙体のFixedSingle列挙子などを代入すると良い  → https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.formborderstyle ・フォームの最大化を防止するには、コントロールボックスを非表示にすると良い ・コントロールボックスを非表示にするには、FormのインスタンスプロパティControlBoxにfalseを代入すればOK ・ただし、フォームの閉じる「×」も非表示になるので、プログラム内にフォームのクローズ処理を記述していない場合は、  タスクバーで右クリックし「ウィンドウを閉じる」を用いること ・そして、フォームサイズを固定化により、フォームの枠の大きさが変わるので、フォームの大きさの指定方法を変更する必要がある ・FixedSingle等を指定した後に、FormのインスタンスプロパティSizeではなく、CliantSizeに幅と高さの大きさの  Sizeインスタンスを代入すると良い 演習5 フォームサイズの固定化とコントールボックスの非表示 ・フォームのボーダーをFixedSingleにしよう ・コントロールボックスを非表示にしよう ・フォームのSizeではなくClientSizeを640×480にしよう 作成例 //演習5 フォームサイズの固定化とコントールボックスの非表示 using System; //C#標準クラス用 using System.Windows.Forms; //C#が提供するApplication、Formクラス用 using System.Drawing; //Sizeクラス用 class Program {     static void Main() { //実行用メソッド(publicはなくてOK)         Form f = new Form();…

Read the full article

講義メモ

オブジェクト指向演習:プロパティの導入とゲーム性の向上&重複の防止 ゲーム開発演習:フォームサイズの固定化とコントールボックスの非表示、背景画像の表示 など オブジェクト指向演習(2) 【ha243 解説編より】プロパティ:再掲載 ・プロパティは特殊なメソッドで、データメンバを安全に扱う仕組みを提供する ・データメンバをpublicにしておくと、外部から想定外の値を代入されたり、想定外の用途に使われてしまう可能性がある  例:身長に負の数。計算で決まるはずのプレイヤーの経験値を直接操作。 ・そこで、重要なデータメンバはprivate(または無指定でprivate扱い)にする ・データメンバの値を得ることをget、値を書き換えることをsetといい、合わせてアクセッサという ・プロパティはgetとsetのどちらかまたは両方を記述して、publicではないデータメンバを扱う仕組みを外部に提供する ・最も基本的な定義例:  private 型 データメンバ名;  public 型 プロパティ名 {   set { データメンバ名 = value; }   get { return データメンバ名; }  } ・このように定義すると、外部から「データメンバ名 = 値;」の代わりに「プロパティ名 = 値;」とすることで、  データメンバに代入できる。 ・この時、プロパティのsetが動作し、値はvalueに渡される。 ・また「Console.WriteLine(プロパティ名 )」などとすることでデータメンバの値を表示できる。 ・この時、プロパティのgetが動作し、データメンバの値がreturnされる。 ・この仕掛けを用いて、setを省略することで、変更不能のデータメンバにできる  private 型 データメンバ名;  public 型 プロパティ名 {   get { return データメンバ名; }  } ・また、この仕掛けを用いて、setに条件を記述できる  private 型 データメンバ名;  public 型 プロパティ名 {   set {    if (value >= 0) {     データメンバ名 = value;    }   }   get { return データメンバ名; }  } RPG演習3 ・MadoshiクラスのHPを返すメソッドをプロパティHPにしよう ・また、魔導士の情報を表示するメソッドにMPの表示を追加しよう 作成例 //オブジェクト指向演習 RPG演習3 using System; class Madoshi { //魔導士を表すクラス(部品)     int mp; //MP     int hp; //HP     Random rnd = new Random(); //乱数用のRandomクラスのインスタンスを生成     public Madoshi () {…

Read the full article

今週の話題

ゲームソフト販売本数ランキング:今週1位は「『OVER REQUIEMZ』(オーバーレクイエムズ:Switch)」GO! 任天堂、スイッチ2需要に追いつかず「深くお詫び」 抽選販売に220万人応募、落選者は二次抽選に自動応募 GO! 【Switch2】セブンネットショッピングで予約抽選が開始。応募条件はいまから1000円以上買う&メルマガ登録 GO! スイッチ2はPS4/XB1と比べメモリやパフォーマンス良好で助かった―『サイバーパンク2077』移植についてCDPRコメント GO! スイッチ2抽選結果のメールは“URLが記載されていない”ことに注意!結果報告がSNS上にてトレンドをにぎわすなかサポートより注意喚起 GO! 海外大手Modサイト、『オブリビオン』リマスターのキャラクタ性別選択肢復活Modを削除、アカウント停止措置まで。「タイプ1・2」を「男性・女性」に戻す投稿の「意図」問題視 GO!

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

ゲーム開発演習:フォームの表示と設定 解説:フォームプログラミング ・グラフィックス、サウンドと、マウスなどのポインティングディバイスを用いるプログラムをC#で開発するには、  フォームアプリケーションのプロジェクトを用いると良い ・Unityなどの専用ツールを用いる場合に比べて自由度が高くなる(ただし記述量や求められる知識は増える) ・よって、将来いろいろな開発ツールを利用できるようになるための、基礎力をつけることに向いている ・プロジェクトの作成方法 ①「新しいプロジェクトの作成」 ②「C#」「Windowsフォームアプリケーション(.NET Framework)」「次へ」 ③ 適当なプロジェクト名、場所(USBメモリ推奨)などを指定して「作成」 ④ フォームデザインが表示されるが、プログラム側で設定・制御するので、閉じてOK ⑤ 代わりに「Program.cs」を開くと、フォームアプリケーションのスケルトンが表示され、利用可能になる ⑥ このソースは冗長なので、下記のようにシンプルにできる using System; using System.Windows.Forms; class Program { static void Main() { Application.Run(new Form()); } } ⑦「デバッグなしで開始」で実行でき、コンソールではなくフォームが表示される ⑧ 確認したらフォームの右上の「×」で必ず閉じる(開けたまま再実行するとエラーになる) 演習0 フォームアプリケーションの実行確認:作成例 //演習0 フォームアプリケーションの実行確認 using System; //C#標準クラス用 using System.Windows.Forms; //C#が提供するApplication、Formクラス用 class Program { static void Main() { //実行用メソッド(publicはなくてOK) Application.Run(new Form()); //C#が提供するFormクラスのインスタンスを生成し実行 } } テーマ1 フォームサイズの指定 ・フォームの大きさは、FormクラスのインスタンスプロパティWidthに幅のドット数、Heightに高さのドット数を与えることで設定できる ・インスタンスプロパティを用いるには、あらかじめ、Formクラスのインスタンスを生成しておくと良い ・この時、指定したインスタンス名(参照変数)を用いて、インスタンスプロパティを利用できる ・そして、指定したインスタンス名をApplication.Runに渡すようにしよう 例:  Form インスタンス名 = new Form();  インスタンス名.Width = 幅のドット数  インスタンス名.Height = 高さのドット数  Application.Run(インスタンス名); 演習1 フォームサイズの指定 ・フォームの幅を640、高さを480にしよう 作成例 //演習1 フォームサイズの指定 using System; //C#標準クラス用 using System.Windows.Forms; //C#が提供するApplication、Formクラス用 class Program {     static void Main() { //実行用メソッド(publicはなくてOK)         Form f = new Form(); //Formクラスのインスタンスを生成         f.Width = 640; //インスタンスプロパティで幅を設定         f.Height =…

Read the full article

講義メモ

・オブジェクト指向演習① ・ゲーム開発演習:フォームの表示と設定 オブジェクト指向演習① ・コンソールアプリケーションによるRPGを題材にして、テキスト10章までのノウハウとテクニックを理解しましょう 予備知識:乱数の利用 ・ゲームやシミュレーションなどで多用される「毎回異なる値が得られる仕掛け」を乱数(Random)という ・乱数はシステムが用意している系列によって提供されるので、系列を決める基礎値であるシード(種)が等しいと  同じ系列になり、弊害が起こるので注意 ・C#では、内部的に現在の時刻情報を数値化してシードにすることで、毎回、予測できない乱数になる ・乱数を用いるには、C#が標準で提供する System.Randomクラスのデフォルトコンストラクタでインスタンスを生成し、  インスタンスメソッド Next(int n)を用いると、0以上n未満の整数が得られる。 例:  using System;  :  System.Random r = new System.Random();  Console.WriteLine(r.Next(3)); //0,1,2のどれかが表示される 予備知識:乱数の利用 サンプル codefile1.cs //予備知識:乱数の利用 サンプル using System; class codefile1 { public static void Main() { Random r = new Random(); Console.WriteLine(r.Next(3)); //0,1,2のどれかが表示される } } RPG演習1 仕様 ・魔道士とプレイヤーが戦うゲーム ・詳細はスケルトンのコメントを読み解いて理解してください ・ソースファイル名は「rpg.cs」とします 実行例 魔道士(HP=10)が現れた。 攻撃しますか?(1:はい 0:やめる):1 あなたの攻撃! 魔道士(HP=10)に5のダメージを与えた! 魔道士(HP=5)は消費MP4の魔法を唱えた! あなたは16のダメージを受けた! 攻撃しますか?(1:はい 0:やめる):1 あなたの攻撃! 魔道士(HP=5)に7のダメージを与えた! 魔道士を倒した! プログラム ver.0(穴埋めになっています) //オブジェクト指向演習 RPG演習1 using System; class Madoshi { int mp; //MP int hp; //HP Random rnd = new Random(); //乱数用のRandomクラスのインスタンスを生成 public ● () { //コンストラクタ mp = rnd.Next(10); //0~9の間のランダムな整数を得てMPの初期値とする hp = 10 + rnd.Next(10); //10~19の間のランダムな整数を得てHPの初期値とする } public int GetHP() { return hp;…

Read the full article