スライド 1

プロジェクト演習Ⅱ
インタラクティブゲーム制作
イントロダクション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:判定時に正解・不正解によって基本図形で作った
○や×がででーんと表示できるととても素敵