敵を倒す処理実装
もうラストです。敵をクリックしたら得点を加算する処理を実装します。
以下のメソッドをメイン画面(F_Main)に追加します。
' 敵クリックイベント
Public Sub EnmOnClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
' 得点の加算(それぞれの敵の得点を取得する。)
L_Sum.Text = CInt(L_Sum.Text) + CType(sender, CEnemy).GetTokuten
' 敵を倒したイベント(再度敵を出現させる)
Call CType(sender, CEnemy).EnemyDown()
End Sub
このクリック処理をすでに実装したスタートボタンのクリックイベント(B_Start_Click)に実装します。
' スタートボタンクリック
Private Sub B_Start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Start.Click
' スタートボタンを使えなくする
B_Start.Enabled = False
' 敵の作成
Dim i As Integer
' 敵を10体生成します
For i = 0 To 9
' 配列に敵クラスを生成します。その際にオーナーのパネルとランダム変数を渡します。
_enemies.Add(New CEnemy(Me.P_Enemy, _rnd))
' 敵のクリックイベント(倒すイベント)
AddHandler CType(_enemies(i), CEnemy).OnClick, AddressOf EnmOnClick
' ループの中でDoEventsを呼んでおく
System.Windows.Forms.Application.DoEvents()
Next
' タイマーのスタート
T_Enemy.Enabled = True
T_Jikan.Enabled = True
End Sub
これでほぼ完成です。
最後に初級・中級・上級の処理を書きましょう。
ちなみに以下の処理の役割をまとめましょう。
敵の数 | スタートボタンクリック時のループの回数。 |
敵の動くスピード | タイマー(T_Enemy)のインターバル。 |
敵の動く範囲 | パネル(P_Enemy)の大きさ。 |
残り時間 | プログレスバー(PG_Jikan)の値。 |
この値を設定することで難易度を変更します。
メイン画面(F_Main)の先頭に以下のプロパティを追加します。
Public Property Enms As Integer ' 敵の数
Public Property EnmTim As Integer ' 敵の動くスピード(秒数)
Public Property GmTim As Integer ' 残り時間(秒数)
さらに初期化するメソッドを追加します。
メイン画面(F_Main)の先頭に以下のメソッドを追加します。
' 難易度初期化
Public Sub FrmIni()
' フォームのサイズでコントロールを配置する
P_Enemy.Height = Me.Height - P_Enemy.Top - 45
P_Enemy.Width = Me.Width - 40
' 合計得点
L_Sum.Text = "0"
' 敵の動くスピード
T_Enemy.Interval = EnmTim
' 残り時間の初期化
PG_Jikan.Maximum = (GmTim / 1000)
PG_Jikan.Value = PG_Jikan.Maximum
End Sub
P_Enemy.TopとP_Enemy.Leftはフォームとパネル次第ですので調整してください。
次にスタートボタンクリックイベントのループの回数を変更します。
' スタートボタンクリック
Private Sub B_Start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Start.Click
' スタートボタンを使えなくする
B_Start.Enabled = False
' 敵の作成
Dim i As Integer
' 敵を10体生成します
For i = 0 To Enms - 1
' 配列に敵クラスを生成します。その際にオーナーのパネルとランダム変数を渡します。
_enemies.Add(New CEnemy(Me.P_Enemy, _rnd))
' 敵のクリックイベント(倒すイベント)
AddHandler CType(_enemies(i), CEnemy).OnClick, AddressOf EnmOnClick
' ループの中でDoEventsを呼んでおく
System.Windows.Forms.Application.DoEvents()
Next
' タイマーのスタート
T_Enemy.Enabled = True
T_Jikan.Enabled = True
End Sub
最後にメニュー画面(F_Menu)に戻って初級・中級・上級ボタンのクリックイベントに難易度を設定します。
とりあえず以下のように難易度を設定してみました。
' 初級ボタンクリック
Private Sub B_Syokyu_Click(sender As Object, e As EventArgs) Handles B_Syokyu.Click
F_Main.Height = 400 ' フォームの高さ
F_Main.Width = 400 ' フォームの幅
F_Main.EnmTim = 1000 ' 敵の動く速度
F_Main.Enms = 20 ' 敵の数
F_Main.GmTim = 10000 ' 制限時間
F_Main.FrmIni() ' 難易度初期化
F_Main.Show()
Me.Hide()
End Sub
' 中級ボタンクリック
Private Sub B_Chukyu_Click(sender As Object, e As EventArgs) Handles B_Chukyu.Click
F_Main.Height = 500 ' フォームの高さ
F_Main.Width = 700 ' フォームの幅
F_Main.EnmTim = 800 ' 敵の動く速度
F_Main.Enms = 30 ' 敵の数
F_Main.GmTim = 15000 ' 制限時間
F_Main.FrmIni() ' 難易度初期化
F_Main.Show()
Me.Hide()
End Sub
' 上級ボタンクリック
Private Sub B_Jyokyu_Click(sender As Object, e As EventArgs) Handles B_Jyokyu.Click
F_Main.Height = 600 ' フォームの高さ
F_Main.Width = 800 ' フォームの幅
F_Main.EnmTim = 300 ' 敵の動く速度
F_Main.Enms = 40 ' 敵の数
F_Main.GmTim = 20000 ' 制限時間
F_Main.FrmIni() ' 難易度初期化
F_Main.Show()
Me.Hide()
End Sub
以上で、全て完成です。実行して正しく動くかどうか確認しましょう。
お疲れ様でした。
あまりにも敵の数が多すぎて、動く速度が早い場合など
正常に動かなくなりますので、適正な難易度を設定してください。
\オススメ/
リンク
リンク
リンク
コメント