前回のコメント

・今回の内容(値型、データ型、整数型、浮動小数点数型)についてですが、自力での理解が少し難しかったのでいつか機会があればもう一度解説していただきたいです。

 了解です。次回フォローしますね。
 また、データ型は基本中の基本の仕組みなので、今後も解説を厚めにしますので、
 理解を深めてください。

・Unityだったら今回の講座みたいに、ソースコードを持ってくるみたいにアセットストアでサンプルを改造して遊ぶことができるんですけど、今DXLibでゲームプログラムをやってて、ソースをどこから調達すればいいかわからないんですけど、ギットハブ(?)ってやつにあるんですかね?

 公式が提供している「DXライブラリ サンプルプログラム(GO!)」は
 試してみましたか?
 個人でソースを公開している作品(GO!)がありますので、こちらもチェックしてみると良いでしょう。
 ※野良ソースや信頼できないプログラムはご注意を。

今週の話題

ゲームソフト販売本数ランキング:今週1位は「ドラゴンクエストI&II(Switch)」 GO!
Switch2、発売から約4ヵ月間で累計販売台数が1000万台突破。予想販売数量は本体が400万台増の1900万台、ソフトは300万本増の4800万本に変更 GO!
クリエイター向けツール『Affinity』が完全無料化。『Designer』『Photo』『Publisher』3つのソフトが統合され1本へ。今後のアプデもずっと無料 GO!
DeNAが旧村上ファンドの標的に、任天堂株の売却が本丸か?【ゲーム企業の決算を読む】GO!
『メタルギア』『サイレントヒル』新作初動100万本突破、コナミ上期2割増収【ゲーム企業の決算を読む】 GO!
任天堂タイトル無事復活!「RTA in Japan 2025冬」出走スケジュールに危ぶまれた“任天堂ゾーン”帰還の兆し GO!
「東京ゲームダンジョン(GO!)」が目指すところは“ゲーム開発がカルチャーになること”!実は韓国にも波及も?第10回迎える「ゲムダン」について代表・岩崎氏に訊いた GO!

『GTA6』開発中のRockstar、多数の従業員を解雇。英国労働組合と親会社の見解とは GO!
米任天堂と海賊版ストリーマーとの著作権侵害訴訟で270万円の損害賠償判決―煽って逃げておばあちゃんまで巻き込み全面敗訴 GO!

前回のコメント

・段々自分でも理解できるようになったと思います。

 何よりです。

・今回、冒頭で紹介していただいたGTMF2025に興味が出たのですが、他に学生が参加できる似たようなイベントはありますでしょうか

 大小さまざまありますので、情報を入手する都度紹介しますね。
 なお、ゲーム系だけではなく、ゲームを支えるインフラ(ネットワーク、データベース、AI、セキュリティなど)を扱う展示会も、是非、活用して下さい。
 ほとんどの展示会が学生OKですが、職業を「フリーランス」とすれば学生NGに見える展示会も大丈夫なことがあります。
 チャンスは逃さずに。

・C/C++とかのネイティブ言語も並行して学ぼうと思うんですけど、おすすめのテキストってありますか?

 並行して自学するのでしたら、説明が丁寧な入門書が良いでしょう。
 ヒューマンアカデミーの講義に用いた入門書やその最新版としては:
 ・「新・明解C++ 入門編」https://www.bohyoh.com/Books/MeikaiCPP01/
 ・「新・明解C言語入門編 第2版」https://www.bohyoh.com/Books/NewMeikaiC2nd/
 ・「やさしいC 第5版」https://amzn.to/49EFLCn
 ・「スッキリわかるC言語入門 第3版」https://amzn.to/47zqguk
 などがあります。
 また、C#の学習が進んでからでしたら、Web上の入門者サイトを用いることもできます。
 ・「ゼロから学ぶ C++」 https://rinatz.github.io/cpp-book/
 などがあります。但し説明が最低限しかないので、全くの初心者には向きません。

今週の話題

ゲームソフト販売本数ランキング:今週1位も「Pokemon LEGENDS Z-A(Switch)」 GO!
『ポケモンレジェンズZ-A』初週販売本数が全世界580万本を突破!その約半数がスイッチ2で遊んでいると報告も GO!
開発現場に寄り添うアップデート:Unreal Engine 5.7の注目ポイントをGTMF2025でもチェック GO!
「Autodesk AI」で変わる制作ワークフロー、Flow StudioとMayaの新機能をGTMF2025で紹介 GO!
GameWithが黒字転換を果たすもののPV数は低調、AI時代を見据えた事業展開が必要に【ゲーム企業の決算を読む】GO!

