【ゲーム開発のためのC#入門講座・基礎学習編】数値と文章の扱い方を覚えよう【#3】

1.0_C#基礎学習編

コンピュータで数値を扱うには

HPとか攻撃力とか、とにかくゲームは数値のオンパレードですよね。ワンダと巨像のように極力数値表示を排したゲームであっても、内部では多くの数値が動いています。

ステータスは数値がいっぱい!

さて、そんな数値を扱うにあたり、コンピュータには欠かせないものがあります。

それが演算子です。

演算子(えんざんし)とは?

演算子(えんざんし)とは何らかの命令を行わせるための記号のことです。

いきなり難しそうな言葉とアバウトな説明きたなと思った方、ご安心下さい。

中身はすごく簡単です。

演算子にはいくつか種類があるんですが、今回学習するのは算術演算子です。

数値計算を行う演算子で「+」や「-」が該当します。

// 左の数字と右の数字を足すという命令を行わせるための記号「+」が演算子
1 + 1;

例えば足し算や引き算まで「System.Console.WriteLine」のように全部文章のように記述していたら正直面倒臭いですよね。

// ↓こんな風にいちいち文章チックに書くのは面倒
System.Math.Addition(1, 1);

なので、特定の命令については記号で簡略的に表せるようにしましょう、ということで作られたのが演算子です。

やたら名前が堅苦しいですけど、「+」とか「-」みたいな記号のことをいうんだなと理解できれば、怖くないかと思います。

それではゲームにとって大事な計算を行うための算術演算子、一通り見てみましょう。

算術演算子

算術演算子に該当するのは下記の通りです。

演算子命令使用例結果
+AとBを足す1 + 12
AからBを引く1 – 10
*A掛けるB2 * 24
/A割るB2 / 21
%A割るBの余り2 % 20
算術演算子一覧

「%」はあまり馴染みないかもしれませんが、それ以外は数学とほとんど変わらないのでわかりやすいですね。

なお、数学の世界と同じで、演算子には優先順位があります。「*」と「/」は「+」や「-」よりも優先順位が高く、先に計算されてしまいます。そこで、優先順位は低いがもっと先に計算して欲しい部分は「()」で囲むことになっています。これも数学と同じなので、わかりやすいですね。

// ()で囲まれている部分が先に計算されるから、結果は4になるよ!
(1 + 1) * 2;

実際にコンピュータに計算させてみよう

前回に引き続き、こちらのWeb上でプログラム実行ができるサービスを使います。

C# Online | ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO

このアナウンスは今回で最後にします。特に断りがない限り、しばらくはこちらのサービスを活用するものとしてご理解下さい。

さて、前回「System.Console.WriteLine」という「出力エリアに文章を表示させる命令」を学習しましたね。

あれ、実はちょっとだけ嘘つきました。

本当は文章以外も表示させられるんです。

なので、正確には「出力エリアに()の中で指定された何らかの値を表示させる命令」となります。

試しにコンピュータに、1 + 1の計算結果を表示させてみましょう。

public class Hello{
    public static void Main(){
        System.Console.WriteLine(1 + 1);
    }
}

実行ボタンを押下、またはCtrlを押しながらEnterを押してみてください。

出力エリア

2

出力エリアに上記の通り計算結果が出力されれば成功です。

文章の扱いを覚えよう

C#では「"」で囲んだ部分を文章として扱うというルールがあります。

// ↓「"」で囲まれている「Hello C#」の部分を文章として扱う
System.Console.WriteLine("Hello C#");

もしもこのルールがなかったなら、例えば「1 + 1」と命令した時に、「1 + 1」をコンピュータに計算させたいのか、「1 + 1」という文章を表示させたいのか、判断がつかないですよね。

コンピュータは機械なので、そういう曖昧な命令には対応できません。

そのため、厳密に「文章なのかどうか」判別できるようにしてあげなければいけないことから、このルールが定められています。

下記のふたつのコードは字面だけでいうとほとんど同じですが、「"」で囲まれているか否かで扱いが変化します。試しに実行してみてください。

public class Hello{
    public static void Main(){
        System.Console.WriteLine(1 + 1);
        System.Console.WriteLine("1 + 1");
    }
}
出力エリア

2

1 + 1

前者は計算式として、後者は文章として扱われていますね。

