実践プログラミング入門2 配列を使ってゲームを作ろう 徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野 1 データの貯蔵と利用 • カードめくりゲーム – – – – カードを20枚配置してユーザが2枚づつめくる 同じカードなら当り。 あたった札にある数はユーザの取り分になる 20枚のカードをあらかじめ配置しておかないと いけない • データの貯蔵の仕組みが必要 2 配列によるデータの貯蔵 • • • 配列: データの列 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 3 エクセルの表を使ったデータの貯蔵 • エクセルの表の10列目に果物の名前を たくさんタイプしておく • エクセルの表の11列目にその名前を逆順に タイプしておく • ゲーム: 果物の名前をランダムな順に表 示してユーザに逆順にタイプさせる 4 カードめくりゲームのプログラム 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 ‘ 満点 5 数字の組を10個生成する For i = 0 To 19 Do a = Int(Rnd() * 20) '重複のチェック。重複したらaを引きなおす Loop Until Check(a) = False ' カードの表。aが2か3なら200というように card(i) = (1 + Int(a / 2)) * 100 Check(a) = True Next i 6 Do Loop 構文1 mytime = Timer Do xxxxxxxx Loop until Timer > mytime + 100 100秒たつまである操作xxxxxxxをする 7 Do Loop 構文2 mytime = Timer Do xxxxxxxx Loop while Timer < mytime + 100 100秒たつまである操作xxxxxxxをする 8 初期画面の設定 ' タイムカウンタの表示 Cells(7, 2) = "残り時間" Cells(7, 3) = 100 Cells(7, 4) = "秒です" ‘ 0から19までカードの裏に番号をつける ‘ For i = 1 To 5 For j = 1 To 4 Cells(i, j) = 4 * (i - 1) + j Next j Next i 9 ゲーム開始 MsgBox "パネルアタック20、がっちり当てましょう" MsgBox "同じ値段のペアを見つけてください。100秒間 にいくら儲けられるかな" score = 0 mytime = Timer ‘満点は5500点です fullscore = 5500 10 最初のカードをめくる 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) 11 二枚目のカードをめくる 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 12 裏返しと残り時間表示 Else ‘カードが違えばもう一度裏返し MsgBox "残念" 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 13
© Copyright 2024 ExpyDoc