プログラムの概要
壁が迫り来る不思議な空間の オリジナルゲーム『ブロックパ ニック』を作成する。 スタートボタンをクリックし 上下左右の矢印キーで白猿を 移動させる。 スペースキーを押すと、向いて 居る方向の壁が後退する。左右 の壁が合わさると、ゲームは終 了する。 一般的に、実用プログラムに比 較するとゲームプログラムは、 高度なテクニックを要求され る事が多い。 此処では、ゲームプログラムを作成する事に依り、楽しみ乍ら、プログラムの制作手順を習得する事を 目的として居る。 制作手順としては、実際の作業過程に従い、段階的に機能を追加する方法を採用して居る。 此のプログラムを土台に、更に、各自で機能を追加して行く事が望まれる。ブロック パニック
VB 2005 ⑨ □ アプリケーション画面のデザイン(標準コントロールの利用) □ プログラムの動作原理(イベント駆動型のプログラム) □ プログラムの構成要素(オブジェクトとプロパティ) □ 値の代入(変数、オブジェクトのプロパティ) □ 条件に応じた処理(If 文の利用) □ 値に応じた処理(Select 文の利用) □ 自動的に行われる処理(タイマーの利用) 今回の課題項目コントロールの種類 プロパティ プロパティの設定値 フォーム Name block BackGroundImage block.gif Text ブロック パニック パネル Name pnlRoom Size 600, 300 BackGroundImage back.jpg ラベル1 Name lblTitle AutoSize True BackColor Transparent Font HG 創英角ポップ体、太字、20 ForeColor Yellow
Text Block Panic
ラベル2 Name lblTime AutoSize False BackColor Transparent Font HG 創英角ポップ体、太字、18 ForeColor Yellow TextAlign MiddleRight ピクチャボックス パネル ラベル2 タイマー ボタン ラベル1
オ
オ
ブ
ブ
ジ
ジ
ェ
ェ
ク
ク
ト
ト
・
・
プ
プ
ロ
ロ
パ
パ
テ
テ
ィ
ィ
一
一
覧
覧
コントロールの種類 プロパティ プロパティの設定値 ピクチャボックス Name picMan BackColor Transparent Image up.gif Location 300, 150 Size 30, 32 ボタン Name btnStart Font HG 創英角ポップ体、太字、14 Text START!! タイマー Name tmrMove Interval 300 使用コントロール フォーム アプリケーションウィンドウ、又は、ダイアログボックスと成るウィンドウの事を謂う。フォ ームには、コントロールを配置し、フォームとコントロールに関連したプロパティを設定した り、コードを記述する。 ピクチャーボックス ビットマップ、アイコン、メタファイル、JPEG ファイル、GIF フィル等の画像を表示する コントロール。従来の様に描画メソッドを用いて描画する事は出来ない。 ラベル テキストを表示するコントロール。此のテキストは、ユーザーが直接入力したり変更したりす る事は出来ない。 パネル 他のコントロールを内包するコンテナに成る事が出来るコントロール。コントロールのグルー プ分けする場合等に使用する。 ボタン ユーザーが選択したコマンド(命令)や操作を実行するコントロール。OKボタンや実行ボタ ン等、処理の開始や中断・終了の合図に用いられ、最も良く利用される。 タイマー 一定の時間間隔でイベントが発生する様にするコントロール。一定時間毎にプログラムを実行 したい時に使用する。此のコントロールは、実行時には表示されない。
Public Class block
Private B( 19 ), CX, CY, DR As Integer Private P( 19 ) As PictureBox Private G( 3 ) As Bitmap Private TM As DateTime ' フォームが読み込まれた時の処理
Private Sub block_Load( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles MyBase.Load For I As Integer = 0 To 19 B( I ) = 0 P( I ) = New PictureBox( ) With P( I )
.Size = New Size( 600, 30 ) .Image = Me.BackgroundImage .Top = ( I Mod 10 ) * 30 .Left = IIf( I < 10, ( B( I ) - 20 ) * 30, 600 - B( I ) * 30 ) .Visible = True End With Me.pnlRoom.Controls.Add( P( I )) Next
G( 0 ) = New Bitmap( "left.gif" ) : G( 1 ) = New Bitmap( "right.gif" ) G( 2 ) = New Bitmap( "up.gif" ) : G( 3 ) = New Bitmap( "down.gif" ) pnlRoom.Refresh( ) End Sub ' ボタン(スタート)がクリックされた時の処理
Private Sub btnStart_Click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles btnStart.Click For I As Integer = 0 To 19 B( I ) = 0 : P( I ).Left = IIf( I < 10, ( B( I ) - 20) * 30, 600 - B ( I ) * 30 ) Next CX = 10 : CY = 5 : DR = 3
picMan.Location = New Point( CX * 30, CY * 30 ) : TM = DateTime.Now Me.KeyPreview = True : btnStart.Enabled = False : tmrMove.Enabled = True End Sub
プ
プ
ロ
ロ
グ
グ
ラ
ラ
ム
ム
リ
リ
ス
ス
ト
ト
1 コード記述画面を表示して左記の コードを入力する。 2 フォーム上のコントロール を配置して居ない処をダブルクリ ックして、コード画面を表示し、 左記のコードを入力する。 3 デ ザ イ ン 画 面 で、ボタン を ダ ブ ル ク リ ッ ク して、コー ド 画 面 を 表示し、左 記 の コ ー ド を 入 力 する。' キー入力が為された時の処理
Private Sub block_KeyDown( ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs ) Handles Me.KeyDown
Dim F As Boolean = False
Select Case e.KeyCode Case Keys.Up DR = 2 : If CY > 0 Then CY -= 1 : F = True Case Keys.Down DR = 3 : If CY < 9 Then CY += 1 : F = True Case Keys.Left DR = 0 : If CX > B( CY ) Then CX -= 1 : F = True Case Keys.Right DR = 1 : If CX < 19 - B( CY + 10 ) Then CX += 1 : F = True Case Keys.Space If DR = 0 Then B( CY ) -= 1 : P( CY ).Left = ( B( CY ) - 20 ) * 30 ElseIf DR = 1 Then B( CY + 10 ) -= 1 : P( CY + 10 ).Left = 600 - B( CY + 10 ) * 30 End If End Select
picMan.Image = G( DR ) : If F Then picMan.Location = New Point( CX * 30, CY * 30 ) End Sub
' タイマーが一定間隔で行う処理
Private Sub tmrMove_Tick( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles tmrMove.Tick
Dim R1, R2 As Integer
Do : R1 = Int( Rnd( ) * 10 ) : Loop While R1 = CY B( R1 ) += 1 : P( R1 ).Left = ( B( R1 ) – 20 ) * 30
Do : R2 = Int( Rnd( ) * 10 + 10 ) : Loop While R2 - 10 = CY B( R2 ) += 1 : P( R2 ).Left = 600 - B( R2 ) * 30
lblTime.Text = ( DateTime.Now - TM ).ToString( )
If B( R1 ) + B( R1 + 10 ) = 20 Or B(R2) + B(R2 – 10 ) = 20 Then
tmrMove.Enabled = False : Me.KeyPreview = False : btnStart.Enabled = True MsgBox( "Game Over" )
End If End Sub End Class 4 デザイン画面で、イベン ト画面に切り替える。其 の後、KeyDown の項目 をダブルクリックして、 コード記述画面を表示 し、下記のコードを入力 する。 5 デザイン画面で、タイマーを ダブルクリックして、コード 画面を表示し、左記のコード を入力する。