プログラムの概要
子供でも出来るカードゲーム『神経 衰弱』です。 画面上の『開始』ボタンをクリック すると、ゲームが開始する。カード を 2 枚クリックして、何回で総てを 揃えられるかを競う。 一般的に、実用プログラムに比較す るとゲームプログラムは、高度なテ クニックを要求される事が多い。 此処では、ゲームプログラムを作成 する事に依り、楽しみ乍ら、プログ ラムの制作手順を習得する事を目的 として居る。 制作手順としては、実際の作業過程 に従い、段階的に機能を追加する方 法を採用して居る。 此のプログラムを土台に、更に、各自で機能を追加して行く事が望まれる。紛らわしい神経衰弱
VB 2005 ⑰ □ アプリケーション画面のデザイン(標準コントロールの利用) □ プログラムの動作原理(イベント駆動型のプログラム) □ プログラムの構成要素(オブジェクトとプロパティ) □ 値の代入(変数、オブジェクトのプロパティ) □ グラフィックスの利用(Graphics オブジェクト) □ 条件に応じた処理(If 文の利用) □ 自動的に行われる処理(タイマーの利用) 今回の課題項目コントロールの種類 プロパティ プロパティの設定値 フォーム Name breakdown FormBorderStyle FixedSingle Size 880, 848 StartPosition CenterScreen Text 紛らわしい神経衰弱 ピクチャボックス1~22 Name picCard00~picCard21 Image back.gif Size 140, 200 ラベル1 Name lblMes BackColor Red Font MS 明朝,、14、太字 ForeColor White Text 空白 TextAlign MiddleCenter ラベル2 Name lblTotal Font MS 明朝,、14、太字 Text 回数:00 回 ボタン Name btnStart Text 開始 ボタン
オ
オ
ブ
ブ
ジ
ジ
ェ
ェ
ク
ク
ト
ト
・
・
プ
プ
ロ
ロ
パ
パ
テ
テ
ィ
ィ
一
一
覧
覧
ラベル2 ラベル1picCard00 picCard01 picCard02 picCard03 picCard04 picCard05 picCard06 picCard07 picCard08 picCard09 picCard10 picCard11 picCard12 picCard13 picCard14 picCard15 picCard16 picCard17 picCard18 picCard19 picCard20 picCard21
ピクチャボックス 22個
Public Class breakdown Private N( ) As String = _
{ "おそ松", "一松", "カラ松", "チョロ松", "トド松", "十四松", _ "ハタ坊", "チビ太", "イヤミ", "トト子", "デカパン"}
Private B( 11 ) As Bitmap
Private C( 21 ), Opn( 1 ), Cnt, Obt As Integer Private P( 21 ) As PictureBox
' ピクチャボックス(カード)がクリックされた時の処理
Private Sub CardClick( ByVal sender As System.Object, ByVal e As System.EventArgs ) If btnStart.Enabled Then Exit Sub
Dim S As PictureBox = DirectCast( sender, PictureBox ) Dim I As Integer = Val( S.Name.Substring( 7, 2 )) If Cnt = 0 Then Opn( 0 ) = I : Cnt = 1 Else If I = Opn( 0 ) Then Exit Sub Else Opn( 1 ) = I : Cnt = 2 End If End If
P( I ).Image = B( C( I )) : lblMes.Text = N( C( I )) : Application.DoEvents( ) If Cnt = 2 Then
lblTotal.Text = "回数:" & (Val(lblTotal.Text.Substring(3, 2)) + 1).ToString("00") & " 回" System.Threading.Thread.Sleep( 2000 )
If C( Opn( 0 )) = C( Opn( 1 )) Then
P( Opn( 0 )).Visible = False : P( Opn( 1 )).Visible = False Obt += 1 : If Obt = 11 Then btnStart.Enabled = True Else
P( Opn( 0 )).Image = B( 11 ) : P( Opn( 1 )).Image = B( 11 ) End If Cnt = 0 End If End Sub ' フォームが読み込まれた時の処理
Private Sub breakdown_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load
' 画像の読込
For I As Integer = 0 To 10
B( I ) = New Bitmap( "char" & I.ToString( "00" ) & ".gif" ) Next
B( 11 ) = New Bitmap( "back.gif" )
' コントロールの配列化とイベントハンドラの追加 For I As Integer = 0 To 21
P( I ) = Me.Controls( "picCard" & I.ToString( "00" )) AddHandler P( I ).Click, AddressOf CardClick Next Randomize( ) End Sub
プ
プ
ロ
ロ
グ
グ
ラ
ラ
ム
ム
リ
リ
ス
ス
ト
ト
1 コード記述画面を表示 して左記のコードを入 力する。 3 フォーム上のコン トロールを配置して居 ない処をダブルクリッ クして、コード画面を 表示し、左記のコード を入力する。 2 上記1と同様に、コー ド 記 述 画 面 を 表 示 し て、左記のコードを記 述する。' ボタン(開始)がクリックされた時の処理
Private Sub btnStart_Click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles btnStart.Click Dim I, W, R1, R2 As Integer ' カードの初期化 For I = 0 To 20 Step 2 C( I ) = I ¥ 2 : C( I + 1 ) = I ¥ 2 Next ' カードのシャッフル For I = 1 To 100 R1 = Int( Rnd( ) * 22 ) : R2 = Int( Rnd( ) * 22 ) W = C( R1 ) : C( R1 ) = C( R2 ) : C( R2 ) = W Next ' カードの表示 For I = 0 To 21
P( I ).Image = B( 11 ) : P( I ).Visible = True Next
lblTotal.Text = "回数:00 回"
Cnt = 0 : Obt = 0 : btnStart.Enabled = False End Sub End Class 4 デザイン画面で、 ボ タ ン を ダ ブ ル ク リ ックして、コード画面 を表示し、左記のコー ドを入力する。
プログラムの概要
パーティや地蔵盆で良く行われる ゲーム『ビンゴ』です。 76枚用と100枚用の2種類を 選択する事が出来ます。 遊び方は、特に説明する必要は無 いでせう。ビンゴカードを印刷す る機能を備えた拡張版も用意して ますので、参考に仕て下さい。 一般的に、実用プログラムに比較 するとゲームプログラムは、高度 なテクニックを要求される事が多 い。 此処では、ゲームプログラムを作成する事に依り、楽しみ乍ら、プログラムの制作手順を習得する事を 目的として居る。 制作手順としては、実際の作業過程に従い、段階的に機能を追加する方法を採用して居る。 此のプログラムを土台に、更に、各自で機能を追加して行く事が望まれる。ビンゴ
VB 2005 ⑱ □ アプリケーション画面のデザイン(標準コントロールの利用) □ プログラムの動作原理(イベント駆動型のプログラム) □ プログラムの構成要素(オブジェクトとプロパティ) □ 値の代入(変数、オブジェクトのプロパティ) □ グラフィックスの利用(Graphics オブジェクト) □ 条件に応じた処理(If 文の利用) □ 自動的に行われる処理(タイマーの利用) 今回の課題項目コントロールの種類 プロパティ プロパティの設定値 フォーム Name bingo BackColor Black FormBorderStyle FixedSingle Size 1034, 682 StartPosition CenterScreen Text BINGO ピクチャボックス Name picBINGO Image bingo.gif Location 784, 12 Size 222, 142 ラベル Name lblHit BackColor White Font MS ゴシック、120、太字 Location 780, 166 Size 230, 182 Text 空白 TextAlign MiddleCenter ボタン Name btnStart BackColor Silver
Font Times New Roman、18、太字
Location 780, 372 Size 232, 123 Text START タイマー Name tmrGO ラジオボタン1 Name rad75 ラジオボタン2 Name rad99 ボタン
オ
オ
ブ
ブ
ジ
ジ
ェ
ェ
ク
ク
ト
ト
・
・
プ
プ
ロ
ロ
パ
パ
テ
テ
ィ
ィ
一
一
覧
覧
ラジオボタン1 グループボックス ピクチャボックス ラジオボタン2 タイマー ラベルPublic Class bingo
Private Num( 99 ) As Integer Private Cnt As Integer Private Lmt As Integer Private Pre As Integer
Private lblNumber( 99 ) As Label
' ゲームを初期化するジェネラルプロシージャ Private Sub GameInit( )
Dim I, R1, R2, W As Integer ' 前出番号の初期化 Pre = -1 ' 番号の初期化 For I = 0 To 99
Num( I ) = I : lblNumber( I ).ForeColor = Color.White Next I
' シャッフル
For I = 1 To 200
R1 = Int( Rnd( ) * Lmt ) : R2 = Int( Rnd( ) * Lmt )
W = Num( R1 ) : Num( R1 ) = Num( R2 ) : Num( R2 ) = W Next I
End Sub
' フォームが読み込まれた時の処理
Private Sub bingo_Load( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles MyBase.Load
' 画面の初期化
For I As Integer = 0 To 99 lblNumber( I ) = New Label( ) With lblNumber( I )
.Size = New Size( 70, 45 )
.Location = New Point(( I Mod 10) * 72 + 26, ( I ¥ 10 ) * 62 + 22 ) .BackColor = Color.Black
.ForeColor = Color.White
.TextAlign = ContentAlignment.MiddleRight
.Font = New Font( "MS ゴシック", 36.0!, FontStyle.Bold ) .Text = I.ToString( ) .Visible = True Me.Controls.Add( lblNumber( I )) End With Next ' ゲームの初期化
Randomize( ) : Lmt = 100 : Call GameInit( ) End Sub
プ
プ
ロ
ロ
グ
グ
ラ
ラ
ム
ム
リ
リ
ス
ス
ト
ト
1 コード記述画面を表示 して左記のコードを入 力する。 2 上記1と同様に、コー ド 記 述 画 面 を 表 示 し て、左記のコードを記 述する。 3 フォーム上のコン トロールを配置して居 ない処をダブルクリッ クして、コード画面を 表示し、左記のコード を入力する。 画面に 1 桁しか表示され ない環境では、フォントの サイズを小さくする(30.0 位)。' ラジオボタン(範囲)の選択状態が変化した時の処理
Private Sub RadioButtonCheckedChanged( ByVal sender As System.Object, _ ByVal e As System.EventArgs ) Handles rad75.CheckedChanged
If sender Is rad75 Then Lmt = 76 Else Lmt = 100 End If Call GameInit( ) End Sub ' ボタン(スタート)がクリックされた時の処理
Private Sub btnStart_Click( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles btnStart.Click
If btnStart.Text = "START" Then Cnt = 0 tmrGO.Interval = 100 tmrGO.Enabled = True Else Call GameInit( ) btnStart.Text = "START" End If End Sub ' タイマーが一定間隔で行う処理
Private Sub tmrGO_Tick( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles tmrGO.Tick Dim R, N, I As Integer R = Int( Rnd( ) * Lmt ) N = Num( R )
If Not Pre < 0 Then
lblNumber( Pre ).ForeColor = Color.White End If
lblNumber( N ).ForeColor = Color.Red Pre = N : Cnt = Cnt + 1 If Cnt > 14 Then tmrGO.Interval += 100 End If If Cnt > 19 Then tmrGO.Enabled = False lblHit.Text = N.ToString( ) Pre = -1 : Lmt -= 1 If Lmt < 1 Then btnStart.Text = "RESET" Else For I = R To ( Lmt - 1 ) Num( I ) = Num( I + 1 ) Next I End If End If End Sub End Class 4 デ ザ イ ン 画 面 で ラ ジ オ ボ タ ン 1 を ダ ブルクリックして、コ ード画面を表示し、左 記 の コ ー ド を 入 力 す る。 5 デ ザ イ ン 画 面 で ボ タ ン を ダ ブ ル ク リ ックして、コード画面 を表示し、左記のコー ドを入力する。 6 デ ザ イ ン 画 面 で タ イ マ ー を ダ ブ ル ク リックして、コード画 面を表示し、左記のコ ードを入力する。
プログラムの概要
謂わずと知れた落ち物ゲーム『テトリ ス』の超簡易版『パクリス』です。 画面上の『スタート』ボタンをクリッ クすると、画面右側の領域で、上から ブロックが落ちて来ます。左右の矢印 キーでブロックを左右に移動させて 色が揃う様に落下させます。下向きの 矢印キーで一気に落下させる事も出 来ます。 此のゲームでは、ブロックを回転させ たり、連鎖消去する事は出来ないが、『落ちゲー』の基本が解ると思う。 一般的に、実用プログラムに比較するとゲームプログラムは、高度なテクニックを要求される事が多い。 此処では、ゲームプログラムを作成する事に依り、楽しみ乍ら、プログラムの制作手順を習得する事を 目的として居る。 制作手順としては、実際の作業過程に従い、段階的に機能を追加する方法を採用して居る。 此のプログラムを土台に、更に、各自で機能を追加して行く事が望まれる。パクリス
VB 2005 ⑲ □ アプリケーション画面のデザイン(標準コントロールの利用) □ プログラムの動作原理(イベント駆動型のプログラム) □ プログラムの構成要素(オブジェクトとプロパティ) □ 値の代入(変数、オブジェクトのプロパティ) □ グラフィックスの利用(Graphics オブジェクト) □ 条件に応じた処理(If 文の利用) □ 自動的に行われる処理(タイマーの利用) 今回の課題項目コントロールの種類 プロパティ プロパティの設定値 フォーム Name pacris Text パクリス - テトリスのパクリ ピクチャボックス1 Name picLogo Image pacris.jpg Size 320, 122 ピクチャボックス2 Name picScreen BackColor Black Size 300, 300 ラベル1 Name lblMes BackColor Red BorderStyle Fixed3D Font HG 創英角ポップ体、22、太字
Text GAME OVER
TextAlign MiddleCenter ラベル2 Name lblScr BackColor Blue Font HG 創英角ポップ体、18、太字 ForeColor White Text 0 TextAlign MiddleRight ボタン Name btnStart Text START タイマー Name tmrMove Interval 500 ピクチャボックス1 タイマー ボタン ラベル1
オ
オ
ブ
ブ
ジ
ジ
ェ
ェ
ク
ク
ト
ト
・
・
プ
プ
ロ
ロ
パ
パ
テ
テ
ィ
ィ
一
一
覧
覧
ピクチャボックス2 ラベル2Public Class pacris
Private G As Graphics
Private M( 9, 9 ), BX, BY, Scr As Integer
Private B( ) As Brush = { Brushes.Black, Brushes.White, _
Brushes.Yellow, Brushes.Cyan, Brushes.Green, Brushes.DeepPink }
' フォームが読み込まれた時の処理
Private Sub pacris_Load( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles MyBase.Load
With picScreen
.Image = New Bitmap( .Width, .Height ) G = Graphics.FromImage( .Image ) End With
End Sub
' ボタン(START)がクリックされた時の処理
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnStart.Click
btnStart.Enabled = False : lblMes.Visible = False For I As Integer = 0 To 9 For J As Integer = 0 To 9 M( I, J ) = 0 Next Next Scr = 0 : lblScr.Text = Scr.ToString( ) Call StartPos( ) tmrMove.Enabled = True End Sub ' スタート位置を表示するジェネラルプロシージャ Private Sub StartPos( )
BX = Int( Rnd( ) * 10 ) : BY = 0 M(BY, BX) = Int(Rnd( ) * 5 + 1 ) Call DrawScreen( ) End Sub ' 画面を書き換えるジェネラルプロシージャ Private Sub DrawScreen( )
For I As Integer = 0 To 9 For J As Integer = 0 To 9 G.FillRectangle( B( M( I, J )), J * 30, I * 30, 30, 30 ) Next Next picScreen.Refresh( ) End Sub ' ブロックを消去するジェネラルプロシージャ Private Sub DelBlock( )
Dim P As Integer = 0
If BX > 0 AndAlso M( BY, BX - 1 ) = M( BY, BX ) Then M( BY, BX - 1 ) = 0 : P += 1
End If
If BX < 9 AndAlso M( BY, BX + 1 ) = M( BY, BX ) Then
プ
プ
ロ
ロ
グ
グ
ラ
ラ
ム
ム
リ
リ
ス
ス
ト
ト
1 コード記述画面を 表示して左記のコ ードを入力する。 2 フォーム上のコン トロールを配置して居 ない処をダブルクリッ クして、コード画面を 表示し、左記のコード を入力する。 3 デザイン画面で、 ボタンをダブルクリッ クして、コード画面を 表示し、左記のコード を入力する。 4 上記1と同様に、コー ド 記 述 画 面 を 表 示 し て、左記のコードを記 述する。M( BY, BX + 1 ) = 0 : P += 1 End If
If BY < 9 AndAlso M( BY + 1, BX ) = M( BY, BX ) Then M( BY + 1, BX ) = 0 : P += 1
End If
If P > 0 Then
M( BY, BX ) = 0 : Call DrawScreen( )
Scr += ( 2 ^ ( P - 1 )) : lblScr.Text = Scr.ToString( ) If Scr > 0 And ( Scr Mod 10 = 0 ) Then If tmrMove.Interval > 100 Then tmrMove.Interval = 500 - ( Scr ¥ 10 ) * 100 End If End If End If End Sub ' タイマーが一定間隔で行う処理
Private Sub tmrMove_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles tmrMove.Tick
If BY > 8 OrElse M( BY + 1, BX ) > 0 Then tmrMove.Enabled = False
Call DelBlock( )
If M( BY, BX ) > 0 And BY = 0 Then lblMes.Visible = True
Else
Call StartPos( ) : tmrMove.Enabled = True End If Else M( BY + 1, BX ) = M( BY, BX ) : M( BY, BX ) = 0 : BY += 1 Call DrawScreen( ) End If End Sub ' キーが開放された時の処理
Private Sub pacris_KeyUp(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp Select Case e.KeyCode
Case Keys.Left
If BX > 0 AndAlso M( BY, BX - 1 ) = 0 Then
M( BY, BX - 1 ) = M( BY, BX ) : M( BY, BX ) = 0 : BX -= 1 Call DrawScreen( )
End If
Case Keys.Right
If BX < 9 AndAlso M( BY, BX + 1 ) = 0 Then
M( BY, BX + 1 ) = M( BY, BX ) : M( BY, BX ) = 0 : BX += 1 Call DrawScreen( ) End If Case Keys.Down tmrMove.Enabled = False Do Until BY > 8 OrElse M( BY + 1, BX ) > 0 M( BY + 1, BX ) = M( BY, BX ) : M( BY, BX ) = 0 : BY += 1 Call DrawScreen( ) System.Threading.Thread.Sleep( 50 ) Loop
Call DelBlock( ) : Call StartPos( ) : tmrMove.Enabled = True End Select End Sub End Class 6 デザイン画面で、 タ イ マ ー を ダ ブ ル ク リックして、コード画 面を表示し、左記のコ ードを入力する。 7 フ ォ ー ム の イ ベ ント一覧より KeyUp イ ベ ン ト を ダ ブ ル ク リックして、左記のコ ードを入力する。
プログラムの概要
烏賊と蛸を戦わすゲーム『ボク シング』です。 画面上の『スタート』ボタンを クリックする(又は、エンター キーを押す)と、ゲームが開始 する。 プレーヤーは烏賊で、左右の矢 印キーで前進・後進し、スペー スキーでパンチを放つ。 一般的に、実用プログラムに比 較するとゲームプログラムは、 高度なテクニックを要求される事が多い。 此処では、ゲームプログラムを作成する事に依り、楽しみ乍ら、プログラムの制作手順を習得する事を 目的として居る。 制作手順としては、実際の作業過程に従い、段階的に機能を追加する方法を採用して居る。 此のプログラムを土台に、更に、各自で機能を追加して行く事が望まれる。烏賊と蛸のボクシング
VB 2005 ⑳ □ アプリケーション画面のデザイン(標準コントロールの利用) □ プログラムの動作原理(イベント駆動型のプログラム) □ プログラムの構成要素(オブジェクトとプロパティ) □ 値の代入(変数、オブジェクトのプロパティ) □ グラフィックスの利用(Graphics オブジェクト) □ 条件に応じた処理(If 文の利用) □ 自動的に行われる処理(タイマーの利用) 今回の課題項目コントロールの種類 プロパティ プロパティの設定値 フォーム Name boxing FormBorderStyle FixedSingle MaximizeBox False StartPosition CenterScreen Text 烏賊と蛸のボクシング ラベル1 Name lblMes1 Font MS 明朝,、14、太字 Text 只今 ラベル2 Name lblScore Font MS 明朝,、14、太字 Text 0 TextAlign MiddleRight ラベル3 Name lblMes2 Font MS 明朝,、14、太字 Text 、勝抜き中です! パネル Name pnlRing BackColor White Size 400, 100 プログレスバー1 Name prgOctopus プログレスバー2 Name prgSquid ボタン Name btnStart Text スタート タイマー Name tmrGame Interval 50 プログレスバー1 タイマー ボタン ラベル1
オ
オ
ブ
ブ
ジ
ジ
ェ
ェ
ク
ク
ト
ト
・
・
プ
プ
ロ
ロ
パ
パ
テ
テ
ィ
ィ
一
一
覧
覧
プログレスバー2 ラベル2 ラベル3 パネルPublic Class boxing
Private Img( 1, 1 ) As Bitmap Private G As Graphics
Private Ps, Po, Cnt, Xs, Xo, Q As Integer
' フォームが読み込まれた時の処理
Private Sub boxing_Load( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles MyBase.Load
Img( 0, 0 ) = New Bitmap( "ika1.gif" ) Img( 0, 1 ) = New Bitmap( "ika2.gif" ) Img( 1, 0 ) = New Bitmap( "tako1.gif" ) Img( 1, 1 ) = New Bitmap( "tako2.gif" ) With pnlRing
.BackgroundImage = New Bitmap ( .Width, .Height ) G = Graphics.FromImage( .BackgroundImage ) End With Randomize( ) End Sub ' キャラクタを表示するジェネラルプロシージャ Private Sub CharDisp( ByVal W As Integer ) G.Clear( Color.White )
G.DrawImage( Img( 0, Q ), Xs, 30 ) G.DrawImage( Img( 1, W ), Xo, 30 ) pnlRing.Refresh( )
End Sub
' ゲームを初期化するジェネラルプロシージャ Private Sub GameInit( )
Po = 160 + Cnt * 20 prgOctopus.Maximum = Po : prgOctopus.Value = Po Ps = 200 prgSquid.Maximum = Ps : prgSquid.Value = Ps Xo = 40 : Xs = 300 : Call CharDisp( 0 ) : Q = 0 End Sub ' ボタン(スタート)がクリックされた時の処理
Private Sub btnStart_Click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles btnStart.Click Cnt = 0 : lblScore.Text = CStr( Cnt ) Call GameInit( ) Me.KeyPreview = True btnStart.Enabled = False tmrGame.Enabled = True End Sub
プ
プ
ロ
ロ
グ
グ
ラ
ラ
ム
ム
リ
リ
ス
ス
ト
ト
1 コード記述画面を表示 して左記のコードを入 力する。 2 フォーム上のコン トロールを配置して居 ない処をダブルクリッ クして、コード画面を 表示し、左記のコード を入力する。 3 上記1と同様に、コー ド 記 述 画 面 を 表 示 し て、左記のコードを記 述する。 4 デザイン画面で、 ボタンをダブルクリッ クして、コード画面を 表示し、左記のコード を入力する。' キーが押された時の処理
Private Sub boxing_KeyDown( ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs ) Handles Me.KeyDown
Select Case e.KeyCode Case Keys.Left If Xs > 36 Then Xs = Xs - 2 ' 烏賊のX座標 Case Keys.Right If Xs < 340 Then Xs = Xs + 2 ' 烏賊のX座標 Case Keys.Space If Q = 0 Then Q = 1 ' パンチフラグ End Select End Sub ' タイマーが一定間隔で自動的に行う処理
Private Sub tmrGame_Tick( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles tmrGame.Tick
Dim W As Integer = 0 Select Case Int( Rnd( ) * 5 ) Case 0 : W = 1 Case 1, 2 : If Xo > 0 Then Xo -= 2 ' 蛸のX座標 Case 3, 4 : If Xo < 364 Then Xo += 2 ' 蛸のX座標 End Select Call CharDisp( W ) Dim D As Integer = Xs - Xo If D > 10 And D < 36 Then If Q = 1 And W = 0 Then Po = Po - 10 : If Po < 0 Then Po = 0 prgOctopus.Value = Po
ElseIf Q = 0 And W = 1 Then Ps = Ps - 10 : If Ps < 0 Then Ps = 0 prgSquid.Value = Ps
ElseIf Q = 1 And W = 1 Then Po = Po - 5 : If Po < 0 Then Po = 0 prgOctopus.Value = Po Ps = Ps - 5 : If Ps < 0 Then Ps = 0 prgSquid.Value = Ps End If If Po = 0 Then Cnt = Cnt + 1 : lblScore.Text = CStr( Cnt ) ' 勝抜き人数 Call GameInit( ) Exit Sub ElseIf Ps = 0 Then tmrGame.Enabled = False btnStart.Enabled = True MsgBox( "KO負け!", MsgBoxStyle.Exclamation, "結果" ) End If End If Q = 0 End Sub End Class 5 フ ォ ー ム の イ ベ ン ト 一 覧 よ り KeyDown イベントを ダブルクリックして、 左 記 の コ ー ド を 入 力 する。 6 デザイン画面で、 タ イ マ ー を ダ ブ ル ク リックして、コード画 面を表示し、左記のコ ードを入力する。
プログラムの概要
烏賊と蛸が夕日を背に対戦する対戦型アクシ ョンゲーム『ビーチバレー』です。 画面上の『スタート』ボタンをクリックする(又 は、エンターキーを押す)と、ゲームが開始す る。10 点先取で勝ちで有る。 夫々れのプレーヤーは、画面に表示されたキー 操作で烏賊や蛸を操る。 一般的に、実用プログラムに比較するとゲーム プログラムは、高度なテクニックを要求される 事が多い。 此処では、ゲームプログラムを作成する事に依 り、楽しみ乍ら、プログラムの制作手順を習得 する事を目的として居る。 制作手順としては、実際の作業過程に従い、段 階的に機能を追加する方法を採用して居る。 此のプログラムを土台に、更に、各自で機能を追加して行く事が望まれる。ビーチバレー
VB 2005 ○21 □ アプリケーション画面のデザイン(標準コントロールの利用) □ プログラムの動作原理(イベント駆動型のプログラム) □ プログラムの構成要素(オブジェクトとプロパティ) □ 値の代入(変数、オブジェクトのプロパティ) □ グラフィックスの利用(Graphics オブジェクト) □ 条件に応じた処理(If 文の利用) □ 自動的に行われる処理(タイマーの利用) 今回の課題項目コントロールの種類 プロパティ プロパティの設定値 フォーム Name volleyball BackColor Navy BackGroundImage back.gif FormBorderStyle FixedSingle MaximizeBox False StartPosition CenterScreen Text ビーチバレー パネル Name pnlGround BackColor Transparent Location 16, 14 Size 512, 426 ラベル1 Name lblScore0 BackColor Transparent Font MS 明朝,、14、太字 ForeColor White Text 0 ピクチャボックス2 タイマー ボタン
オ
オ
ブ
ブ
ジ
ジ
ェ
ェ
ク
ク
ト
ト
・
・
プ
プ
ロ
ロ
パ
パ
テ
テ
ィ
ィ
一
一
覧
覧
ピクチャボックス1 ラベル2 ラベル1 パネル ピクチャボックス3 ピクチャボックス4 ピクチャボックス5 コンボボックスコントロールの種類 プロパティ プロパティの設定値 ラベル2 Name lblScore1 BackColor Transparent Font MS 明朝,、14、太字 ForeColor White Text 0 TextAlign MiddleRight ピクチャボックス1 Name picShadow BackColor Transparent Image shadow.gif ピクチャボックス2 Name picOctopus BackColor Transparent Image tako1.gif ピクチャボックス3 Name picTurtle BackColor Transparent Image kame1.gif ピクチャボックス4 Name picBall BackColor Transparent Image ball.gif ピクチャボックス5 Name picSquid BackColor Transparent Image ika1.gif ボタン Name btnStart BackColor Cyan Font HG 創英角ポップ体、12、太字 Text スタート コンボボックス Name cboLevel BackColor Cyan Font MS 明朝、10、標準 Items 初級 中級 上級 タイマー Name tmrGame Interval 50
Public Class volleyball Private X1 As Integer ' 烏賊のX座標 Private Y1 As Integer ' 烏賊のY座標 Private X2 As Integer ' 蛸のX座標 Private Y2 As Integer ' 蛸のY座標 Private KA As Integer ' 亀のX座標 Private X As Integer ' ボールのX座標 Private Y As Integer ' ボールのY座標 Private XP As Integer ' ボールの横移動量 Private YP As Integer ' ボールの縦移動量 Private K1 As Integer ' 烏賊のジャンプフラグ Private P1 As Integer ' 烏賊のジャンプカウント Private Q1 As Integer ' 烏賊のアタックフラグ Private S1 As Integer ' 烏賊の得点 Private K2 As Integer ' 蛸のジャンプフラグ Private P2 As Integer ' 蛸のジャンプカウント Private Q2 As Integer ' 蛸のアタックフラグ Private S2 As Integer ' 蛸の得点 Private LV As Integer ' レベル Private Squid( 1 ) As Bitmap Private Octopus( 1 ) As Bitmap Private Turtle( 1 ) As Bitmap
' ゲームを初期化するジェネラルプロシージャ Private Sub GameInit ()
X1 = 464 : Y1 = 296 : K1 = 0 : P1 = 0 : picSquid.Location = New Point( X1, Y1 ) X2 = 16 : Y2 = 296 : K2 = 0 : P2 = 0 : picOctopus.Location = New Point( X2, Y2 ) KA = 576 : picTurtle.Location = New Point( KA - 64, 250 )
X = 448 : Y = 248 : picBall.Location = New Point( X, Y ) XP = 0 : YP = 12 S1 = 0 : lblScore0.Text = S1.ToString( ) S2 = 0 : lblScore1.Text = S2.ToString( ) End Sub ' フォームが読み込まれた時の処理
Private Sub volleyball_Load( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles Me.Load
For I As Integer = 0 To 1
Squid( I ) = New Bitmap( "ika" & ( I + 1 ).ToString( ) & ".gif" ) Octopus( I ) = New Bitmap( "tako" & ( I + 1 ).ToString( ) & ".gif" ) Turtle( I ) = New Bitmap( "kame" & ( I + 1 ).ToString( ) & ".gif" ) Next cboLevel.SelectedIndex = 0 : LV = 1 Call GameInit( ) End Sub ' ボタン(スタート)がクリックされた時の処理
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnStart.Click
Call GameInit( )
btnStart.Enabled = False : cboLevel.Enabled = False Me.KeyPreview = True : tmrGame.Enabled = True End Sub
プ
プ
ロ
ロ
グ
グ
ラ
ラ
ム
ム
リ
リ
ス
ス
ト
ト
1 コード記述画面を表示 して左記のコードを入 力する。 2 上記1と同様に、コー ド 記 述 画 面 を 表 示 し て、左記のコードを記 述する。 3 フォーム上のコントロールを配置して 居ない処をダブルクリックして、コード画 面を表示し、左記のコードを入力する。 4 デザイン画面で、ボタンをダブル クリックして、コード画面を表示し、 左記のコードを入力する。' コンボボックス(レベル)がクリックされた時の処理
Private Sub cboLevel_SelectedIndexChanged( ByVal sender As System.Object, _ ByVal e As System.EventArgs ) Handles cboLevel.SelectedIndexChanged LV = cboLevel.SelectedIndex + 1
tmrGame.Interval = 50 * ( 3 / LV ) End Sub
' キーが押された時の処理
Private Sub volleyball_KeyDown( ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs ) Handles Me.KeyDown Select Case e.KeyCode
Case Keys.I If K1 = 0 Then K1 = 1 : P1 = 30 Case Keys.J X1 = X1 + ( X1 > 256 ) * 2 Case Keys.L X1 = X1 - ( X1 < 480 ) * 2 Case Keys.K Q1 = 5
If ( Math.Abs( X1 – X ) < 32 ) And ( Math.Abs( Y1 – Y ) < 32 ) Then XP = -( X1 – X ) / 1.5 * ( 1 - K1 ) - 32 * K1 YP = 30 - 25 * K1 End If Case Keys.W If K2 = 0 Then K2 = 1 : P2 = 30 Case Keys.A X2 = X2 + ( X2 > 0 ) * 2 Case Keys.D X2 = X2 - ( X2 < 224 ) * 2 Case Keys.S Q2 = 5
If ( Math.Abs( X2 - X ) < 32 ) And ( Math.Abs( Y2 – Y ) < 32 ) Then XP = -( X2 - X ) / 1.5 * ( 1 - K2 ) - 32 * K2 YP = 30 - 25 * K2 End If End Select End Sub ' タイマーが一定間隔で自動的に行う処理
Private Sub tmrGame_Tick( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles tmrGame.Tick
' 亀の処理
KA = KA - 1 : If KA < 0 Then KA = 576 picTurtle.Image = Turtle( KA Mod 2 ) picTurtle.Left = KA - 64 ' 烏賊の処理 If K1 = 1 Then Y1 = Y1 - P1 : P1 = P1 - 2 : If P1 < -30 Then K1 = 0 End If If Q1 > 0 Then Q1 = Q1 - 1
picSquid.Image = Squid( Math.Sign( Q1 )) picSquid.Location = New Point( X1, Y1 ) ' 蛸の処理
If K2 = 1 Then
Y2 = Y2 - P2 : P2 = P2 - 2 : If P2 < -30 Then K2 = 0 End If
If Q2 > 0 Then Q2 = Q2 - 1
picOctopus.Image = Octopus( Math.Sign( Q2 ))
5 デザイン画面で、コンボボックス をダブルクリックして、コード画面を 表示し、左記のコードを入力する。 6 フ ォ ー ム の イ ベ ン ト 一 覧 よ り KeyDown イベントを ダブルクリックして、 左 記 の コ ー ド を 入 力 する。 7 デザイン画面で、 タ イ マ ー を ダ ブ ル ク リックして、コード画 面を表示し、左記のコ ードを入力する。
picOctopus.Location = New Point( X2, Y2 ) ' ボールの処理
X = X + XP : Y = Y - YP - 2 : If YP > -24 Then YP = YP - 2 picBall.Location = New Point( X, Y )
picShadow.Location = New Point( X, 308 ) If Y > 300 Then If X < 256 Then S1 = S1 + 1 : lblScore0.Text = S1.ToString( ) : X = 32 If S1 > 9 Then tmrGame.Enabled = False MsgBox( "烏賊の勝ち!", MsgBoxStyle.Information, "試合終了" ) btnStart.Enabled = True : cboLevel.Enabled = True
Exit Sub End If Else S2 = S2 + 1 : lblScore1.Text = S2.ToString( ) : X = 448 If S2 > 9 Then tmrGame.Enabled = False MsgBox( "蛸の勝ち!", MsgBoxStyle.Information, "試合終了" ) btnStart.Enabled = True : cboLevel.Enabled = True
Exit Sub End If End If Y = 296 X1 = 464 : Y1 = 296 : X2 = 16 : Y2 = 296 K1 = 0 : P1 = 0 : K2 = 0 : P2 = 0 XP = 0 : YP = 12 ElseIf X < 0 Or X > 479 Then XP = XP * ( -1 ) End If End Sub End Class
プログラムの概要
体のリズムを知る『バイオリズ ム』プログラムで有る。 体のリズムは、身体、感情、知 性の3種のリズムから出来て 居て、此等は一定の周期で、高 調期と低調期を繰り返す。此等 のリズムは、一定の周期で繰り 返されるので、明日や更に先の 自分のコンディションを前以 て知る事が出来る。 一般的に、実用プログラムに比 較するとゲームプログラムは、 高度なテクニックを要求され る事が多い。 此処では、ゲームプログラムを作成する事に依り、楽しみ乍ら、プログラムの制作手順を習得する事を 目的として居る。 制作手順としては、実際の作業過程に従い、段階的に機能を追加する方法を採用して居る。 此のプログラムを土台に、更に、各自で機能を追加して行く事が望まれる。バイオリズム
VB 2005 ○22 □ アプリケーション画面のデザイン(標準コントロールの利用) □ プログラムの動作原理(イベント駆動型のプログラム) □ プログラムの構成要素(オブジェクトとプロパティ) □ 値の代入(変数、オブジェクトのプロパティ) □ グラフィックスの利用(Graphics オブジェクト) □ 条件に応じた処理(If 文の利用) □ 自動的に行われる処理(タイマーの利用) 今回の課題項目コントロールの種類 プロパティ プロパティの設定値 フォーム Name biorhythm FormBorderStyle FixedSingle MaximizeBox False StartPosition CenterScreen Text バイオリズム ラベル1 Name lblTitle Font HG 創英角ポップ体、24、標準 Text バイオリズムプログラム ラベル2 Name lblBirthday Font MS 明朝、12、太字 Text 誕生日 西暦 ラベル3 Name lblYearB Font MS 明朝、12、太字 Text 年 ラベル4 Name lblMonthB Font MS 明朝、12、太字 Text 月 ラベル5 Name lblDayB Font MS 明朝、12、太字 Text 日 ピクチャボックス ボタン1 ラベル1
オ
オ
ブ
ブ
ジ
ジ
ェ
ェ
ク
ク
ト
ト
・
・
プ
プ
ロ
ロ
パ
パ
テ
テ
ィ
ィ
一
一
覧
覧
上段:ラベル2、3、4、5 下段:ラベル6、7、8 パネル 適宜作成 ボタン2 上段:テキストボックス1 下段:テキストボックス2 上段:コンボボックス1、3 下段:コンボボックス2コントロールの種類 プロパティ プロパティの設定値 ラベル6 Name lblTarget Font MS 明朝、12、太字 Text 表示月 西暦 ラベル7 Name lblYearT Font MS 明朝、12、太字 Text 年 ラベル8 Name lblMonthT Font MS 明朝、12、太字 Text 月 テキストボックス1 Name txtYearB Font MS 明朝、12、太字 Text 自分の誕生年 TextAlign Right テキストボックス2 Name txtYearT Font MS 明朝、12、太字 Text 空白 TextAlign Right コンボボックス1 Name cboMonthB Font MS 明朝、12、太字 Items 1~12 Text 自分の誕生月 コンボボックス2 Name cboMonthT Font MS 明朝、12、太字 Items 1~12 Text 空白 コンボボックス3 Name cboDayB Font MS 明朝、12、太字 Items 1~31 Text 自分の誕生日 ボタン1 Name btnStart Font MS 明朝、11、太字 Text 表示 ボタン2 Name btnFinish Font MS 明朝、11、太字 Text 終了 ピクチャボックス Name picDisp BackColor Black Size 621, 211 パネル Name pnlExplain 適宜作成 肉体面は赤 感情面は緑 知性面は青
Public Class biorhythm
Private Const PI As Single = 3.14159 / 180
Private WI(2) As Integer Private CL(2) As Color Private TMD As Integer Private BM As Bitmap Private GR As Graphics ' 表示画面を初期化するジェネラルサブプロシージャ Private Sub BaseScreen( )
Dim I, X, Y, M As Integer Dim S As DateTime Dim H As Single ' 表示月の日数の設定 Y = Val( txtYearT.Text ) M = Val( cboMonthT.Text ) S = New DateTime( Y, M, 1 ) TMD = DateTime.DaysInMonth( Y, M ) ' グラフ枠の描画 H = 620 / TMD GR.Clear( Color.Black ) GR.DrawRectangle( Pens.White, 0, 0, 620, 210 ) For I = 1 To TMD X = ( I - 1 ) * H GR.DrawLine( Pens.White, X, 0, X, 210 )
GR.DrawString( I.ToString( "00" ), Me.Font, Brushes.White, X + 5, 1 ) Next GR.DrawLine( Pens.White, 0, 10, 620, 10 ) GR.DrawLine( Pens.White, 0, 110, 620, 110 ) picDisp.Refresh( ) End Sub ' フォームが読み込まれた時の処理
Private Sub biorhythm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load
' Graphics オブジェクトの生成 With picDisp
BM = New Bitmap( .Width, .Height ) .Image = BM
GR = Graphics.FromImage( .Image ) End With
' 画面の表示
txtYearT.Text = DateTime.Now.ToString( "yyyy" ) cboMonthT.SelectedIndex = DateTime.Now.Month - 1 Call BaseScreen( )
' 周期と描色の設定
WI( 0 ) = 23 : WI( 1 ) = 28 : WI( 2 ) = 33
CL( 0 ) = Color.Red : CL( 1 ) = Color.Green : CL( 2 ) = Color.Blue End Sub 2 上記1と同様に、コー ド 記 述 画 面 を 表 示 し て、左記のコードを記 述する。
プ
プ
ロ
ロ
グ
グ
ラ
ラ
ム
ム
リ
リ
ス
ス
ト
ト
1 コード記述画面を表示 して左記のコードを入 力する。 3 フォーム上のコン トロールを配置して居 ない処をダブルクリッ クして、コード画面を 表示し、左記のコード を入力する。' ボタン(表示)がクリックされた時の処理
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnStart.Click Dim WS( 2 ), DN, I, J As Integer Dim ST, PX, PY As Single ' 入力の検証と変数への代入
Dim Y1 As Integer = Val( txtYearB.Text ) : If Y1 = 0 Then Exit Sub Dim M1 As Integer = Val( cboMonthB.Text ) : If M1 = 0 Then Exit Sub Dim D1 As Integer = Val( cboDayB.Text ) : If D1 = 0 Then Exit Sub Dim Y2 As Integer = Val( txtYearT.Text ) : If Y2 = 0 Then Exit Sub Dim M2 As Integer = Val( cboMonthT.Text ) : If M2 = 0 Then Exit Sub
' グラフ枠の描画 Call BaseScreen( )
' 誕生日から表示月の朔日迄の日数の算出
Dim SD As DateTime = New DateTime( Y1, M1, D1 ) Dim ED As DateTime = New DateTime( Y2, M2, 1 ) DN = ( ED - SD ).Days
' 位相の算出(0:肉体面-Physical、1:感情面-Sensitivity、2:知性面-Intellectual) For I = 0 To 2 : WS( I ) = DN Mod WI( I ) : Next
' バイオリズムの描画 For I = 0 To 2 ST = ( 620 * ( WI( I ) / TMD )) / 360 PX = ( 620 / TMD ) * WS(I) - ST * 360 For J = -360 To 720 PY = 110 - Math.Sin( J * PI ) * 90
If ( PX > 1 And PX < 619 ) And ( PY > 1 And PY < 209 ) Then BM.SetPixel( PX, PY, CL( I ))
If System.Convert.ToInt32( PY ) = 110 Then
GR.FillEllipse( New SolidBrush( CL( I )), PX - 3, PY - 3, 7, 7 ) End If End If PX = PX + ST Next Next picDisp.Refresh( ) End Sub ' ボタン(終了)がクリックされた時の処理
Private Sub btnFinish_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnFinish.Click Me.Dispose( ) End End Sub End Class 4 デザイン画面で、 ボタンをダブルクリッ クして、コード画面を 表示し、左記のコード を入力する。 5 デザイン画面で、 ボタンをダブルクリッ クして、コード画面を 表示し、左記のコード を入力する。
プログラムの概要
面クリア型のパズルゲーム『ポ ップ君の山登り』で有る。 画面右欄に表示されるキー操 作(押すキーと移動先の関係を 示す)に従い、ポップ君を山の 頂上に導く事が出来れば、面ク リアで有る。 但し、1 段下には降りる事が出 来るが、2 段下には降りる事は 出来ない。亦、岩は、1 個なら 押す事が出来るが、引っ張る事 は出来ない。全33 面が用意されて居る。面データを解析し、新しい面作成に挑戦して欲しい。 一般的に、実用プログラムに比較するとゲームプログラムは、高度なテクニックを要求される事が多い。 此処では、ゲームプログラムを作成する事に依り、楽しみ乍ら、プログラムの制作手順を習得する事を 目的として居る。 制作手順としては、実際の作業過程に従い、段階的に機能を追加する方法を採用して居る。 此のプログラムを土台に、更に、各自で機能を追加して行く事が望まれる。ポップ君の山登り
VB 2005 ○23 □ アプリケーション画面のデザイン(標準コントロールの利用) □ プログラムの動作原理(イベント駆動型のプログラム) □ プログラムの構成要素(オブジェクトとプロパティ) □ 値の代入(変数、オブジェクトのプロパティ) □ グラフィックスの利用(Graphics オブジェクト) □ 条件に応じた処理(If 文の利用) □ 自動的に行われる処理(タイマーの利用) 今回の課題項目コントロールの種類 プロパティ プロパティの設定値 フォーム Name climbing BackColor Black FormBorderStyle FixedSingle MaximizeBox False StartPosition CenterScreen Text ポップ君の山登り パネル Name pnlBack BackgroundImage sky.gif Size 644, 416 ピクチャボックス1 Name picSheet BackColor Transparent Size 644, 416 ピクチャボックス2 Name picPOP BackColor Transparent Image left.gif Size 28, 32 ラベル1 Name lblClear BackColor Transparent Font MS 明朝、20、太字 ForeColor Red Text クリア!! ラベル2 Name lblTitle BackColor Transparent Font MS 明朝、14、太字 ForeColor White Text ポップ君の山登り
オ
オ
ブ
ブ
ジ
ジ
ェ
ェ
ク
ク
ト
ト
・
・
プ
プ
ロ
ロ
パ
パ
テ
テ
ィ
ィ
一
一
覧
覧
ピクチャボックス1 ボタン1 ラベル1 パネル ボタン2 ピクチャボックス2 ラベル6 ラベル5 ラベル4 ラベル3 ラベル2 ピクチャボックス6 ピクチャボックス4 ピクチャボックス5 ピクチャボックス3コントロールの種類 プロパティ プロパティの設定値 ラベル3 Name lblSheet AutoSize False BackColor Transparent Font MS 明朝、14、太字 ForeColor White Size 161, 19 Text 第1面 TextAlign MiddleCenter ラベル4 Name lblKeyOperation BackColor Transparent Font MS 明朝、14、太字 ForeColor White Text キー操作 ラベル5 Name lblExplain AutoSize False BackColor Transparent Font MS 明朝、18、太字 ForeColor White Text 図の様に記述する。 ラベル6 Name lblEscape BackColor Transparent Font MS 明朝、9、太字 ForeColor White Text ESCキーで遣り直し ピクチャボックス3 Name picLeft BackColor Transparent Image left.gif Size 28, 32 ピクチャボックス4 Name picRight BackColor Transparent Image right.gif Size 28, 32 ピクチャボックス5 Name picMountain BackColor Transparent Image mountain.gif Size 28, 32 ピクチャボックス6 Name picRock BackColor Transparent Image rock.gif Size 28, 32 ボタン1 Name BtnTest Text テスト Visible False ボタン2 Name btnNext Text 次へ
Public Class climbing
Private Const MAX As Integer = 33
Private Sdata( MAX - 1 ) As String ' 面データ Private BD( 22, 13 ) As Integer ' 仮想画面 Private Mcnt As Integer ' 山の数 Private Rcnt As Integer ' 岩の数
Private PX As Integer ' ポップ君のX座標 Private PY As Integer ' ポップ君のY座標 Private Sheet As Integer ' 面番号
Private Pt As String ' 起動パス Private G As Graphics
' フォームが読み込まれた時の処理
Private Sub climbing_Load( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles MyBase.Load Dim F As String Dim I As Integer ' データパスの設定
Pt = Application.StartupPath : If Not Pt.EndsWith( "¥" ) Then Pt &= "¥" ' 面データの読込 F = Pt & "climbing.dat" FileOpen( 1, F, OpenMode.Input ) For I = 0 To ( MAX - 1 ) Sdata( I ) = LineInput( 1 ) Next I FileClose( 1 ) ' 仮想画面の初期設定 For I = 0 To 22 : BD( I, 0 ) = 2 : BD( I, 13 ) = 2 : Next I For I = 1 To 12 : BD( 0, I ) = 2 : BD( 22, I ) = 2 : Next I Mcnt = 0 : Rcnt = 0 ' Graphics オブジェクトの生成 With picSheet
.Image = New Bitmap( .Width, .Height ) G = Graphics.FromImage( .Image ) End With
' 第1面の表示
Sheet = 1 : Call DispSheet( ) End Sub
' 画面表示テスト
Private Sub btnTest_Click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles btnTest.Click
Sheet += 1 : If Sheet > 33 Then Sheet = 1 Call DispSheet( ) End Sub
プ
プ
ロ
ロ
グ
グ
ラ
ラ
ム
ム
リ
リ
ス
ス
ト
ト
1 コード記述画面を表示 して左記のコードを入 力する。 2 フォーム上のコン トロールを配置して居 ない処をダブルクリッ クして、コード画面を 表示し、左記のコード を入力する。 3 デザイン画面で、ボタンをダブ ルクリックして、コード画面を表示 し、左記のコードを入力する。' フォーム上でキー入力が為された時の処理
Private Sub climbing_KeyUp( ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs ) Handles Me.KeyUp Dim X, Y, I, B As Integer Dim F, S As String Dim R As Boolean ' キー入力の判定
Select Case e.KeyCode
Case Keys.D1, Keys.NumPad1 If Not BD( PX - 1, PY ) = 2 Then If BD( PX - 1, PY ) = 1 Then If Not BD( PX - 1, PY - 1 ) = 1 Then If BD( PX - 2, PY ) = 0 Then X = PX - 1 : Y = PY : Call DelRock( X, Y ) BD( PX - 1, PY ) = 0 : BD( PX - 2, PY ) = 1 X = X - 1 : G.DrawImage( picRock.Image, X * 28, Y * 32 ) picSheet.Refresh( ) PX = PX - 1 : Call DispPop( 0 ) Do While BD( X, Y + 1 ) = 0 Call DelRock( X, Y ): BD( X, Y ) = 0 : BD( X, Y + 1 ) = 1 Y = Y + 1 : G.DrawImage( picRock.Image, X * 28, Y * 32 ) picSheet.Refresh( ) Loop End If End If Else If BD( PX - 1, PY + 1 ) > 0 Then PX = PX - 1 : Call DispPop( 0 ) Else If BD( PX - 1, PY + 2 ) > 0 Then PX = PX - 1 : PY = PY + 1 : Call DispPop( 0 ) End If End If End If End If
Case Keys.D2, Keys.NumPad2
If Not BD( PX + 1, PY ) = 2 Then If BD( PX + 1, PY ) = 1 Then If Not BD( PX + 1, PY - 1 ) = 1 Then If BD( PX + 2, PY ) = 0 Then X = PX + 1 : Y = PY : Call DelRock( X, Y ) BD( PX + 1, PY ) = 0 : BD( PX + 2, PY ) = 1 X = X + 1 : G.DrawImage( picRock.Image, X * 28, Y * 32 ) picSheet.Refresh( ) PX = PX + 1 : Call DispPop( 1 ) Do While BD( X, Y + 1 ) = 0 Call DelRock( X, Y ): BD( X, Y ) = 0 : BD( X, Y + 1 ) = 1 Y = Y + 1 : G.DrawImage( picRock.Image, X * 28, Y * 32 ) picSheet.Refresh( ) Loop End If End If Else If BD( PX + 1, PY + 1 ) > 0 Then PX = PX + 1 : Call DispPop( 1 ) Else 4 フ ォ ー ム の イ ベ ント一覧より KeyUp イ ベ ン ト を ダ ブ ル ク リックして、左記のコ ードを入力する。
If BD( PX + 1, PY + 2 ) > 0 Then PX = PX + 1 : PY = PY + 1 : Call DispPop( 1 ) End If End If End If End If
Case Keys.D4, Keys.NumPad4 If BD( PX, PY – 1 ) = 0 Then If BD( PX - 1, PY ) > 0 Then If BD( PX - 1, PY - 1 ) = 0 Then PX = PX - 1 : PY = PY - 1 : Call DispPop( 0 ) End If End If End If
Case Keys.D5, Keys.NumPad5 If BD( PX, PY - 1 ) = 0 Then If BD( PX + 1, PY ) > 0 Then If BD( PX + 1, PY – 1 ) = 0 Then PX = PX + 1 : PY = PY - 1 : Call DispPop( 1 ) End If End If End If
Case Keys.D7, Keys.NumPad7 If BD( PX, PY – 2 ) = 0 Then If BD( PX, PY – 1 ) = 0 Then If BD( PX - 1, PY - 1 ) > 0 Then If BD( PX - 1, PY - 2 ) = 0 Then PX = PX - 1 : PY = PY - 2 : Call DispPop( 0 ) End If End If End If End If
Case Keys.D8, Keys.NumPad8 If BD( PX, PY - 2 ) = 0 Then If BD( PX, PY - 1 ) = 0 Then If BD( PX + 1, PY - 1 ) > 0 Then If BD( PX + 1, PY - 2 ) = 0 Then PX = PX + 1 : PY = PY - 2 : Call DispPop( 1 ) End If End If End If End If
Case Keys.Escape: Call DispSheet( ) Case Keys.T: btnTest.Visible = True End Select ' 面クリアの判定 If PY = 1 Then lblClear.Text = "クリア!!" For I = 1 To 3
lblClear.Visible = True : Application.DoEvents( ) System.Threading.Thread.Sleep( 500 )
lblClear.Visible = False : Application.DoEvents( ) System.Threading.Thread.Sleep( 500 )
Next I
If Sheet < MAX Then btnNext.Enabled = True End If
' ボタン(次へ)がクリックされた時の処理
Private Sub btnNext_Click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles btnNext.Click
btnNext.Enabled = False: Sheet += 1 : If Sheet > MAX Then Exit Sub Call DispSheet( )
End Sub
' 面を表示するジェネラルプロシージャ Private Sub DispSheet( )
Dim D( ) As String
Dim I, J, C, X, Y As Integer ' 面番号の表示
lblSheet.Text = StrConv( "第" & CStr( Sheet ) & "面", VbStrConv.Wide ) ' 仮想画面の初期化
For I = 1 To 21 : For J = 2 To 11 : BD( I, J ) = 0 : Next J : Next I If Sheet > 27 Then For I = 1 To 21 : BD( I, 12 ) = 0 : Next I Else For I = 1 To 21 : BD( I, 12 ) = 2 : Next I End If ' 面データの設定
D = Split( Sdata( Sheet - 1 ), "." ) ' 山の設定と表示 Mcnt = D( 0 ) : C = 1 : G.Clear( Color.Transparent ) For I = 1 To Mcnt X = D( C ) : Y = D( C + 1 ) : BD( X, Y ) = 2 : C += 2 G.DrawImage( picMountain.Image, X * 28, Y * 32 ) Next I If Sheet < 28 Then
For I = 1 To 21: G.DrawImage(picMountain.Image, I * 28, 12 * 32): Next End If ' 岩の設定と表示 Rcnt = D( C ) : C += 1 For I = 1 To Rcnt X = D( C ) : Y = D( C + 1 ) : BD( X, Y ) = 1 : C += 2 G.DrawImage( picRock.Image, X * 28, Y * 32 ) Next I picSheet.Refresh( ) ' ポップ君の設定と表示 PX = D( C ) : PY = D( C + 1 ) : Call DispPop( 0 ) End Sub ' ポップ君を表示するジェネラルプロシージャ Private Sub DispPop( ByRef N As Integer ) picPOP.Location = New Point( PX * 28, PY * 32 ) If N = 0 Then picPOP.Image = picLeft.Image Else picPOP.Image = picRight.Image End If End Sub ' 岩を消去するジェネラルプロシージャ
Private Sub DelRock( ByVal X As Integer, ByVal Y As Integer ) G.Clip = New Region( New Rectangle( X * 28, Y * 32, 28, 32 ))
G.Clear( Color.Transparent )
G.Clip = New Region( New Rectangle( 0, 0, 644, 416 )) End Sub End Class 5 3に同じ。 6 上記1と同様に、コー ド 記 述 画 面 を 表 示 し て、左記のコードを記 述する。 7 6に同じ。 8 6に同じ。
プログラムの概要
枠に当たるとボールが跳ね返るゴル フゲーム『バウンドゴルフ』です。 メニューバーの『ゲーム』から『スタ ート』をクリックするか、F5 キーを 押すと、ゲームがスタートする。 ボールが表示されると、左右の矢印キ ーを用いて、ボールを飛ばす方向を決 め、スペースを押す。 ボールを打つ力を加減するゲージが 表示されるので、適当な強さに成れば スペースを押す。 池(水色)に落ちたり、カラスにボー ルを奪われると、持ち球が減る。 猶、ゲームの難易度を『易しい』に設 定すると、グリーン(黄色)にボール が乗ると、グリーンが拡大表示されて、パッティングが容易に成る。 此のプログラムを土台に、更に、各自で機能を追加して行く事が望まれる。バウンド ゴルフ
VB 2005 ○24 □ アプリケーション画面のデザイン(標準コントロールの利用) □ プログラムの動作原理(イベント駆動型のプログラム) □ プログラムの構成要素(オブジェクトとプロパティ) □ 値の代入(変数、オブジェクトのプロパティ) □ グラフィックスの利用(Graphics オブジェクト) □ 条件に応じた処理(If 文の利用) □ 自動的に行われる処理(タイマーの利用) 今回の課題項目コントロールの種類 プロパティ プロパティの設定値 フォーム Name golf FormBorderStyle FixedSingle MaximizeBox False StartPosition CenterScreen Size 490, 440 Text バウンド ゴルフ グループボックス1 Name grpTitle Text 空白 ラベル1 Name lblTitle Font MS明朝、18、太字 Text バウンド ゴルフ ラベル2 Name lblHole Font MS明朝、16、太字 Text 1 ラベル3 Name lblMes Font MS明朝、12、太字 Text 番ホール ピクチャボックス6 パネル タイマー1 ラベル5 ラベル2
オ
オ
ブ
ブ
ジ
ジ
ェ
ェ
ク
ク
ト
ト
・
・
プ
プ
ロ
ロ
パ
パ
テ
テ
ィ
ィ
一
一
覧
覧
ピクチャボックス1~5 ラベル6 ラベル7 メニュー ラベル1 ラベル3 ピクチャボックス7 ピクチャボックス8 ラベル4 タイマー2 タイマー3 ピクチャボックス9 ピクチャボックス10 グループボックス4 グループボックス3 グループボックス2 グループボックス1コントロールの種類 プロパティ プロパティの設定値
ピクチャボックス1~5 Name picRest0 ~ picRest4
Image ball.gif Size 16, 16 Visible False パネル Name pnlGd BackColor Fuchsia Size 350, 318 ピクチャボックス6 Name picCrow BackColor Transparent Image crow0.gif Size 32, 16 ピクチャボックス7 Name picDir BackColor Transparent Image arrow0.gif Size 16, 16 ピクチャボックス8 Name picBall BackColor Transparent Image ball.gif Size 16, 16 ラベル4 Name lblMessage AutoSize False Font MS明朝、14、太字 Size 290, 21 Text 空白 TextAlign MiddleCenter ピクチャボックス9 Name picPower BackColor White BorderStyle FixedSingle Size 15, 318 ピクチャボックス10 Name picCharactor BackColor White Image aya.jpg Size 81, 185 SizeMode Zoom グループボックス2 Name grpScore Font MS明朝、8、太字 Text スコア ラベル5 Name lblScore AutoSize False Font MS明朝、10、太字 Size 57, 13 Text、TextAlign 空白、MiddleRight グループボックス3 Name grpPat Font MS明朝、8、太字 Text パット数
コントロールの種類 プロパティ プロパティの設定値 ラベル6 Name lblPat AutoSize False Font MS明朝、10、太字 Size 57, 13 Text、TextAlign 空白、MiddleRight グループボックス4 Name grpPer Font MS明朝、8、太字 Text パー数 ラベル7 Name lblPer AutoSize False Font MS明朝、10、太字 Size 57, 13 Text、TextAlign 空白、MiddleRight タイマー1 Name tmrCrow Interval 100 タイマー2 Name tmrPow Interval 50 タイマー3 Name tmrDir Interval 100 メニューストリップ Name mnuGolf
Items Name Text
mnuFile mnuGame mnuHelp ファイル(&F) ゲーム(&G) ヘルプ(&H)
Name DropDownItems ShortcutKeys Text
mnuFile mnuFileFinish Ctrl+Q 終了(&X)
mnuGame mnuGameStart F5 スタート(&S)
mnuGameLine
mnuGameLebel 難易度(&L)
mnuHelp mnuHelpIndex Ctrl+H 目次(&C)
mnuHelpLine
mnuHelpVersion バージョン情報(&V)
Name DropDownItems ShortcutKeys Text
mnuGameLebel mnuGameLevelEasy Ctrl+E 易しい(&E) mnuGameLevelDifficult Ctrl+D 難しい(&D)
■ メニューバーの作成 ■
メニューバーを作成するには、先ず、ツールボックス(メニューとツールバーのカテゴリ)で MenuStrip コントロールをダブルクリックして、フォームに追加する。猶、オブジェクト名は、プ ロパティ欄で設定する事が出来る。
Public Class golf
' 領域を塗り潰す API 関数の宣言
Private Declare Function ExtFloodFill Lib "gdi32" ( _ ByVal hdc As Integer, _
ByVal X As Integer, ByVal Y As Integer, _
ByVal crColor As Integer, ByVal wFillType As Integer _ ) As Integer
Private Const FLOODFILLBORDER As Short = 0 Private Const FLOODFILLSURFACE As Short = 1 ' フォームレベルでグローバルな変数の宣言 Private PT As String Private ND As Short Private G As Graphics Private B As Bitmap
Private ImgD( 7 ) As Bitmap Private ImgC( 1 ) As Bitmap Private Gp As Graphics Private HL As Integer ' ホール番号 Private SC As Integer ' スコア Private BO As Integer ' ボール数 Private PU As Integer ' パット数 Private PA As Integer ' パー数 Private HX As Integer ' ホールX座標 Private HY As Integer ' ホールY座標 Private CX As Integer ' カラスX座標 Private CY As Integer ' カラスY座標 Private SX As Integer ' ボールX座標 Private SY As Integer ' ボールY座標 Private DR As Integer ' 飛行方向 Private FX As Integer ' 横飛行方向 Private FY As Integer ' 縦飛行方向 Private KF As Integer ' キーフラグ Private PW As Integer ' パワー Private DF As Integer ' 難易度 ' メニュー(レベル-難しい)がクリックされた時の処理
Public Sub mnuGameLevelDifficult_Click( ByVal eventSender As System.Object, _ ByVal eventArgs As System.EventArgs ) Handles mnuGameLevelDifficult.Click DF = 1 mnuGameLevelEasy.Checked = False mnuGameLevelDifficult.Checked = True End Sub ' メニュー(レベル-易しい)がクリックされた時の処理
Public Sub mnuGameLevelEasy_Click( ByVal eventSender As System.Object, _ ByVal eventArgs As System.EventArgs ) Handles mnuGameLevelEasy.Click DF = 0 mnuGameLevelEasy.Checked = True mnuGameLevelDifficult.Checked = False End Sub