...

資料を見る

by user

on
Category: Documents
17

views

Report

Comments

Transcript

資料を見る
まだ、設定は反映されませんね
さて、ユーザーからの入力を受け付けても、レジストリに格納するまでは終わりました。
でも、まだもぐらの出現数は10、出現間隔は1秒(1000ミリ秒)のままです。
どこを変更したらよいでしょうか。
まず、コードの先頭にある Genaral の Declarations 部をリスト3のように変更します。
何度もレジストリからデータを読み込むのはあまりかっこよくないので、cnt_max%と
game_sec%を追加するのです。
リスト3
コードの冒頭、General の Declarations 部のコード。
新たなコードを二つ追加した。
Option Explicit
'++++++ ゲーム数カウント用変数
Dim cnt_max%
'++++++ 現在ゲームカウント用変数
Dim cnt%
'++++++ ゲーム間隔用変数
Dim game_sec%
'++++++ 当たり数用変数
Dim hit%
リスト4
プログラム起動時にレジストリから値を読み込んで、変数に値を格納する
Private Sub Form_Load()
'(17)
Dim i% , d$
'++++++ キャプションの初期設定
Me.Caption = "簡単もぐら叩きゲーム"
For i% = 0 to 8
Command1(i%).Caption = "×"
Next i%
'++++++ ボタン位置変更
Command1(0).Top = 0
Command1(0).Left = 0
Command1(1).Top = 0
Command1(2).Top = 0
Command1(3).Left = 0
-1-
Command1(6).Left = 0
'++++++ 設定されたゲーム数取得と代入
'(18)
d$ = GetSetting( "TUser_Game" , _
"Setting" , "GameCount" , "10" )
cnt_max% = Val(d$)
'++++++ 設定されたゲーム間隔取得と代入
d$ = GetSetting( "TUser_Game" , _
"Setting" , "GameSec" , "1000" )
game_sec% = Val(d$)
End Sub
続いて、プログラムの起動時にレジストリの値を読みとって、今作った変数に値を格納
します(リスト4)。
(17)に文字列型の変数 d$を追加し、(18)でレジストリから値を読み込んで、Val
関数で数値に変換し、リスト3で宣言した cnt_max%と game_sec%に値を格納します。
メニューで出現回数や出現間隔を変更したら、cnt_max%と game_sec%の値を変えまし
ょう。
リスト2(14)の後ろに
cnt_max% = Val(e$)
を、(16)の次に
game_sec% = Val(e$)
を書き加えます。
次にゲーム間隔をゲームに反映させるために、ゲームの開始処理で設定しているタイマ
ー・コントロールの Interval プロパティの設定を「固定(1000)」から変動型にします。
リスト1の
Timer1.Interval = 1000
を
Timer1.Interval = game_sec%
に変更すればオーケーです。
最後に、ゲームの回数のチェックや当たりの率によってメッセージを振り分けている
Timer1_Timer イベントのコードを変更します。(リスト5)
前回 20, 10, 8, 3 という定まった数値を書き込んでいた(19)∼(22)を、cnt_max%
をベースに書き直したわけです。
いや、けっこう大変でしたね。
-2-
リスト5
むぐらの出現回数の変化を Timer1_Timer イベントに反映する。
cnt_max%という変数の参照がポイントである。
Private Sub Timer1_Timer()
(略)
'(19)
If cnt% = cnt_max% * 2 Then
'++++++ ゲーム終了
Timer1.Enabled = False
Me.Caption = "当たりは, " & _
Trim$(Str$(hit$)) & "でした"
'++++++ 当たりの回数によってメッセージを表示
'(20)
If hit% = cnt_max% Then
MsgBox "やったね!完全制覇だ!"
Else If hit% > cnt_max% * 0.8 Then
'(21)
MsgBox "あと少しだよ!次こそがんばってね!"
ElseIf hit% > cnt_max% * 0.3 Then
MsgBox "まだまだだね。
'(22)
がんばらないとね"
(略)
End Sub
もぐらを絵にしよう!
メニュー、レジストリと来ましたが、最後にもぐらを絵にしてみましょう。
○と×では、あまりにも寂しいですよね。
まず、フォームに二つのピクチャ・コントロール(Picture1, Picture2)を貼り付けてくだ
さい。
プロパティ・ウインドウで Picture プロパティの右側に出るボタンを押して「ピクチャ
の読み込み」ダイアログを選び、Picture1 にはもぐらのいない穴の絵(ana.bmp)を、Picture2
にもぐらが穴から顔を出した絵(mogura.bmp)を読み込みます。
続いて AutoSize プロパティを True に(実は AutoSize プロパティは True でも False でも、
今回のプログラムの最終的な動作には支障がありません。
ただ、図7のようにピクチャ・コントロールの大きさと画像の大きさを一致させようと思
ったら、AutoSize プロパティを True にする必要があります。)、Visible プロパティを False
に設定してください。(図7)。
Visible プロパティを False に設定すると、プログラムを実行していないとき(デザイン時)
には見えますが、実行時には見えなくなります。
つまり、今回のピクチャー・コントロールは絵をみせるためでなく、絵を格納するために
使うのです。
今度は、プロパティ・ウインドウを使ってコマンドボタン(Command1)の Style プロパ
-3-
ティをすべて「1(グラフィック)」に変更してください。
(以前説明したように、コードで変更できないプロパティもあります。Style プロパティ
はプロパティ・ウインドウでのみ変更でき、コードでは、値の取り出ししかできないプロ
パティです。)
その上で、Form_Load プロシジャの
Command1(intI%).Caption = "×"
の次に
Command1(intI%).Picture = Picture1.Picture
という行を追加してください。
(このプログラムは Visual Basic 6.0 で作成しています。
旧バージョンのVBでは、コマンドボタンに Picture プロパティがないため、同じように
コードを書くことはできません。
他のコントロールを使えば同等のプログラムを作成することはできますが、今回のコード
とは多くの店が異なってきます。)
これで Picture1 や Picture2 を非表示で用意した理由がわかりましたね。
内部で使う絵を保持する場所としてピクチャーコントロールを使用したのです。
続いて、Timer1_Timer プロシジャでも、
Command1(intI%).Caption = "×"
の次に
Command1(intI%).Picture = Picture1.Picture
を、
Command1(intK%).Caption = "○"
の次に
Command1(intK%).Picture = Picture2.Picture
を追加します。
これで動かしてみてください。
もぐらの絵が出たり消えたりするようになったのではないかと思います。
「もぐらをたたいてボタンごと消えるのは変だな」とか「いちいち全部のボタンが消える
のは変だな」と思いませんでしたか?
ここも変えてみましょう。
たたいた瞬間には、もぐらは頭をひっこめるでしょうから、プログラムとしては、穴の
絵を表示すればよいでしょう。
Command1_Click プロシジャをリスト6のように変更します。
追加したのは、(23)と(24)です。
たたかれたら○を×に変更し、穴の絵に変えます。
Caption を変更したために、連続して当たりのボタンを押された場合を考えなくてよくな
りました。
-4-
リスト6
もぐらをうまくたたいたときに点数を加算し、ボタンのキャプションと画像を
変更するコード
Private Sub Command1_Click( Index As Integer )
'++++++ 当たりチェック
If Command1(Index).Caption = "○" Then
hit% = hit% + 1
Command1(Index).Caption = "×"
'(23)
Command1(Index).Picture = Picture1.Picture
'(24)
End If
End Sub
前回加えた
Command1(Index).Visible = False
という行は削除します。
ボタンを消したり表示したりする必要もなくなりました。
Timer1_Timer プロシジャの中で、
Command1(intI%).Visible = False
と、
For intI% = 0 to 8
Command1(intI%).Visible = True
Next intI%
の行は削除してください。
これで「いちいち全部のボタンが消えるのは変だな」という不満も解消されました。
-5-
Fly UP