反対に、本来は文章であるはずのものを「"」で囲まずにコンピュータに処理させようとすると、コンピュータは命令の意味を理解できずにエラーを吐いてしまいます。こちらも試してみましょう。

public class Hello{
    public static void Main(){
        // ↓わざと「"」で囲まないようにしています
        System.Console.WriteLine(Hello C#);
    }
}
出力エリア

Compilation failed: 2 error(s), 0 warnings
Main.cs(4,39): error CS1525: Unexpected symbol `C’
Main.cs(4,41): error CS1040: Preprocessor directives must appear as the first non-whitespace character on a line

エラー内容は解説しませんが、とりあえずエラーになっちまったらしい、というのは何か面倒臭そうな出力結果からご理解いただけたかと思います。

文章として取り扱いたい場合は「"」で囲む

大事なルールなので、忘れないようにしてくださいね。

Unityでの活躍ポイント

今回学んだ演算子を駆使することで、

  • 複雑な計算式によるダメージ計算
  • ジャンプ力と重力から次に移動する座標を計算

などの実装を行うことができます。

実際に自分がUnityで3Dのアクションゲームを作った時のジャンプ処理はこんなコードで出来ています(わかりやすくするために少し加工しています)。

// ジャンプボタンが押された時の処理
moveDirection.y = jumpSpeed;
animator.SetTrigger("jump");
​
……色々処理……
​
// 重力で少しずつ落下していく処理
moveDirection.y -= gravity * Time.deltaTime;

「Time.deltaTime」というのはゲーム内の経過時間を表したものです。他にも色々単語が並んでいますが、単語の意味から何となく実行している処理が想像できるんじゃないかなと思います。

この処理で使っている変数はプログラミングの中心的な機能といえます。

次回学習予定ですので、お楽しみに!

実践演習

それでは実際に数値と文章を扱ってみましょう。

今回も各演習にはヒントコメントを記載したテンプレートを用意しています(演習の内容によってはない場合もあります)。Webサービス上にコピペした上で、ヒントを参考にしながら、皆さんの手でプログラムを完成させてください。

また、うまくいかない場合や疑問がある場合、コメントやTwitterでご連絡いただければサポート・回答します(この記述もこれを最後としますが、今後も同様としてご理解下さい)。

演習①コンピュータに計算させよう!

コンピュータに実行させたい内容を定義したものを仕様といいます

プロっぽい響きでちょっと格好いいですね。

仕様通り動作するよう、皆さんの手でプログラムを完成させてください。

仕様

下記の計算結果を出力エリアに表示する。

5と5を足して8と掛ける

テンプレート
public class Hello{
    public static void Main(){
        // ↓()の中にコンピュータに表示させたい内容を記述しよう!
        System.Console.WriteLine();
    }
}

演習②コンピュータに計算式を表示させよう!

仕様通り動作するよう、皆さんの手でプログラムを完成させてください。

仕様

下記の計算式を文章として出力エリアに表示する。

5 + 5 = 10

テンプレート
public class Hello{
    public static void Main(){
        // ↓()の中にコンピュータに表示させたい内容を記述しよう!
        System.Console.WriteLine();
    }
}

答え合わせ

演習①の答え

public class Hello{
    public static void Main(){
        // ↓()の中にコンピュータに表示させたい内容を記述しよう!
        System.Console.WriteLine((5 + 5) * 8);
    }
}
出力エリア

80

演習②の答え

public class Hello{
    public static void Main(){
        // ↓()の中にコンピュータに実行させたい内容を記述しよう!
        System.Console.WriteLine("5 + 5 = 10");
    }
}
出力エリア

5 + 5 = 10

まとめ

  • 演算子(えんざんし)とは何らかの命令を行わせるための記号のこと
  • 算術演算子を使えば数学のような感覚でコンピュータに計算させることができる
  • 文章として取り扱いたい場合は「"」で囲む

それでは、今回もお疲れ様でした!

また次の記事でお会いしましょう!

お借りした素材一覧

記事内の画像およびご紹介したスクリーンショットでは下記サイト様の素材をお借りしています。

ありがとうございました!

作品置き場 [ 3D / MMD ] (ninja-web.net)

かわいいフリー素材集 いらすとや (irasutoya.com)

Posted by yuumekou