Month: July 2025

前回のコメント

・「const int …」は長すぎる配列を簡略化するのに欠かせないのでしょうか。  そうではありません。  配列の要素数を用いる処理が複数ある場合、そのすべてにおいて要素数を記述すると、  将来、要素数が変わった場合に、すべてを正しく書き換える必要があります。  数値の変更は文法エラーになりづらく、ミスの発見が困難ですので、これを改善するものです。  const int 定数 = 要素数; としておいて、要素数を用いるすべての処理で、この定数を使います。  すると、要素数が変わっても、書き換える場所を極小化できるわけです。 ・ゲームは多くのクラスから生成されたオブジェクトの集合体の様な物なのでしょうか。  ゲームに限らず、C#で書かれたプログラムは全て、オブジェクトの集合体になります。  今まで作成してきたプログラムも、実は、複数のオブジェクトの集合体になっていました。  今後は、このことを意識しながら学習していきます。

講義メモ 第7章 クラスの基礎

p.153 クラスとは何か ・クラスは「データと処理の設計図」であり、C#ではプログラムそのものもクラスとして記述する ・よって、ここまで作成したプログラムのすべてが「class クラス名{処理内容}」という形式になっている ・クラスは呼び出されて設計図として用いられ、動作用の実体がメモリ上に生成される ・この動作用の実体をオブジェクト(インスタンス)という ・よって、ここまで作成したプログラムも、実行指示によって動作用のオブジェクトが生成されて動作した ・プログラマは、実行用のクラスに加えて、それが利用するクラスを定義して用いることができる ・その場合、実行用のクラスの中で、利用するクラスのオブジェクトを生成して用いる p.154 簡単なクラスを定義しよう ・クラスにはデータや実行用のメソッドなどを含むことができる ・ここまで作成したプログラムにおいては、1クラスの中にmainという1つのメソッドが含まれている ・クラスに含まれるデータや実行用のメソッドなどをメンバという ・今まで定義してきた変数はすべてmainメソッドの中だったが、mainメソッドの外に定義することで、変数をクラスのメンバ(データメンバ)に  することができる ・これをクラス変数といい、メソッドとは独立して扱うことができる ・定義書式: アクセス修飾子 データ型 変数名; ・アクセス修飾子はメンバをクラスの外部から利用可能にするかどうか等を指定するもので、publicにすると、外部から利用可能 ・mainメソッドがpublic指定なのは、C#システムから呼び出し可能にするため ・外部から利用可能にする必要がなければ、privateとすることで、クラス内でのみ利用可能にでき、安全性が高くなる ・クラスの定義書式: class クラス名 { メンバの定義; … } ・クラスのメンバはクラス変数のみでも良いので、複数の型が異なる変数をまとめて扱う場合にも有効  ※ C言語における構造体をより強力に実装できる ・クラス変数のみのクラスの例  class Monster { //モンスタークラス(名前とHPとMPをデータメンバとして持つ)   public string name;   public int hp;   public int mp;  } p.155(クラスからのオブジェクトの生成) ・プログラム内で定義したクラスを用いるには、基本的にオブジェクトを生成する必要がある ・クラスからのオブジェクトの生成にはnew演算子を用いる ・生成したオブジェクトはクラスを型とする変数で扱い、new演算子の戻り値を代入することで利用可能になる ・この戻り値はオブジェクトへの参照(p.40)なので、クラスを型とする変数は参照型になる ・宣言書式: クラス名 参照変数; ・生成書式: 参照変数 = new クラス名(); //カッコ内の利用方法は後述 ・この宣言と生成は同時に行うことができる ・宣言と生成の書式: クラス名 参照変数 = new クラス名(); ・例: Monster Rimuru = new Monster(); //MonsterクラスのオブジェクトRimuruの生成 提出:p.152 練習問題 ex0601.cs

講義メモ 後半

