Transcript 第12回

授業計画
12.アプリケーションの作成
アプリケーションの作成を通したプログラムの理解
12.1 確認・提出事項
レポート提出
12.2 授業内容
インターフェイス
演習
アルゴリズム教室
12月24日(火)は月曜日の授業です。
本講義は本日が今年度最後となります。
レポート〆切 1月7日(火)
12.3 インターフェイス
使いやすいインターフェイスとは?
12.4 演習
乱数を使ったアルゴリズム
12.5 アルゴリズム教室
ゲームを作ってみよう
12.6 レポート課題
※これまでの授業用資料、レポート課題等は
http://cb.apc.kagoshima-u.ac.jp/~higolabo/proex/proex.htm
にアップロードしてあります。
質問、レポート提出先
[email protected]
【アルゴリズム教室】
1
ミニゲームを作ってみよう!
→ゲームを作ることは、アルゴリズムの作り方の習得に最適
【基本コンセプト】
1.A列のスタート地点からG列のゴールまで進んだときの歩数を競う
2.キー入力の判定は非常に難しいので、チェックボックスを4つとコマンド
ボタンを一つおき、ボタンを押したときにチェックボックスにチェックが
入っている方向に進んではどうか。
3.自キャラの位置はセルA2、B2に、歩数はセルC2に表示させ、
これを利用したら良いのではないか。
4.極力授業で出てきたアルゴリズムの組み合わせで作りたい。
【この3つの問題点を克服してみる】
①上下左右に1歩しか
●の位置をA2,B2から取得しているが、
進めない理由
その値を更新していないので、ボタンを押す
ごとに、x=1、y=6に設定され直される。
↓
最終的なxとyの値をA2、B2に出力すれば良い。
②歩いた後が残る理由
自キャラを消すための命令がない。
↓
移動前に●を消せばよい。
③左に動くとエラーが出る xの値が0になり、6行0列というあり得ない
場所に●を表示しようとしたため。
↓
x=0になったら1にすればよい。また、情報を
表示している2行にも入れなくしたいので、
y=2になったときに3に戻すようにすれば良い。
【アルゴリズム教室】
【海賊王に、俺はなる!】
これをベースにゲームを作ってみよう!宝探しなんかどうかな?
【追加コンセプト】
B3~G9の間に宝が埋まっていて、それを探す!
【どのようにすれば良いか?】
④「初期化」ボタンを押したとき、宝の場所をランダムで決めて、
自キャラの位置管理と同じくC2、D2に出力して場所を管理してはどうか?
⑤「動け!」で移動した後、自キャラのx、yとお宝のtx、tyが一致したら、
メッセージを表示しよう!
2
【プログラム改良】
'画面初期化
Cells = ""
Cells(2, 1).Value = 1
Cells(2, 2).Value = 6
Cells(6, 1).Value = "●" 'ついでに自キャラを表示
Dim tx As Integer, ty As
tx = Int(Rnd() * 6 + 2)
ty = Int(Rnd() * 7 + 3)
Cells(2, 3).Value = tx
Cells(2, 4).Value = ty
Integer '④お宝位置用変数
'④2(B)以上8未満(7(G)以下)の整数乱数
'④3以上10未満(9以下)の整数乱数
'④お宝列をC2に表示
'④お宝行をD2に表示
【プログラム改良】
Dim x As Integer, y As Integer
x = Cells(2, 1).Value '列座標
y = Cells(2, 2).Value '行座標
Cells(y, x).Value = "" '問題点②修正
If
If
If
If
CheckBox1.Value
CheckBox2.Value
CheckBox3.Value
CheckBox4.Value
If x = 0 Then x = 1
If y = 2 Then y = 3
=
=
=
=
True
True
True
True
Then
Then
Then
Then
y
y
x
x
=
=
=
=
y
y
x
x
+
+
1
1
1
1
'問題点③修正
'問題点③修正
Cells(2, 1).Value = x
'問題点①修正
Cells(2, 2).Value = y
'問題点①修正
Cells(y, x).Value = "●"
Dim tx As Integer, ty As Integer '⑤お宝位置用変数
tx = Cells(2, 3).Value '⑤C2の値をtxに読み込む
ty = Cells(2, 4).Value '⑤D2の値をtyに読み込む
If x = tx And y = ty Then MsgBox "発見!" '⑤発見判定
※C2、D2セルの文字色を
白にすればゲームっぽく
仕上がる!
後は、時間や歩数を
得点としてはどうか。
【僕は海賊になんかならないよ!】
その他、どんな改良がある? ・障害物があり、行く手を遮る。
→移動前のxとyを別の変数にコピーしておき、移動方向に障害物があったら
コピーした移動前の値をxとyに書き戻す。
・いくつか見えない落とし穴があり、落ちるとスコアが減る
→お宝と同じ方法で落とし穴用の処理を追加する。
・お宝の近くに来るとヒントが出る。→tx-x、ty-yの絶対値を判定する
コントロールを二種類以上を用いてプログラムを作成しなさい。
ただし、ラベルコントロールはカウントせず、
リストボックスとコンボボックスは同一種類と見なします。