ランボール きょうつうへんすうせんげん 共通の変数を宣言する ひょうじ 1. ソリューションエクスプローラで コードの表示をクリックする つぎひょうじところしたかこにゅうりょく 2. 次のコードが表示されるので 1の所に 下の囲いのコードを入力する Imports System.Runtime.InteropServices Public Class runball にゅうりょく 1 ここに入力する! End Class <DllImport("user32")> Shared Function GetAsyncKeyState( _ ByVal vkey As Keys) As Short End Function Private Bm(6) As Bitmap Private Gr As Graphics Private Bx, By As Double Private Dx, Dy As Double Private Ex, Ey As Double Private Life, Scr, Cnt As Integer Private Item(4), Appr(4) As Integer がぞうよこえかじゅんび 画像を読み込み 絵を描く準備をする がめん 1. デザイン画面で フォームをダブルクリックする つぎひょうじところしたかこにゅうりょく 2. 次のコードが表示されるので 2の所に 下の囲いのコードを入力する Private Sub runball_load(byval sender As Sym System.EventArgs) Handles MyBase.Load にゅうりょく 2 ここに入力する! End Sub -1-
Dim P As String = Application.StartupPath If Not P.EndsWith(" ") Then P &= " " Bm(0) = New Bitmap(P & "ball.gif") Bm(1) = New Bitmap(P & "enamy.gif") Bm(2) = New Bitmap(P & "coin.gif") Bm(3) = New Bitmap(P & "diamond.gif") Bm(4) = New Bitmap(P & "potion.gif") Bm(5) = New Bitmap(P & "star.gif") Bm(6) = New Bitmap(P & "clock.gif") With p icdisp.image = New Bitmap(.Width,.Height) Gr = Graphics.FromImage(.Image) End With Gr.Clear(Color.Black) ようときはじ スタート用のラベルをクリックした時 ゲームが始まる がめん 1. デザイン画面で ラベル をダブルクリックする つぎひょうじところしたかこなかにゅうりょく 2. 次のコードが表示されるので 3の所に 下の囲いの中のコードを入力する Private Sub lblstart_click(byval sender As As System.EventArgs) Handles lblstart.click にゅうりょく 3 ここに入力する! End Sub If Not lblstart.text = "START" Then Exit Sub lblstart.text = "PUSH X TO FINISH" Me.ControlBox = False Application.DoEvents( ) Call Game( ) lblstart.text = "START" Me.ControlBox = True じてんぎょうなみせんでこの時点ではこの行に波線が出る ようつく ゲーム用のジェネラルプロシージャを作る がめんじょうきしたしたかこなかにゅうりょく 1. コード画面で 上記のコードブロックの下に 下の囲いの中のコードを入力する Private Sub Game( ) 4 ここに追加して行く!! End Sub -2-
じょうきにゅうりょくおじどうてきにゅうりょく 上記では Private Sub Game( ) と入力して エンターキーを押すと End Sub は自動的に入力 される しようへんすうせんげん ゲームループで使用する変数を宣言する 1. 上の4の所に 下の囲いの中のコードを入力する Dim X, Y As Integer Dim T As DateTime Dim Rn As Random = New Random( ) Dim Pb, Pe, Pi(4) As Point Dim Rb, Re, Ri(4) As Rectangle ' 5 ここに追加して行く!! しょきがめんひょうじを表示する 初期画面 1. 上の5の所に 下の囲いの中のコードを入力する Gr.Clear(Color.Black) Bx = 10.0 : By = 10.0 X = System.Convert.ToInt32(Math.Truncate(Bx + 0.5)) Y = System.Convert.ToInt32(Math.Truncate(By + 0.5)) Gr.DrawImage(Bm(0), X, Y) Ex = 558.0-16.0 : Ey = 358.0-16.0 X = System.Convert.ToInt32(Math.Truncate(Ex + 0.5)) Y = System.Convert.ToInt32(Math.Truncate(Ey + 0.5)) Gr.DrawImage(Bm(1), X, Y) picdisp.refresh( ) ' 6 ここに追加して行く!! つく ゲームループを作る 1. 上の6の所に 下の囲いの中のコードを入力する Do T = DateTime.Now ' 7 ここに追加して行く!! Do While T.AddMilliseconds(10) > DateTime.Now Application.DoEvents() Loop Loop -3-
じょうきさいそくびょうびょうひとまわりさくせいほうほう 上記で 1 サイクル最速 50 ミリ秒 (0.05 秒 ) で一回するループを作成した この方法を ポーリ ほうしきいつくいっぱんてきほうほうング方式と言い リアルタイムゲームを作る一般的な方法である ループを強制脱出 きょうせいだっしゅつほうほうよういする方法を用意する 1. 上の7の所に 下の囲いの中のコードを入力する しゅうりょう ' 終了 If GetAsyncKeyState(Keys.X) < 0 Then Exit Do ' 8 ここに追加して行く!! やじるしじょうげ 矢印キーでキャラクタを上下左右 さゆうに動 うごかす 1. 上の8の所に 下の囲いの中のコードを入力する いどうにゅうりょく ' 移動キー入力 If GetAsyncKeyState(Keys.Up) < 0 Then Dy -= 0.1 : If Dy < -5.0 Then Dy = -5.0 If GetAsyncKeyState(Keys.Down) < 0 Then Dy += 0.1 : If Dy > 5.0 Then Dy = 5.0 If GetAsyncKeyState(Keys.Left) < 0 Then Dx -= 0.1 : If Dx < -5.0 Then Dx = -5.0 If GetAsyncKeyState(Keys.Right) < 0 Then Dx += 0.1 : If Dx > 5.0 Then Dx = 5.0 いどう ' ボール移動 Bx += Dx If Bx > 599 Then Bx = -31 If Bx < -31 Then Bx = 599 By += Dy If By > 399 Then By = -31 If By < -31 Then -4-
By = 399 Gr.Clear(Color.Black) X = System.Convert.ToInt32(Math.Truncate(Bx + 0.5)) Y = System.Convert.ToInt32(Math.Truncate(By + 0.5)) Gr.DrawImage(Bm(0), X, Y) Pb = New Point(X + 16, Y + 16) Rb = New Rectangle(X, Y, 32, 32) ' 9 ここに追加して行く!! てきうご 敵を動かす 1. 上の9の所に 下の囲いの中のコードを入力する いどう ' エネミー移動 If Ex < Bx Then Ex += Math.Abs(Dx) Ex -= Math.Abs(Dx) If Ey < By Then Ey += Math.Abs(Dy) Ey -= Math.Abs(Dy) X = System.Convert.ToInt32(Math.Truncate(Ex + 0.5)) Y = System.Convert.ToInt32(Math.Truncate(Ey + 0.5)) Gr.DrawImage(Bm(1), X, Y) Pe = New Point(X + 16, Y + 16) Re = New Rectangle(X, Y, 32, 32) ' 10 ここに追加して行く!! しょうとつはんてい 衝突を判定する 1. 上の10の所に 下の囲いの中のコードを入力する しょうとつ ' 衝突 If Rb.Contains(Pe) Then Exit Do ' 11 ここに追加して行く!! -5-
がめんさいびょうが 画面を再描画する 1. 上の11の所に 下の囲いの中のコードを入力する picdisp.refresh( ) てきつねおかくようへんこう 敵が常に追い掛けて来る様に変更する うえにゅうりょくところしたかこなかへんこう 1. 上の9で入力した所を 下の囲いの中のコードに変更する いどう ' エネミー移動 If Ex < Bx Then へんこう If Dx = 0 Then ' ========== 変更 ( ここから )========== Ex += 1 Ex += Math.Abs(Dx) If Dx = 0 Then Ex -= 1 Ex -= Math.Abs(Dx) If Ey < By Then If Dy = 0 Then Ey += 1 Ey += Math.Abs(Dy) If Dy = 0 Then Ey -= 1 Ey -= Math.Abs(Dy) へんこう ' ========== 変更 ( ここ迄 )========== X = System.Convert.ToInt32(Math.Truncate(Ex + 0.5)) Y = System.Convert.ToInt32(Math.Truncate(Ey + 0.5)) Gr.DrawImage(Bm(1), X, Y) Pe = New Point(X + 16, Y + 16) Re = New Rectangle(X, Y, 32, 32) -6-
しょきとくてんせいめいひょうじと生命を表示する 初期得点 ようしたかこなかにゅうりょく 1. ゲーム用ジェネラルプロシージャの変数宣言の後 (5) に 下の囲いの中のコードを入力する せいめいとくてんしょきか ' 生命 得点 カウントの初期化 Life = 3 : Scr = 0 : Cnt = 0 lbllife.text = Life.ToString( ) lblscr.text = Scr.ToString( ) しゅつげん アイテムを出現させる 1. 上の2の所 ( フォームの Load イベントプロシージャ ) に 下の囲いの中のコードを入力する しゅつげんりつせってい ' 出現率の設定 Appr(0) = 10 Appr(1) = 100 Appr(2) = 200 Appr(3) = 300 Appr(4) = 100 うえところようしたかこなかにゅうりょく 2. 上の11の所 ( ゲーム用ジェネラルプロシージャ ) に 下の囲いの中のコードを入力する しゅつげん ' アイテム出現 For I As Integer = 0 To 3 If Item(I) = 0 Then If Rn.Next(Appr(I)) = 1 Then X = Rn.Next(600-32) Y = Rn.Next(400-32) Pi(I) = New Point(X, Y) Ri(I) = New Rectangle(X, Y, 32, 32) Item(I) = 1 Gr.DrawImage(Bm(I + 2), Pi(I).X, Pi(I).Y) Item(I) += 1 If Item(I) > 1000 Then Item(I) = 0 Next しょうとつはんていしょうとつせいめいへようへんこう 衝突の判定で 衝突すると生命が減る様に変更する うえところしょうとつはんていところしたかこなかにゅうりょく 1. 上の10の所 ( 衝突の判定の所 ) に 下の囲いの中のコードを入力する -7-
しょうとつ ' 衝突 If Rb.Contains(Pe) Then Life -= 1 lbllife.text = Life.ToString( ) If Life < 1 Then Exit Do Bx = 10.0 : By = 10.0 : Dx = 0.0 : Dy = 0.0 Ex = 590.0-32.0 : Ey = 390.0-32.0 しゅとくついか アイテム取得を追加する うえところしゅつげんあとしたかこなかにゅうりょく 1. 上の11の所 ( アイテム出現の後 ) に 下の囲いの中のコードを入力する しゅとく ' アイテム取得 If Ri(0).Contains(Pb) Then ' コイン Item(0) = 0 Scr += 10 lblscr.text = Scr.ToString( ) If Ri(1).Contains(Pb) Then ' ダイアモンド Item(1) = 0 Scr += 100 lblscr.text = Scr.ToString( ) If Ri(2).Contains(Pb) Then ' ポーション Item(2) = 0 If Life < 3 Then Life += 1 lbllife.text = Life.ToString( ) If Ri(3).Contains(Pb) Then ' スター Item(3) = 0 じゆうさくせいたといっていじかん ' 自由に作成 ( 例えば 一定時間無敵 むてき ) -8-
If Ri(4).Contains(Pb) Then ' クロック Item(4) = 0 じゆうさくせいたとてきどうさ ' 自由に作成 ( 例えば 敵動作停止 ていし ) -9-