Switch 2版『エルデンリング』延期、2026年へ―「パフォーマンス調整にさらなる時間が必要」GO!
『バトルフィールド 6』クレジットに名前がない…ゲームの基盤を構築したRidgeline Games開発者のクレジット欠落に失望 GO!
にじさんじ・甲斐田晴に「悪質な誹謗中傷」を行った人物がANYCOLORと和解へ…本人への“聞き取り調査”も公開され「暴走した承認欲求とストレス」が原因と謝罪 GO!

前回のコメント

・完了しました。

 何よりです。

・今回学んだことは、ゲーム開発に当てはめると具体的にどのような場面で役立つかを教えていただきたいです。

 まだ「基礎中の基礎」ですので、建物で言えば地ならしの段階です。
 ですから「最終的にどの場面においても役立つ」ことで、具体的に「どこ」とは言えません。
 例えば、前回から学んでいる「データを表示に最適な文字列に変換する技術」は、
 ハイスコアの表示などの、多くの場面において求められるテクニックの一つです。

・後半で少しペースが早く感じました。

 了解です。リアクション感謝します。

・C#以外にも覚えたほうがいい言語って何かありますか?

 ゲームプログラミングを極めたいということでしたら、
 C/C++(ネイティブやUnreal Engineなどで利用)、JavaScript/HTML5(ブラウザゲームに必須)、
 Python(AIなどの活用時)、Java(ゲームサーバの構築など) 等も学習すると、武器になります、
 C#の基礎を学び終えたら、是非、挑戦してみてくだい。

講義メモ 後半

p.27 WriteLineメソッドとWriteメソッド

・WriteLineメソッドは()内の式を処理して結果をコンソールに出力(表示)するとともに、末尾に改行コードを付加する
・改行が不要であれば、代わりにWriteメソッドを用いると良い
・改行のみを行うには()内を空にして「Console.WriteLine();」とすればよい

p.27 test03.cs

//p.27 test03.cs
using System; //System名前空間の利用を宣言
class Test03 //クラスの定義
{ //クラス定義の開始
    public static void Main() //開始時に動作するメソッドMain
    { //メソッド定義の開始
        Console.Write("あ"); //文字列を表示(改行しない)
        Console.Write("い"); //文字列を表示(改行しない)
        Console.Write("う"); //文字列を表示(改行しない)
        Console.Write("え"); //文字列を表示(改行しない)
        Console.Write("お"); //文字列を表示(改行しない)
        Console.WriteLine(); //改行のみ
    } //メソッド定義の終了
} //クラス定義の終了

アレンジ演習 p.27 text03.cs

・「あいうえお(改行)」を「あい(改行)うえお(改行)」にしよう

作成例①

//アレンジ演習p.27 test03.cs
using System; //System名前空間の利用を宣言
class Test03 //クラスの定義
{ //クラス定義の開始
    public static void Main() //開始時に動作するメソッドMain
    { //メソッド定義の開始
        Console.Write("あ"); //文字列を表示(改行しない)
        Console.Write("い"); //文字列を表示(改行しない)
        Console.WriteLine(); //【追加】改行のみ
        Console.Write("う"); //文字列を表示(改行しない)
        Console.Write("え"); //文字列を表示(改行しない)
        Console.Write("お"); //文字列を表示(改行しない)
        Console.WriteLine(); //改行のみ
    } //メソッド定義の終了
} //クラス定義の終了

作成例②

//アレンジ演習p.27 test03.cs
using System; //System名前空間の利用を宣言
class Test03 //クラスの定義
{ //クラス定義の開始
    public static void Main() //開始時に動作するメソッドMain
    { //メソッド定義の開始
        Console.Write("あ"); //文字列を表示(改行しない)
        Console.WriteLine("い"); //【変更】文字列を表示(改行)
        Console.Write("う"); //文字列を表示(改行しない)
        Console.Write("え"); //文字列を表示(改行しない)
        Console.Write("お"); //文字列を表示(改行しない)
        Console.WriteLine(); //改行のみ
    } //メソッド定義の終了
} //クラス定義の終了

p.28 フォーマット指定子を使った変数の表示

・文字列と変数を連結する手法はミスしやすく、連結結果が分かりづらい
・そこで、文字列に埋め込み位置を指定して、後に変数を指定して、その値を順に埋め込んでもらうのがフォーマット指定子
・フォーマット指定子は文字列の中に「{0}」「{1}」「{2}」…と順に埋め込み位置を指定するもの(※必ず0からの連番)
 例: Console.WriteLine("{0}倍速い!", 3); //「3倍速い!」と表示
 例: int n = 3; Console.WriteLine("{0}倍速い!", n); //「3倍速い!」と表示
