Download presentation
Presentation is loading. Please wait.
Published byΑνατόλιος Μιχαλολιάκος Modified 約 6 年前
1
実例で学ぶプログラミング VBAを用いて簡単なゲームを作ろう 徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野
2
ゲームのプロットを作る 頭の体操 バージョン1 バージョン2 あなたのバージョン?? 計算式もしくはクイズを表示する ユーザは回答を行う
計算式もしくはクイズを表示する ユーザは回答を行う 正しく回答した数を競う バージョン1 計算: 表示した数の3倍を計算 バージョン2 足し算、引き算、掛け算を計算 あなたのバージョン??
3
アルゴリズムと流れ図を考える ゲーム開始 タイムカウンタセット 問題提示 回答取り込み No 正解かどうか 間違い表示 Yes
正解数を1増やす タイムアップか No Yes 得点の表示をして終了
4
必要な機能を探そう 問題を生成する 問題の表示と回答の取り込み 正解の判定と正誤表示 タイムカウンタの作成 3桁の数をランダムに生成する
問題を生成する 3桁の数をランダムに生成する Rnd関数を利用します 問題の表示と回答の取り込み InputBoxで出来る 正解の判定と正誤表示 If 文と MsgBoxで出来る タイムカウンタの作成 Timerという関数(オブジェクト)があります
5
乱数とタイムカウンタ Rnd Timer 呼び出すごとに1未満0以上の実数(実際は16桁の小数)をランダムに発生するオブジェクト
プログラムの最初にRandomizeとおまじないを書いておく必要がある Timer その日の午前0時から現在何秒たったかを示すオブジェクト
6
整数をランダムに出そう 実数の整数部分を計算する関数(切捨て操作) 1000未満の整数をランダムに出すには 3未満だったら Int()
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 > Then MsgBox "正解数" & score & "個。よく出来ました。" ElseIf score > Then MsgBox "正解数" & score & "個。まあまあやね" Else MsgBox "正解数" & score & "個。頑張りましょう" End If End Sub
10
バージョン2 足し算、掛け算、引き算を計算させたい 20問出題して、正解数と、何秒で計算したかを計りましょう。 乱数で第一変数を発生
足し算、掛け算、引き算を計算させたい 乱数で第一変数を発生 乱数で第二変数を発生 乱数で演算を発生 引き算のときは、答えが負にならないように工夫しよう。 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 answer = InputBox("問題:" & x + y & "-" & y & "= ?") If answer = x Then score = score + 1 Else MsgBox "間違い"
14
MsgBox “正解数” & score & “個。” & “時間” & mytime & "秒"
For count = 1 To 20 enzan = Int(Rnd * 3) hensu1 = Int(Rnd * 8 + 2) hensu2 = Int(Rnd * 8 + 2) Next count mytime = Timer - mytime MsgBox “正解数” & score & “個。” & “時間” & mytime & "秒" 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 answer = InputBox("問題:" & x + y & "-" & y & "= ?") If answer = x Then score = score + 1 Else MsgBox "間違い"
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.