p.147 暗黙の型指定がなされた配列 ・配列を初期化によって生成する場合、型を省略してvar型にできる ・書式: var 配列名 = new [] {値, …}; ・こうすると、配列の型は指定されたすべての値を格納できる型に決まる ・例: var s = new []{“ABC”, “DE”}; //string型になる ・例: var d = new []{1, 1.2f, 3.14}; //double型になる ・指定されたすべての値を格納できる型がない場合や、null指定の場合はエラーになる ・例: var e = new []{“1″, 1.2f}; //エラー p.147(int型を返すmainメソッド) ・mainメソッドは通常戻り値型はvoidだが、終了状態を示す整数値を返す「int main(){…}」とすることもできる ・こうした場合、正常終了であれば「return 0;」を、でなければ「return 負の数;」を記述できる ※ p.147 var03.csの場合「return 0;」しかしていないので、int型を返すmainメソッドにする必要性はない p.147(配列とGetType) ・配列名.GetTypeは、文字列「.NET型名[]」を返す。例:”System.Int32[]” ・2次元配列名.GetTypeは、文字列「.NET型名[,]」を返す。例:”System.String[,]” ・2次元ジャグ配列名.GetTypeは、文字列「.NET型名[][]」を返す。例:”System.Double[][]” アレンジ演習: p.147 var03.cs ・2次元配列もvar型にできることを確認しよう。また、GetTypeでの表示を確認しよう。 ・ジャグ配列もvar型にできることを確認しよう。また、GetTypeでの表示を確認しよう。 作成例 //アレンジ演習:p.147 var03.cs using System; class var03 {     public static void Main()     {         var name = new []{"太郎", "次郎", "三郎", "四郎"};         for (var i = 0; i < name.Length; i++) {             Console.WriteLine(name[i]);         }         Console.WriteLine("nameの型は{0}", name.GetType()); //System.String[]         var f = new[] { 0.5, 0.9, 1.5, 2.3 };         for (var i = 0; i <…

Read the full article

講義メモ

・アレンジ演習:p.140 array03.cs」の続きから p.140 array03.cs 補足【再掲載+α】 ・023行目などで用いている「Char.IsNumber(文字列s, 位置n)」は、文字列sの先頭を0文字目とした時のn文字目が、  数字かどうかを返すメソッド ・よって、位置nが0であれば、文字列の先頭文字が数字であればtrue、でなければfalseを返す ・これで事前にチェックすることで、int.Parseメソッドなどで数値化できる文字列かどうかがわかるので、  異常終了を防ぐことができる ・このプログラムでは、事前に1桁であることもチェックしているので、先頭文字のチェックだけで、  int.Parseメソッドで数値化できるかを判断できる アレンジ演習:p.140 array03.cs【再掲載+α】 ・if文の中で「Char.IsNumber(strClass, 0) != true」などとしているが、!Char.IsNumber(strClass, 0)」と  シンプルにできることを確認しよう ・単項!演算子については、p.89参照 作成例 //アレンジ演習:p.140 array03.cs using System; class array03 {     public static void Main()     {         string[,] Name = new string[2, 5] {             {"田中六郎", "吉田一郎", "太田太郎", "粂井康孝", "岡田三郎"},             {"横田芳子", "池田和子", "目黒貴和子", "武田信子", "園田淳子"}         };         int MyClass, No;         string strClass, strNo;         while (true) {             Console.Write("クラスは—");             strClass = Console.ReadLine();             if (strClass.Length >= 2) {                 Console.WriteLine("入力は1桁のみです");                 continue;             }             if (!Char.IsNumber(strClass, 0)) { //【変更】                 Console.WriteLine("数字を入力してください");                 continue;             }             MyClass = Int32.Parse(strClass);             if (MyClass <= 0 || MyClass >= 3) {                 Console.WriteLine("クラスは1組か2組です");                 continue;             }             break;         }         while (true) {             Console.Write("出席番号は—");             strNo = Console.ReadLine();             if (strNo.Length >= 2)…

Read the full article

今週の話題

ゲームソフト販売本数ランキング:今週1位も「マリオカート ワールド(Switch2)」 GO! ゲーム領域で停滞も…高収益体質を築いたSHIFTの戦略的人材強化【ゲーム企業の決算を読む】GO! AI時代のゲームインフラとセキュリティ―ゲーム開発者が知るべき最新テクノロジーをアカマイが解説【CEDEC 2025】GO! モノリスソフト東京オフィスが人材を積極募集中―「ゼノブレイド」シリーズ総監督の「新作RPG」に向けた動き? GO! トランプ政権で“デジタル遺産の危機”に直面…保管プロジェクトや教育ゲームも支援打ち切りで資金難に GO! スイッチ海賊版サイト「Nsw2u」をFBIが摘発。現在はアクセス不可に GO! 中古スイッチソフト使用でスイッチ2が遠隔BAN!?迅速対応で一安心も復旧にゲームのパッケージ写真等の証明必要に GO! PC全年齢向け人気タイトルがSteamではコンソール版相当の内容に、なぜ?―お詫び文掲載の事態に…国内メーカー悩ます、ユーザーとプラットフォームの板挟み GO!

前回のコメント