・フォーマット指定子を複数指定する場合、変数や式をカンマつなぎで記述する
 例: int a = 1, b = 2; Console.WriteLine("{0} + {1}", a, b); //「1 + 2」と表示
 例: int a = 1, b = 2; Console.WriteLine("{0} + {1} = {2}", a, b, a + b); //「1 + 2 = 3」と表示
・同じ番号のフォーマット指定子を複数記述でき、同じ値を再利用できる
 例: int n = 3; Console.WriteLine("{0}倍速いので{0}倍強い!", n); //「3倍速いので3倍強い!」と表示

p.28 text04.cs 解説

・「*」は積算演算子で、左右に数値があると、掛け算した結果を返す
 例: int x = 10, y; y = x * 3; //xに3を掛けた結果をyに代入 
・なお、算数と同様で、積算演算子「*」は加算、減算より優先される
 例: int x = 10, y; y = 10 + x * 3; //xに3を掛けた結果を10に加算してyに代入 ※掛け算優先

p.28 text04.cs

//p.28 text04.cs
using System; //System名前空間の利用を宣言
class Text04 //クラスの定義
{ //クラス定義の開始
    public static void Main() //開始時に動作するメソッドMain
    { //メソッド定義の開始
        int x = 10;
        Console.WriteLine("x = {0}", x); //「x = 10」を表示
        Console.WriteLine("x = {0}, xの10倍は{1}です", x, x * 10);
        Console.WriteLine("{0}は{1}ですが,{2}は{1}ではありません",
            "猫", "哺乳類", "トカゲ");
    } //メソッド定義の終了
} //クラス定義の終了

アレンジ演習 p.28 text04.cs

・int型の変数hpを追加し、30で初期化する
・文字列"HP"と、変数hpを用いて、「現在のHPは30で、HPを回復すると倍の60になる」と表示しよう

作成例

//アレンジ演習 p.28 text04.cs
using System; //System名前空間の利用を宣言
class Text04 //クラスの定義
{ //クラス定義の開始
    public static void Main() //開始時に動作するメソッドMain
    { //メソッド定義の開始
        int x = 10;
        Console.WriteLine("x = {0}", x); //「x = 10」を表示
        Console.WriteLine("x = {0}, xの10倍は{1}です", x, x * 10);
        Console.WriteLine("{0}は{1}ですが,{2}は{1}ではありません",
            "猫", "哺乳類", "トカゲ");
        int hp = 30; //【以下追加】
        Console.WriteLine("現在の{0}は{1}で、{0}を回復すると倍の{2}になる", 
            "HP", hp, hp * 2);
    } //メソッド定義の終了
} //クラス定義の終了

p.29 桁数の指定

・フォーマット指定子に最小表示桁数を指定できる
・書式:{番号, 桁数}
・この桁数は「少なくともこの桁数で」という意味でスペースの確保になり、値の桁数がこれを超える場合、指定は無視される
 例: Console.WriteLine("{0, 5}", 89); //「   89」となる(8の前に3桁空く)
 例: Console.WriteLine("x = {0, 5}", 89); //「x =    89」となる
 例: Console.WriteLine("{0, 5}", 123456); //「123456」となる(5桁という指定は無視される)
・桁数の前に「-」をつけると、左揃えになって、値の右側に空白が付く
 例: Console.WriteLine("{0, -5}", 89); //「89   」となる(9の後に3桁空く)

p.30 text05.cs

//p.30 text05.cs
using System; //System名前空間の利用を宣言
class Text05 //クラスの定義
{ //クラス定義の開始
    public static void Main() //開始時に動作するメソッドMain
    { //メソッド定義の開始
        int x = 10, y = 123456789;
        Console.WriteLine("1234567890123456789012345678990"); //目盛りを表示
        Console.WriteLine("{0, 10}", "abc"); //"       abc"(前に空き7個)
        Console.WriteLine("{0, 5}", "def"); //"  def"(前に空き2個)
        Console.WriteLine("{0, 0}", "ghi"); //"ghi"(桁数指定は無視)
        Console.WriteLine("{0, 10}{1, 10}", "あ", "い"); //"         あ        い"
        Console.WriteLine("{0, -10}{1, -10}", "あ", "い"); //"あ        い         "
        Console.WriteLine("x = {0, 5}, y = {1, 3}", x, y); //"x =    10, y = 123456789"
    } //メソッド定義の終了
} //クラス定義の終了

アレンジ演習 p.30 text05.cs

・最後のWriteLineの後で、xの値を100、yの値を1に変更して、再度、同じ書式で表示しよう
・それから、xの値を1000、yの値を10に変更して、再度、同じ書式で表示しよう
・また、xの値を10000、yの値を100に変更して、再度、同じ書式で表示しよう

