1 / 14

実例で学ぶプログラミング

実例で学ぶプログラミング. VBA を用いて簡単なゲームを作ろう. 徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野. ゲームのプロットを作る. 頭の体操  計算式もしくはクイズを表示する  ユーザは回答を行う  正しく回答した数を競う バージョン1  計算: 表示した数の 3 倍を計算 バージョン2  足し算、引き算、掛け算を計算 あなたのバージョン??. アルゴリズムと流れ図を考える. ゲーム開始. タイムカウンタセット. 問題提示. 回答取り込み. No. 正解かどうか. 間違い表示. Yes.

garvey
Download Presentation

実例で学ぶプログラミング

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 実例で学ぶプログラミング VBAを用いて簡単なゲームを作ろう 徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野

  2. ゲームのプロットを作る • 頭の体操 •  計算式もしくはクイズを表示する •  ユーザは回答を行う •  正しく回答した数を競う • バージョン1 •  計算: 表示した数の3倍を計算 • バージョン2 •  足し算、引き算、掛け算を計算 • あなたのバージョン??

  3. アルゴリズムと流れ図を考える ゲーム開始 タイムカウンタセット 問題提示 回答取り込み No 正解かどうか 間違い表示 Yes 正解数を1増やす タイムアップか No Yes 得点の表示をして終了

  4. 必要な機能を探そう •  問題を生成する • 3桁の数をランダムに生成する • Rnd関数を利用します •  問題の表示と回答の取り込み • InputBoxで出来る •  正解の判定と正誤表示 • If 文と MsgBoxで出来る •  タイムカウンタの作成 • Timerという関数(オブジェクト)があります

  5. 乱数とタイムカウンタ • Rnd • 呼び出すごとに1未満0以上の実数(実際は16桁の小数)をランダムに発生するオブジェクト •  プログラムの最初にRandomizeとおまじないを書いておく必要がある • Timer • その日の午前0時から現在何秒たったかを示すオブジェクト 

  6. 整数をランダムに出そう • 実数の整数部分を計算する関数(切捨て操作) • Int() • Int(4.356) = 4 • 1000未満の整数をランダムに出すには • x = Int(Rnd*1000) • 3未満だったら • x = Int(Rnd* 3) • x が0ならグー 1ならチョキ 2ならパー というように使える

  7. プログラムを読もう Sub Game1( ) ' ' Brain training1 ' Dim suuji As Integer '提示する問題 Dim answer As Integer '回答 Dim score As Integer '得点(正解数) Dim mytime As Single 'タイムカウンタ、単精度小数型 '乱数を利用するためのおまじない Randomize MsgBox "頭の体操です。 表示する数の3倍をタイプしてください" 'スコアとタイマーのセット score = 0 mytime = Timer

  8. '制限時間になるまで操作を続ける While Timer < mytime + 30 '問題の提示と回答のチェック、正解数のカウント suuji = Int(Rnd * 1000) answer = InputBox("問題:" & suuji & "の3倍は?") If answer = suuji * 3 Then score = score + 1 Else MsgBox "間違い" End If Wend

  9. ' 終了と得点の表示、講評つき If score > 20 Then MsgBox "正解数" & score & "個。よく出来ました。" ElseIf score > 10 Then MsgBox "正解数" & score & "個。まあまあやね" Else MsgBox "正解数" & score & "個。頑張りましょう" End If End Sub

  10. バージョン2 •  足し算、掛け算、引き算を計算させたい •  乱数で第一変数を発生 •  乱数で第二変数を発生 •  乱数で演算を発生 •  引き算のときは、答えが負にならないように工夫しよう。 • 20問出題して、正解数と、何秒で計算したかを計りましょう。

  11. 問題の生成部分を変更 Dim x As Integer Dim y As Integer Dim enzan As Integer Dim score As Integer Dim answer As Integer Dim mytime As Single Dim count As Integer ’20問出すためのカウンタ

  12. 演算と2つの変数をランダムに生成 enzan = Int(Rnd * 3) x = Int(Rnd * 8 + 2) y = Int(Rnd * 8 + 2) enzanが0なら足し算、1なら掛け算、2なら引き算をさせましょう。 それについては次のページ 変数が0や1だとやさしすぎるので、2以上にしてあります

  13. If enzan = 0 Then answer = InputBox("問題:" & x & "+" & y & "= ?") If answer = x + y Then score = score + 1 Else MsgBox "間違い" End If ElseIf enzan = 1 Then answer = InputBox("問題:" & x & "*" & y & "= ?") If answer = x * y Then score = score + 1 Else MsgBox "間違い" End If Else answer = InputBox("問題:" & x + y & "-" & y & "= ?") If answer = x Then score = score + 1 Else MsgBox "間違い" End If End If

  14. If enzan = 0 Then answer = InputBox("問題:" & x & "+" & y & "= ?") If answer = x + y Then score = score + 1 Else MsgBox "間違い" End If ElseIf enzan = 1 Then answer = InputBox("問題:" & x & "*" & y & "= ?") If answer = x * y Then score = score + 1 Else MsgBox "間違い" End If Else answer = InputBox("問題:" & x + y & "-" & y & "= ?") If answer = x Then score = score + 1 Else MsgBox "間違い" End If End If For count = 1 To20 enzan = Int(Rnd * 3) hensu1 = Int(Rnd * 8 + 2) hensu2 = Int(Rnd * 8 + 2) Next count mytime = Timer - mytime MsgBox “正解数” & score & “個。” & “時間” &mytime & "秒"

More Related