バスケットボール きょうつうへんすうせんげん 共通の変数を宣言する ひょうじ 1. ソリューションエクスプローラで コードの表示をクリックする つぎひょうじところしたかこにゅうりょく 2. 次のコードが表示されるので 1の所に 下の囲いのコードを入力する Imports System.Runtime.InteropServices Public Class Basketball にゅうりょく 1 ここに入力する! End Class <DllImport("user32")> Shared Function GetAsyncKeyState( _ ByVal vkey As Keys) As Short End Function Private Bm(5) As Bitmap Private Gb, Gf As Graphics Private Px, Py As Integer Private Bx, By As Integer ' プレイヤ座標 ' ボール座標 がぞうよこえかじゅんびしょきがめんびょうが 画像を読み込み 絵を描く準備をして 初期画面を描画する がめん 1. デザイン画面で フォームをダブルクリックする つぎひょうじところしたかこにゅうりょく 2. 次のコードが表示されるので 2の所に 下の囲いのコードを入力する Private Sub Basketball_Load(ByVal sender As msystem.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 & "basket.gif") Bm(2) = New Bitmap(P & "player1.png") Bm(3) = New Bitmap(P & "player2.png") Bm(4) = New Bitmap(P & "player3.png") Bm(5) = New Bitmap(P & "score.gif") びょうがようせいせい ' 描画用 Graphics オブジェクトの生成 With picdisp.backgroundimage = New Bitmap(.Width,.Height).Image = New Bitmap(.Width,.Height) Gb = Graphics.FromImage(.BackgroundImage) Gf = Graphics.FromImage(.Image) End With がめんしょきびょうがの初期描画 ' 画面 Gb.Clear(Color.FromArgb(192, 192, 96)) Gb.FillRectangle(Brushes.Brown, 0, 543, 1000, 17) Gb.FillRectangle(Brushes.White, 600, 543, 30, 10) Gb.DrawImage(Bm(1), 940, 100) しょきびょうが ' ボールの初期描画 Bx = 120 : By = 420 Gf.DrawImage(Bm(0), Bx, By) しょきびょうが ' プレイヤの初期描画 Px = 10 : Py = 260 Gf.DrawImage(Bm(2), Px, Py) ようときはじ スタート用のラベルをクリックした時 ゲームが始まる がめん 1. デザイン画面で ラベル をダブルクリックする つぎひょうじところしたかこなかにゅうりょく 2. 次のコードが表示されるので 3の所に 下の囲いの中のコードを入力する Private Sub btnstart_click(byval sender As As System.EventArgs) Handles btnstart.click にゅうりょく 3 ここに入力する! End Sub -2-
btnstart.enabled = False Bx = 120 : By = 420 Px = 10 : Py = 260 Call Game( ) btnstart.enabled = True じてんぎょうなみせんでこの時点ではこの行に波線が出る ようつく ゲーム用のジェネラルプロシージャを作る がめんじょうきしたしたかこなかにゅうりょく 1. コード画面で 上記のコードブロックの下に 下の囲いの中のコードを入力する Private Sub Game( ) 4 ここに追加して行く!! End Sub じょうきにゅうりょくおじどうてき 上記では Private Sub Game( ) と入力して エンターキーを押すと End Sub は自動的に にゅうりょく入力される しようへんすうせんげん ゲームループで使用する変数を宣言する 1. 上の4の所に 下の囲いの中のコードを入力する Dim V0 As Single Dim V As Single = 0.0F Dim T As Single = 0.0F Dim G As Single = 0.98F Dim X As Single Dim Y As Single Dim P As Point Dim R As Rectangle Dim St As Integer Dim B As Bitmap Dim F As Boolean Dim Tim As DateTime しょそくど ' 初速度 そくど ' 速度 けいかじかん ' 経過時間 じゅうりょくかそくど ' 重力加速度 ' ボール X 座標 ' ボール Y 座標 い ちはんていよう Point ' 位置判定用 いちはんていよう ' 位置判定用 Rectangle じょうたいかこうじょうしょう ' 状態 (0: 下降 1: 上昇 2: シュート ) びょうがよう ' プレイヤ描画用 Bitmap じかこう ' シュート時下降フラグ どうきよう ' 同期用 Datetime ' 5 ここに追加して行く!! -3-
へんすうしょきの初期 変数 か化を行う 1. 上の5の所に 下の囲いの中のコードを入力する V0 = 10.0F : St = 0 X = Single.Parse(Bx) Y = Single.Parse(By) B = Bm(2) : F = False ' 6 ここに追加して行く!! つく ゲームループを作る 1. 上の6の所に 下の囲いの中のコードを入力する Do T = DateTime.Now ' 7 ここに追加して行く!! Do While T.AddMilliseconds(50) > DateTime.Now Application.DoEvents( ) Loop Loop じょうきさいそくびょうびょうひとまわりさくせいほうほう 上記で 1 サイクル最速 50 ミリ秒 (0.05 秒 ) で一回するループを作成した この方法を ポ ほうしきいつくいっぱんてきほうほうーリング方式と言い リアルタイムゲームを作る一般的な方法である ループを強制脱出 きょうせいだっしゅつほうほうよういする方法を用意する 1. 上の7の所に 下の囲いの中のコードを入力する しゅうりょう ' 終了 If GetAsyncKeyState(Keys.X) < 0 Then Exit Do ' 8 ここに追加して行く!! やじるしさゆううご 矢印キーでキャラクタを左右に動かす 1. 上の8の所に 下の囲いの中のコードを入力する いどうにゅうりょく ' 移動キー入力 If GetAsyncKeyState(Keys.Left) < 0 Then Px -= 15 : If Px < 0 Then Px = 0-4-
If GetAsyncKeyState(Keys.Right) < 0 Then Px += 15 : If Px > 850 Then Px = 850 ' 9 ここに追加して行く!! うご ボールを動かす 1. 上の9の所に 下の囲いの中のコードを入力する いどう ' ボール移動 T += 0.5F Select Case St Case 0 かこうじ ' 下降時 V = V0 + G * T X += 5 : If X > 1000 Then Exit Do Y = V0 * T + 0.5F * G * T * T + By If Y > 492 Then St = 1 : V0 = V * 0.8 : T = 0.0F Case 1 じょうしょうじ ' 上昇時 V = V0 - G * T X += 5 : If X > 1000 Then Exit Do Y = 492 - (V0 * T - 0.5F * G * T * T) P = New Point(X + 25, Y) R = New Rectangle(Px + 120, Py + 160, 26, 16) If R.Contains(P) Then If Px >= 600 Then B = Bm(3) : Gf.DrawImage(B, Px, Py) : picdisp.refresh( ) Application.DoEvents( ) System.Threading.Thread.Sleep(500) B = Bm(4) : Gf.DrawImage(B, Px, Py) : picdisp.refresh( ) St = 2 : V0 = 22.0F : T = 0.0F : By = Y Bx = Px + 107 : By = Py - 20 : X = Bx : Y = By Else St = 0 : V0 = 10.0F : T = 0.0F : By = Y ElseIf V < 0.0F Then St = 0 : V0 = 0.0F : T = 0.0F : By = Y -5-
Case Else じ ' シュート時 V = V0 - G * T : If V < 0.0F Then F = True X += 3 : If X > 1000 Then Exit Do Y = By - (V0 * T - 0.5F * G * T * T) If F AndAlso (X > 940.0F AndAlso X < 950.0F) _ AndAlso (Y > 50.0F AndAlso Y < 80.0F) Then MessageBox.Show(" ゴ ~~~~~~ ル!!!") Exit Do End Select ' 10 ここに追加して行く!! がめんさいびょうが 画面を再描画する 1. 上の10の所に 下の囲いの中のコードを入力する びょうが ' プレイヤとボールの描画 Gf.DrawImage(Bm(0), _ Integer.Parse(Math.Truncate(X + 0.5F)), Integer.Parse(Math.Truncate(Y + 0.5F))) Gf.DrawImage(B, Px, Py) picdisp.refresh( ) こんごかだい 今後の課題 はやちょうせい 1. ドリブルやシュートの速さを調整する ぽんうちなんかいはいきそとくてんひょうじ 2.10 本シュートして その内 何回入ったかを競うゲームにする 得点表示も行 おこなう -6-