180 likes | 300 Views
プロジェクト演習 Ⅱ インタラクティブゲーム 制作 イントロダクション 2. 第 4 回 はじめての 3D プログラミング 今更 だけど 、変数の 基礎編. 今日の内容. 変数について理解しよう _人人人人人 人人 _ > 今さら感! <  ̄ ^ Y^Y^Y^Y^  ̄. 今週 のプロジェクト. 授業資料ページからダウンロードします 落とした Zip ファイルを解凍して、 出てきたフォルダを好きなところに配置. 今日のサンプル. 前回のものと比べると至って地味 とあるネタを実際にプログラムにしたもの プログラム制御 の 基本 を理解するのが目的.
E N D
プロジェクト演習Ⅱインタラクティブゲーム制作イントロダクション2プロジェクト演習Ⅱインタラクティブゲーム制作イントロダクション2 第4回 はじめての3Dプログラミング 今更だけど、変数の基礎編
今日の内容 • 変数について理解しよう _人人人人人人人_> 今さら感! < ̄^Y^Y^Y^Y^ ̄
今週のプロジェクト • 授業資料ページからダウンロードします • 落としたZipファイルを解凍して、出てきたフォルダを好きなところに配置
今日のサンプル • 前回のものと比べると至って地味 • とあるネタを実際にプログラムにしたもの • プログラム制御の基本を理解するのが目的
Twitterネタで恐縮ですが 次のプログラムの意味が分かりますか?
会話できる人工知能のプログラム while(getstring() != NULL){ n = rand%3; if(n == 0) { print("マジで"); } else if(n == 1) { print("ヤバい"); } else { print("ウケルー"); } }
今のネタで笑えるようになろう! • まぁ、笑えずとも理解できるようになるのが今日の目的です • ネタのままでは実際に動かないので、サンプル中では同じ意味のまま、FKUTで動くように直してあります。 • getstring()は文字列を入力する関数 • getstring()!=NULLで「何か入力してもらえていたら」という条件 • randは乱数を表す • 本当はrand()と表記するのが正しい • print()は文字列を表示する関数
変数の基本 • これまで何種類かのクラスオブジェクトを利用してきた • SimpleWindowやSphereModelなど • これらよりもっとシンプルに、数値を覚えておくメモ用のオブジェクトがある • それを「変数」と呼ぶ • FKUTに限らず、一般的に用いられる • 今まで扱ってきた、図形やウィンドウを表すオブジェクトは「すごい変数」とも言える
使い方 • メモりたいデータの型を選ぶ • 整数ならint、実数ならdouble、文字列ならstring • 名前を付けて宣言する • intseisuu; • =を使って代入する(宣言と同時も可) • seisuu = 3; • 後は計算に使ったり、書き換えたり、ご自由にどうぞ
代入の例 • int a = 3; • aを使うことを宣言し、そこに3が入る • a = 5+4; • 5+4の計算結果である9で上書きする • a = fkut_InputInteger(); • 入力欄が開き、そこで入力した整数が入る • a = rand()%10; • 0~9までのランダムな整数が入る
代入時にできること(1) • 四則演算+αができる(int, doubleのみ) • 加(+)減(-)乗(*)除(/) • 計算の優先順位は数学で定められた通り • 順位を変えたい場合は()を使うのも一緒 • intの場合は、割り算の余り(剰余)を%で求められる。結構使うので覚えておこう。 • stringの場合は+で文字列の結合になる • 他の変数の値をコピーして代入できる • a = b;みたいな感じ。計算を絡めても可。
代入時にできること(2) • 関数の実行結果を捕まえられる • 例えばrand()は「乱数を返す」関数なので、int a = rand();と書いて、rand()が32という結果を返したとしたら、int a = 32;と同じ結果になる。 • 「rand()%n」で0~(n-1)の値が返ってくるのは、どんなに大きな整数値でも、nで割り算したときの余りは0~(n-1)に収まるから
代入時にできること(3) • 前スライドの応用で、入力を捕まえる • 整数用:fkut_InputInteger() • 実数用:fkut_InputDouble() • 文字列用:fkut_InputString() • 入力時にメッセージを添えたい場合は(“メッセージ”)とすることで可能。メッセージはstringの変数でも可。
利用方法(1) • 表示する • stringはfkut_PrintString(変数名); • 変数ではなくて””で括った文字列もオッケー • intはfkut_PrintInteger(変数名); • doubleはfkut_PrintDouble(変数名); • 数値用は、(変数名,”文字列での補足”)のような表記も可能。補足文字列はstringの変数でも可。
利用方法(2) • 図形のサイズや位置を指定するのに使う • 実数値をcreate()やglMoveTo()の引数に使えばいい double radSize = 5.0; fkut_SphereModel sphere; sphere.create(8, radSize); • これだとうまみがないが、入力値や計算式を使うと色々発展できて捗る • 半径のサイズを基準に球を並べたかったら sphere.glMoveTo(10.0 + radSize*3, 0.0, 0.0); とするなど
利用方法(3) • 代入された値によって処理を分岐 • 等しい(==) • 等しくない(!=) • 大きい(>) • 小さい(<) • 以上(>=) • 以下(<=) • 文字列の場合は等しい、等しくないのみ対応 int answer = fkut_InputInteger(“あなたのストライクゾーンは何歳から?”); if(answer < 12) { fkut_PrintString(“このロリ(ショタ)コンめ!”); } else if(answer > 60) { fkut_PrintString(“あ、そう、そうなんだ……”); } else { fkut_PrintString(“一般人ぶってんじゃねぇ!”); }
注意事項 • 同じ名前の変数(オブジェクト)が衝突するとエラーになるので、違う名前を付ける • 半角英数字で、ローマ字でもいいから意味が分かるように • とりあえず代入していいのは、今日紹介したint, double, stringのみにしておく • SimpleWindowや~~Model系はちとマズイ • 変数は宣言したスコープ({})の中でのみ有効なので、宣言場所に気をつける
課題 • BASIC: • 基本図形のレイアウトやサイズを、数値入力によって変更できるプログラムを作ろう • ADVANCED: • BASICに加えて、図形のマテリアルも変更できるようなプログラムを作ろう • ただし、入力された文字列を直接マテリアル指定に利用することはできないので、条件分岐で実現することになる。変更できるマテリアルの種類は限定してよい。 • EXTREME: • 簡単なクイズゲームを作ろう • 出題、回答、判定を1セットにして繰り返す • EXTRA:判定時に正解・不正解によって基本図形で作った○や×がででーんと表示できるととても素敵