作成例

//アレンジ演習p.30 text05.cs
using System; //System名前空間の利用を宣言
class Text05 //クラスの定義
{ //クラス定義の開始
    public static void Main() //開始時に動作するメソッドMain
    { //メソッド定義の開始
        int x = 10, y = 123456789;
        Console.WriteLine("1234567890123456789012345678990"); //目盛りを表示
        Console.WriteLine("{0, 10}", "abc"); //"       abc"(前に空き7個)
        Console.WriteLine("{0, 5}", "def"); //"  def"(前に空き2個)
        Console.WriteLine("{0, 0}", "ghi"); //"ghi"(桁数指定は無視)
        Console.WriteLine("{0, 10}{1, 10}", "あ", "い"); //"         あ        い"
        Console.WriteLine("{0, -10}{1, -10}", "あ", "い"); //"あ        い         "
        Console.WriteLine("x = {0, 5}, y = {1, 3}", x, y); //"x =    10, y = 123456789"
        x = 100; y = 1; //【以下追加】
        Console.WriteLine("x = {0, 5}, y = {1, 3}", x, y); //"x =   100, y =   1"
        x = 1000; y = 10;
        Console.WriteLine("x = {0, 5}, y = {1, 3}", x, y); //"x =  1000, y =  10"
        x = 10000; y = 100;
        Console.WriteLine("x = {0, 5}, y = {1, 3}", x, y); //"x = 10000, y = 100"
     } //メソッド定義の終了
} //クラス定義の終了

提出課題:アレンジ演習 p.30 text05.cs 改良

・アレンジ演習で追加した部分を掛け算を用いて下記のように改良しよう
 ・最後のWriteLineの後で、xの値を100、yの値を1に変更して、再度、同じ書式で表示しよう
 ・xの値の10倍、yの値の10倍を、再度、同じ書式で表示しよう
 ・xの値の100倍、yの値の100倍を、再度、同じ書式で表示しよう

講義メモ

・p.22「変数を使ってみる」から

p.22 変数を使ってみる

・変数:「変わることが可能な」の意味で、記憶域(メモリ)を必要な分だけ確保して名前(変数名)を付けたもの
・変数のデータ型:変数の用途・特性を示す情報で、記憶域の確保量や利用法が決まる
・データ型の例: int「イント」と読み「インテジャー(整数)」の略。整数用で1個32ビット、-2,147,483,648から
 2,147,483,647まで数値格納用
・変数の宣言:C/C++/Java/C#などでは、変数を事前に用意する=宣言する必要がある
・変数の宣言の書式: データ型 変数名;
 例: int hp; //モンスターのHP用
・複数の変数の宣言:同じ型の変数はまとめて宣言できる。変数名をカンマつなぎで指定すればOK
 例: int hp, mp; //モンスターのHPとMP用
・代入:変数にデータを格納することで、すでに格納されているデータがあれば上書きされる
・代入演算子:「=」記号で代入が可能で「変数など = データなど;」という書式で動作する
 ※ C/C++/Java/C#などでは、「等しい」という意味は無いので注意
 例: hp = 50; //モンスターのHPを50にする
・変数の型と代入:型と一致しないデータの代入は文法エラー
 例: hp = 50.2; //モンスターのHPはint型なので整数専用だから、小数点数の代入はできないのでエラー
・初期化:変数の宣言とデータの代入を同時に行う事
・初期化の書式: データ型 変数名 = 値;
 例: int hp = 50; //モンスターのHPを50に初期化
・変数名のルール:英大文字、英小文字、数字、アンダースコア「_」、2バイト文字(漢字やひらがな等)が利用可能。
 ただし、先頭文字には数字は使えない。
 また、ほとんどの業務では2バイト文字は非推奨や禁止が多い。チームルールを決めていることが多い。
 (例:変数名は小文字で開始し、2つの単語を繋いでいるときは2つ目の単語の先頭を大文字にする。「_」不要
 例えば、maxHp、monsterName)
・キーワード:予約語ともいい、C#側で文法上用いるため、変数などには使えない単語のこと。小文字の単語のみ
 p.17 myname01.csに登場したキーワード: using、class public、static、void
・キーワードに関するルール:キーワードを大文字にしたものは利用可能(例:Class)だが、チームルールで禁止されていることが多い
・加算演算子:「+」記号で加算が可能で、加算結果を変数に代入できる。加算の対象は値でも変数でもOK
・減算演算子:「+」記号で減算が可能で、減算結果を変数に代入できる。減算の対象は値でも変数でもOK
 例: 
 int a = 10, b = 5, c; //整数の変数aを10で初期化、bを5で初期化、cは宣言のみ
 c = a + b; //aに格納されている10と、bに格納されている5を加算し、結果の15をcに代入