・2次元配列は囲碁のゲームや倉庫番のゲームを作る時に使えるのでしょうか。  はい、使えます。  ゲームの情報を通常の(1次元)配列で扱うこともできますが、  2次元配列にすることで、画面上のイメージをそのままのデータ構造として表せます。 ・完成されたソースコードを読むときは理解できるのですが、1から作る際に何から手を付ければよいか迷う時があります。そういった場合は何から考えればよいでしょうか。  まず「類似のサンプルを探す」ことから始めると良いでしょう。  作成済のプログラムの冒頭に、自分の言葉で分類用のコメントを入れておくと便利です。

講義メモ 第6章 配列

p.133 配列とは ・同じ型で同じ意味の変数を「●の■番目」としてまとめて扱える仕掛け。 ・この●を配列(名)、■を添字またはインデクスという ・配列を構成するデータを要素、その数を要素数という ・配列の利用には宣言が必要で、それから、要素の数だけの領域を確保する生成を行う ・宣言の書式: 型[] 配列名; //例: string[] names; 文字列配列namesの宣言 ・生成の書式: 配列名 = new 型[要素数]; //例: names = new string[100]; namesとして文字列100個分 ・宣言と生成は1文で行える 例:string[] names = new string[100]; p.135 配列とは(配列の要素の利用) ・配列名に続けて[添字]をつけることで、配列の要素にアクセスできる。 ・添字は0からなので、要素数-1までになることに注意。 ・配列名[要素数]は存在せず、アクセスすると異常終了してしまう。 ・要素は変数と全く同様に利用できる。  例: string[] names = new string[3]; names[0] = “Amuro”; names[1] = “Kai”; names[2] = “Ryu”; p.135 配列とは(配列の初期化) ・変数と同様に配列の生成時に初期値を与える(初期化する)ことが可能 ・この時、初期値の数を要素数できるので、要素数を省略して良い ・書式: 型[] 配列名 = {値,…};  例: string[] ms = {“ザク”,”グフ”,”ドム”}; //3要素になる ・生成の書式の後ろに{値,…}を指定して初期化できるが、要素数と値の数が合ってないとエラー。 p.135 配列とは(配列のプロパティ) ・C#の配列はクラス(第7章)と同様の「データと処理をもつオブジェクト」として実装されている ・よって、クラスの持つ機能の一種であるプロパティが利用できる ・配列のプロパティの1つがLengthで、これを用いると要素数がわかる ・利用書式: 配列名.Length ・これを用いると、配列の要素数が変わっても処理の記述が変わらない=変化に強いプログラムになる ・例: for (int i = 0; i < 配列.Length; i++) { 配列の全要素についての処理 } アレンジ演習:p.136 average02.cs ・配列pointの要素を1つ増やして「60」を入れよう ・配列pointの初期化式に要素値を書き加えるのみで良いことを確認しよう 作成例 //アレンジ演習:p.136 average02.cs using System; class average02 {     public static void Main()     {         int[] point = {70, 80,…

Read the full article

講義メモ

・p.130 continue01.csの補足から再開し、p.132「練習問題」に進みます アレンジ演習:p.130 continue01.cs ・100までの固定になっているが、コンソールから、いくつまでか入力できるようにしよう 作成例 //アレンジ演習:p.130 continue01.cs — 0から100未満の2の倍数の合計を求める using System; class continue01 {     public static void Main()     {         int sum = 0;         Console.Write("i : "); int limit = int.Parse(Console.ReadLine()); //【追加】         for (int i = 0; i < limit; i++) { //【変更】             if (i % 2 == 0) { //iを2で割って余りが0かどうか(偶数かどうか)                 sum += i;             }             else { //iが奇数の場合                 continue;             }             //iが奇数の場合はcontinueされるので次の行は実行されない             Console.WriteLine("i = {0, 2}, sum = {1, 4}", i, sum);         }         Console.WriteLine("合計は {0}です", sum);     } } p.130 continue01.csの補足:continueの主な用途 ・単純に繰返し内容の一部をスキップするだけであれば、if文を用いる方が理解しやすいことが多い ・しかし、繰返し内容や、スキップの条件が複雑な場合、continueを用いる事で可読性や保守性(改良しやすさ)を向上できることがある ・例:以下を繰返す場合  ① 3の倍数であれば   ・「3の倍数」と表示   ・しかも、偶数であれば、これ以降をスキップする  ② 何回目かを表示する ・この例は、contunueを用いる事で②を複数回記述したり、表現を大きく変えることを避けられる ミニ演習 mini130a.cs ・上の例を、1から10までの繰返しにおいて実装して動作を確認しよう 作成例 //ミニ演習 mini130a.cs:continueの活用例 using System; class mini130a {     public static void Main()     {         for (int i = 1;…

Read the full article