プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション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("ウケルー"); } } 今のネタで笑えるようになろう! • まぁ、笑えずとも理 解できるようになる のが今日の目的です • getstring()は文字列 を入力する関数 – getstring()!=NULLで 「何か入力してもらえ ていたら」という条件 • ネタのままでは 実際に動かないので、 • randは乱数を表す – 本当はrand()と サンプル中では 表記するのが正しい 同じ意味のまま、 • print()は文字列を FKUTで動くように 表示する関数 直してあります。 変数の基本 • これまで何種類かのクラスオブジェクト を利用してきた – SimpleWindowやSphereModelなど • これらよりもっとシンプルに、数値を 覚えておくメモ用のオブジェクトがある – それを「変数」と呼ぶ – FKUTに限らず、一般的に用いられる – 今まで扱ってきた、図形やウィンドウを表す オブジェクトは「すごい変数」とも言える 使い方 1. メモりたいデータの型を選ぶ – 整数ならint、実数ならdouble、 文字列ならstring 2. 名前を付けて宣言する – int seisuu; 3. =を使って代入する(宣言と同時も可) – seisuu = 3; 4. 後は計算に使ったり、書き換えたり、 ご自由にどうぞ 代入の例 • 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:判定時に正解・不正解によって基本図形で作った ○や×がででーんと表示できるととても素敵
© Copyright 2025 ExpyDoc