実践プログラミング入門2 配列を使ってゲームを作ろう 徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野
データの貯蔵と利用 カードめくりゲーム カードを20枚配置してユーザが2枚づつめくる 同じカードなら当り。 カードめくりゲーム カードを20枚配置してユーザが2枚づつめくる 同じカードなら当り。 あたった札にある数はユーザの取り分になる 20枚のカードをあらかじめ配置しておかないといけない データの貯蔵の仕組みが必要
配列によるデータの貯蔵 配列: データの列 card(0)=5, card(1)=3, card(2)=5 などなど 配列: データの列 card(0)=5, card(1)=3, card(2)=5 などなど Dim card(20) As Integer 整数20個が入る配列の定義 card(0)からcard(19)までです 例えば For i=0 to 19 card(i) = i *i Next i
エクセルの表を使ったデータの貯蔵 エクセルの表の10列目に果物の名前を たくさんタイプしておく エクセルの表の10列目に果物の名前を たくさんタイプしておく エクセルの表の11列目にその名前を逆順にタイプしておく ゲーム: 果物の名前をランダムな順に表示してユーザに逆順にタイプさせる
カードめくりゲームのプログラム Sub パネルアタック1() Dim card(20) As Integer ‘カードのための配列 Dim Check(20) As Boolean ‘ 重複チェック用配列 Dim mytime As Double Dim i As Integer Dim j As Integer Dim a As integer Dim x As Integer Dim y As Integer Dim row(2) As Integer Dim col(2) As Integer Dim score As Integer ‘得点 Dim fullscore As Integer ‘ 満点
数字の組を10個生成する For i = 0 To 19 Do a = Int(Rnd() * 20) Loop Until Check(a) = False ' カードの表。aが2か3なら200というように card(i) = (1 + Int(a / 2)) * 100 Check(a) = True Next i
Do Loop 構文1 mytime = Timer Do xxxxxxxx Loop until Timer > mytime + 100 100秒たつまである操作xxxxxxxをする
Do Loop 構文2 mytime = Timer Do xxxxxxxx Loop while Timer < mytime + 100 100秒たつまである操作xxxxxxxをする
初期画面の設定 ' タイムカウンタの表示 Cells(7, 2) = "残り時間" Cells(7, 3) = 100 ‘ 0から19までカードの裏に番号をつける ‘ For i = 1 To 5 For j = 1 To 4 Cells(i, j) = 4 * (i - 1) + j Next j Next i
ゲーム開始 MsgBox "パネルアタック20、がっちり当てましょう" score = 0 mytime = Timer ‘満点は5500点です fullscore = 5500
最初のカードをめくる While (Timer < mytime + 100) And (score < fullscore) ‘位置(5000,100)に入力窓を出す x = InputBox(“パネル番号を指定してください”, 入力1, , 5000, 100) 'パネルの場所を探す row(1) = Int(x / 4) + 1 col(1) = x - 4 * (row(1) – 1) + 1 'xに対応するカードを表示する Cells(row(1), col(1)) = card(x)
二枚目のカードをめくる y = InputBox("もう一つ番号を指定してください", 入力2, , 5000, 100) row(2) = Int(y / 4) + 1 col(2) = y - 4 * (row(2) – 1) + 1 Cells(row(2), col(2)) = card(y) 'カードが一致したらスコアに加えて表示 If Cells(row(1), col(1)) = Cells(row(2), col(2)) Then score = score + card(x) MsgBox "Bingo" & card(x) & "ドル獲得です。" ' あけたカードの価値は0にする card(x) = 0 card(y) = 0
裏返しと残り時間表示 Else ‘カードが違えばもう一度裏返し MsgBox "残念" Cells(row(2), col(2)) = y Cells(row(1), col(1)) = x Cells(row(2), col(2)) = y End If Cells(7, 3) = 100 + mytime - Timer Wend MsgBox "Score = " & score MsgBox "Game Over" Range(“A1:D4”).ClearContents ‘画面クリアのオブジェクト End Sub