p.25 変数のデータを表示する

・Console.WriteLine(変数名); とすると、変数の値が表示される
 例:上の例の後に、 Console.WriteLine(c); とすれば15が表示される
・なお「+」記号は前後のどちらかが文字列の場合、加算ではなく連結になる
 例: "私は" + 15 // "私は15"になる
・このことを利用して、変数のデータを表示する時は、説明文字列と変数を「+」で連結して表示すると良い
 例:上の例の後に、 Console.WriteLine("私は" + c); とすれば"私は15"が表示される
 例:上の例の後に、 Console.WriteLine("HPは" + 50 + "です"); とすれば"HPは50です"が表示される

p.25 text01.cs

//p.25 text01.cs
using System; //System名前空間の利用を宣言
class text01 //クラスtext01の定義
{ //クラス定義の開始
    public static void Main() //開始時に動作するメソッドMain
    { //メソッド定義の開始
        int a = 10, b = 20, total; //int型の変数a、bの初期化とtotalの宣言
        total = a + b; //変数aとbの値の話をtotalに代入
        Console.WriteLine(a + " + " + b + " = " + total); //変数値と文字列を連結して表示
    } //メソッド定義の終了
} //クラス定義の終了

アレンジ演習 p.25 text01.cs

・実行して動作を確認したら、下記の機能を追加しよう
 ① int型の変数diffの宣言
 ② 変数aから変数bの値を引いた結果を変数diffに代入
 ③ 変数a、b、diffの値を用いて「10 - 20 = -10」と表示

作成例

//アレンジ演習 p.25 text01.cs
using System; //System名前空間の利用を宣言
class text01 //クラスtext01の定義
{ //クラス定義の開始
    public static void Main() //開始時に動作するメソッドMain
    { //メソッド定義の開始
        int a = 10, b = 20, total; //int型の変数a、bの初期化とtotalの宣言
        total = a + b; //変数aとbの値の話をtotalに代入
        Console.WriteLine(a + " + " + b + " = " + total); //変数値と文字列を連結して表示
        int diff; //【以下追加】int型の変数diffの宣言
        diff = a - b; //変数aから変数bの値を引いた結果を変数diffに代入
        Console.WriteLine(a + " - " + b + " = " + diff); //変数値と文字列を連結して表示
    } //メソッド定義の終了
} //クラス定義の終了

p.26 変数のデータを表示する(続き)

・Console.WriteLine(計算式); とすると、ここで計算を行って、計算結果を表示できる
 例: Console.WriteLine(10 + 20); //「30」が表示される
・なお、複数の「+」が並んでいる場合、左から右へ順に加算か連結が行われる
 例: a + " + " + b + " = " + total の場合:
 ①「a + " + "」で "10 + "になる
 ②「① + b」で "10 + 20"になる
 ③「② + " = "」で "10 + 20 = "になる
 ④「③ + total」で "10 + 20 = 30"になり完成
・この順序は()をつけることで変更でき、()内が先に扱われる。
・例: "和は" + (10 + 20) とすると、先に加算が行われるので、"和は30"になる
 ※()が無いと、"和は" + 10 + 20 は "和は1020"となってしまう(どちらも連結になる) 

p.25 text02.cs

//p.25 text02.cs
using System; //System名前空間の利用を宣言
class text02 //クラスの定義
{ //クラス定義の開始
    public static void Main() //開始時に動作するメソッドMain
    { //メソッド定義の開始
        int a = 10, b = 20; //int型の変数a、bの初期化
        Console.WriteLine(a + " + " + b + " = " + (a + b)); //変数値と文字列を連結して表示
    } //メソッド定義の終了
} //クラス定義の終了

アレンジ演習 p.26 text02.cs

・p.26に説明があるように、「(a + b)」を「a + b」にしたものを追加して、結果を比較しよう

作成例

//アレンジ演習p.25 text02.cs
using System; //System名前空間の利用を宣言
class text02 //クラスの定義
{ //クラス定義の開始
    public static void Main() //開始時に動作するメソッドMain
    { //メソッド定義の開始
        int a = 10, b = 20; //int型の変数a、bの初期化
        Console.WriteLine(a + " + " + b + " = " + (a + b)); //変数値と文字列を連結して表示
        Console.WriteLine(a + " + " + b + " = " + a + b); //【追加】変数値と文字列を連結して表示
    } //メソッド定義の終了
} //クラス定義の終了