アマゾンバナーリンク

ゲームプログラミング基礎

2019年12月16日

今回からゲーム制作のためのプログラミングの講座をはじめます。visualstudio2019 communityをまだインストールしてない人は以下の前回の記事を参考にしてください。


プログラミングなんてまったくやったことない超初心者の方を対象に進めていきます。
なので、プログラミングについての学習内容は、ゲームを作る上で最低限覚える必要がある事のみに集中し学習していきます。

ゲームプログラミングを覚えるときの心構え

なんといってもプログラミングの上達のコツは、実際に書いてみる事です。
初心者の方は、説明を読んだだけではなかなか理解できないことも多いので、全部読んでからコーディングをするよりも、1つの項目ごとに実際にコードを実行してみるのが成長への近道です。

環境の説明

使用する言語はC#です。この言語はWindows向けのアプリケーションの開発で有名ですが、XamarinやゲームエンジンであるUnityなどで、windowsだけでなくAndroidやiosなど様々なプラットフォームのアプリケーションやゲームが作れます。講座の最初のうちはDXライブラリとVisual StudioでC#のプログラミングを書いていきますが、そのうちUnityについても説明します。

まずはプロジェクトの作成

前回同様コンソールアプリケーションを作成します。
前はConsol.WriteLine()関数を使ってHello Worldを表示することまでやりました。
その続きからやっていきましょう。

変数

変数とは、値を格納する箱のようなものであり、プログラム中で何度も中身の値を書き換える事ができます。宣言は以下の様に行います

宣言

型名 変数名; →具体例 int a;

変数は宣言しただけでは、中身が入ってません。中身を入れるには初期化します。

初期化

変数名 = 値; →具体例 a = 0;

変数の宣言と初期化は同時に行うこともできます。大抵の場合は同時に行います。

宣言と初期化を同時に実行

型名 変数名 = 値; →具体例 int a = 0;

変数名でつけられる名前

変数名は最初の1文字は英字が使えて2文字目以降は数字も使うことができます。
この時大文字と小文字は区別されます。 int a;とint Aは別の変数扱いになるということです。

変数の型の種類

int型

整数を格納ができます。
int型のサイズは4バイトで、 格納できる値の最小値は-2147483648、最大値は2147483647となります。

long型

整数を格納ができます。格納できるサイズはint型より大きくて8バイトです。
格納できる値の最小値は-9,223,372,036,854,775,808 から 最大値は9,223,372,036,854,775,807です。

float型

浮動小数点型で少数まで格納することができます。
サイズは4バイトで、絶対値の最小値は-3.402823E+38、最大値は3.402823e+38となります。

double型

浮動小数点型で少数まで格納ができます。 格納できるサイズはfloat型より大きくて8バイトです。 絶対値の最小値は-1.79769313486232E+308、最大値は1.79769313486232E+308となります。

char型

char型は文字を格納できます。しかし、内部では数字として扱われていて、最小値0から最大値 65535です。 例 char moji = 'あ’;

string型

文字列を格納できます。例 string str = “あいうえお";

char型とstring型を使う時に文字や文字列を値として使う時には、1文字の時はクウォーテーション、2文字以上の時はダブルクウォーテーションで囲みます。

bool型

TrueまたはFalseの真偽値のどちらかを格納できます。

まだ他にも方はたくさんありますが、最初はこれだけ覚えておけば十分です。

配列

変数は1つの種類のデータを格納できますが、複数のデータを格納するには配列を使います。
データ型[] 配列名 = new データ型[要素数]; // 宣言
配列名[インデックス番号] = 値; // 初期化

int型の配列numbersを宣言と初期化を別々にする

int[] numbers = new int[3];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;

int型の配列numbersの宣言と初期化を同時な行う

int[] numbers = new int[] { 4, 5, 6 };

配列にアクセスする時は先頭は0からになるので注意しましょう。
宣言と初期化と同時にすると配列の要素数を書かなくてもOKです。

繰り返し処理

あらかじめ繰り返したい処理の回数が決まってる場合はfor文決まってない場合はwhile文を使います

for文

for(int 変数 = 初期数; 条件式; 変数を増減)
{
// 繰り返したい処理
}

for文具体例

具体例 テストと3回表示する
for(int i = 0; i < 3; ++i)
{
Consoul.WritetheLine(“Test");
}

while

while(条件式)
{
// 繰り返したい処理
}

while文具体例

while文は()内指定した条件が満たされてる間は繰り返します。
int i = 0;
while(i < 10)
{
Console.WriteLine(i.ToString());
i++;
}

foreach文

foreace文は配列の要素の数だけ繰り返し処理します。
foreace(型名 変数名 in 配列名)
{
// 繰り返したい処理
}

foreach文具体例

int[] numbers = new int[] { 4, 5, 6 };
foreace(var a in numbers)
{
Console.WriteLine(a.ToString());
}

関数

プログラムは基本的に関数を呼び出して初めて実行されます。
関数は最初からWindows APIに用意されている物もありますが、自分で定義することもできます。

戻り値の型名 関数名(任意の名前)(引数の型名 引数の名前(任意の名前))
{
// ここに処理を書く
// 戻り値がある場合はreturnの後に戻り値を書く
}
という形になります。

わかりやすく料理のレシピで例えるとこんな感じです。わかりやすくするために、型名は省いてます。

肉じゃが 肉じゃがを作る処理(砂糖, 醤油, 本みりん, ほんだし, じゃがいも, 人参, じゃがいも, 糸こんにゃく, 牛バラ肉)
{
煮汁を作る(砂糖, 醤油, 本みりん, 水, ほんだし);
具材の下ごしらえする(じゃがいも, 人参, 糸こんにゃく, 牛バラ肉)
while(アクが出ていない)
{
強火で沸騰させる
}
弱火で20分煮込む();
盛り付け();
return 肉じゃが;
}

関数の定義 戻り値 引数なし

// 戻り値なし 引数なし
void Someting()
{
Console.WriteLine(“Hello World");
}

関数の定義 戻り値int型 引数int型2つ

戻り値と引数のある例
int Someting(int a, int b)
{
return a + b;
}

関数は定義しただけでは何も起きません。呼び出して初めて処理が実行されます。
実行する時は
上の例ではSometing();と書けば呼び出せます。
下の例ではint res = Someting(1, 2) ; と書けば呼び出した上で戻り値を受け取ることができます。

変数のスコープ

スコープ(scope)とは日本語にすると"有効範囲"を表します。
つまり、変数のスコープは変数が使える有効範囲のことを指します。
有効範囲とは{ }で囲まれた部分の事です。

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test1
{
	class Program
    {
        static void Main(string[] args)
        {
			//int型変数aを宣言
			int a = 100000; 
			for(int i = 0; i < 10; ++i)
			{
				Console.WriteLine(i.ToString());
				// int iの範囲はここまで
			}
			Console.WriteLine(a.ToString());
			//int型変数aの範囲はここまで
		}
  }
}

私の場合は変数名でスコープをすぐにわかるようにするために、関数内のみの寿命のスコープでは小文字英数字の関数名を使い、関数の外から参照される場合は頭文字を大文字の英数字にするよう工夫してます。

必要最低限の知識ですが、ざっと説明しました。後は実践的に作りながら、覚えていきましょう!次回からコンソールではなく、windowsアプリケーションを作っていきます。