ウォームアップ講座 17~30

Size: px
Start display at page:

Download "ウォームアップ講座 17~30"

Transcription

1 紛らわしい神経衰弱 VB プログラムの概要 子供でも出来るカードゲーム 神経衰弱 です 画面上の 開始 ボタンをクリックすると ゲームが開始する カードを 2 枚クリックして 何回で総てを揃えられるかを競う 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り 楽しみ乍ら プログラムの制作手順を習得する事を目的として居る 制作手順としては 実際の作業過程に従い 段階的に機能を追加する方法を採用して居る 此のプログラムを土台に 更に 各自で機能を追加して行く事が望まれる 今回の課題項目 アプリケーション画面のデザイン ( 標準コントロールの利用 ) プログラムの動作原理 ( イベント駆動型のプログラム ) プログラムの構成要素 ( オブジェクトとプロパティ ) 値の代入 ( 変数 オブジェクトのプロパティ ) グラフィックスの利用 (Graphics オブジェクト ) 条件に応じた処理 (If 文の利用 ) 自動的に行われる処理 ( タイマーの利用 ) -1-

2 オブジェクト プロパティ一覧 ピクチャボックス 22 個 piccard00 piccard01 piccard02 piccard03 piccard04 piccard05 piccard06 piccard07 piccard08 piccard09 piccard10 piccard11 piccard12 piccard13 piccard14 piccard15 piccard16 piccard17 piccard18 piccard19 piccard20 piccard21 ボタン ラベル 1 ラベル 2 コントロールの種類 プロパティ プロパティの設定値 フォーム Name breakdown FormBorderStyle FixedSingle Size 880, 848 StartPosition CenterScreen 紛らわしい神経衰弱 ピクチャボックス1~22 Name piccard00~piccard21 Image back.gif Size 140, 200 ラベル1 Name lblmes Red MS 明朝, 14 太字 ForeColor White 空白 Align MiddleCenter ラベル2 Name lbltotal MS 明朝, 14 太字 回数 :00 回 ボタン Name btnstart 開始 -2-

3 プログラムリスト 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 P( I ).Image = B( C( I )) : lblmes. = N( C( I )) : Application.DoEvents( ) If Cnt = 2 Then lbltotal. = " 回数 :" & (Val(lblTotal..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 ) Cnt = 0 ' フォームが読み込まれた時の処理 Private Sub breakdown_load(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load 1 コード記述画面を表示して左記のコードを入力する 2 上記 1 と同様に コード記述画面を表示して 左記のコードを記述する ' 画像の読込 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( ) 3 フォーム上のコントロールを配置して居ない処をダブルクリックして コード画面を表示し 左記のコードを入力する -3-

4 ' ボタン ( 開始 ) がクリックされた時の処理 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 4 デザイン画面で ボタンをダブルクリックして コード画面を表示し 左記のコードを入力する ' カードの表示 For I = 0 To 21 P( I ).Image = B( 11 ) : P( I ).Visible = True Next lbltotal. = " 回数 :00 回 " Cnt = 0 : Obt = 0 : btnstart.enabled = False End Class -4-

5 ビンゴ VB プログラムの概要 パーティや地蔵盆で良く行われるゲーム ビンゴ です 76 枚用と 100 枚用の 2 種類を選択する事が出来ます 遊び方は 特に説明する必要は無いでせう ビンゴカードを印刷する機能を備えた拡張版も用意してますので 参考に仕て下さい 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り 楽しみ乍ら プログラムの制作手順を習得する事を目的として居る 制作手順としては 実際の作業過程に従い 段階的に機能を追加する方法を採用して居る 此のプログラムを土台に 更に 各自で機能を追加して行く事が望まれる 今回の課題項目 アプリケーション画面のデザイン ( 標準コントロールの利用 ) プログラムの動作原理 ( イベント駆動型のプログラム ) プログラムの構成要素 ( オブジェクトとプロパティ ) 値の代入 ( 変数 オブジェクトのプロパティ ) グラフィックスの利用 (Graphics オブジェクト ) 条件に応じた処理 (If 文の利用 ) 自動的に行われる処理 ( タイマーの利用 ) -5-

6 オブジェクト プロパティ一覧 ピクチャボックス ラベル ボタン グループボックス タイマー ラジオボタン 1 ラジオボタン 2 コントロールの種類 プロパティ プロパティの設定値 フォーム Name bingo Black FormBorderStyle FixedSingle Size 1034, 682 StartPosition CenterScreen BINGO ピクチャボックス Name picbingo Image bingo.gif Location 784, 12 Size 222, 142 ラベル Name lblhit White MS ゴシック 120 太字 Location 780, 166 Size 230, 182 空白 Align MiddleCenter ボタン Name btnstart Silver Times New Roman 18 太字 Location 780, 372 Size 232, 123 START タイマー Name tmrgo ラジオボタン1 Name rad75 ラジオボタン2 Name rad99-6-

7 プログラムリスト 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 1 コード記述画面を表示して左記のコードを入力する ' ゲームを初期化するジェネラルプロシージャ 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 2 上記 1 と同様に コード記述画面を表示して 左記のコードを記述する ' フォームが読み込まれた時の処理 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) * , ( I 10 ) * ). = Color.Black.ForeColor = Color.White.Align = ContentAlignment.MiddleRight. = New ( "MS ゴシック ", 36.0!, Style.Bold ). = I.ToString( ).Visible = True Me.Controls.Add( lblnumber( I )) End With Next ' ゲームの初期化 Randomize( ) : Lmt = 100 : Call GameInit( ) 画面に 1 桁しか表示され ない環境では フォントの サイズを小さくする (30.0 位 ) 3 フォーム上のコントロールを配置して居ない処をダブルクリックして コード画面を表示し 左記のコードを入力する -7-

8 ' ラジオボタン ( 範囲 ) の選択状態が変化した時の処理 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 Call GameInit( ) 4 デザイン画面でラジオボタン 1 をダブルクリックして コード画面を表示し 左記のコードを入力する ' ボタン ( スタート ) がクリックされた時の処理 Private Sub btnstart_click( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles btnstart.click If btnstart. = "START" Then Cnt = 0 tmrgo.interval = 100 tmrgo.enabled = True Else Call GameInit( ) btnstart. = "START" 5 デザイン画面でボタンをダブルクリックして コード画面を表示し 左記のコードを入力する ' タイマーが一定間隔で行う処理 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 lblnumber( N ).ForeColor = Color.Red Pre = N : Cnt = Cnt + 1 If Cnt > 14 Then tmrgo.interval += デザイン画面でタイマーをダブルクリックして コード画面を表示し 左記のコードを入力する If Cnt > 19 Then tmrgo.enabled = False lblhit. = N.ToString( ) Pre = -1 : Lmt -= 1 If Lmt < 1 Then btnstart. = "RESET" Else For I = R To ( Lmt - 1 ) Num( I ) = Num( I + 1 ) Next I End Class -8-

9 パクリス VB プログラムの概要 謂わずと知れた落ち物ゲーム テトリス の超簡易版 パクリス です 画面上の スタート ボタンをクリックすると 画面右側の領域で 上からブロックが落ちて来ます 左右の矢印キーでブロックを左右に移動させて色が揃う様に落下させます 下向きの矢印キーで一気に落下させる事も出来ます 此のゲームでは ブロックを回転させたり 連鎖消去する事は出来ないが 落ちゲー の基本が解ると思う 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り 楽しみ乍ら プログラムの制作手順を習得する事を目的として居る 制作手順としては 実際の作業過程に従い 段階的に機能を追加する方法を採用して居る 此のプログラムを土台に 更に 各自で機能を追加して行く事が望まれる 今回の課題項目 アプリケーション画面のデザイン ( 標準コントロールの利用 ) プログラムの動作原理 ( イベント駆動型のプログラム ) プログラムの構成要素 ( オブジェクトとプロパティ ) 値の代入 ( 変数 オブジェクトのプロパティ ) グラフィックスの利用 (Graphics オブジェクト ) 条件に応じた処理 (If 文の利用 ) 自動的に行われる処理 ( タイマーの利用 ) -9-

10 オブジェクト プロパティ一覧 ピクチャボックス 1 ピクチャボックス 2 ラベル 1 ラベル 2 ボタン タイマー コントロールの種類 プロパティ プロパティの設定値 フォーム Name pacris パクリス - テトリスのパクリ ピクチャボックス1 Name piclogo Image pacris.jpg Size 320, 122 ピクチャボックス2 Name picscreen Black Size 300, 300 ラベル1 Name lblmes Red BorderStyle Fixed3D HG 創英角ホ ッフ 体 22 太字 GAME OVER Align MiddleCenter ラベル2 Name lblscr Blue HG 創英角ホ ッフ 体 18 太字 ForeColor White 0 Align MiddleRight ボタン Name btnstart START タイマー Name tmrmove Interval

11 プログラムリスト 1 Public 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 ' ボタン (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. = Scr.ToString( ) Call StartPos( ) tmrmove.enabled = True 2 フォーム上のコントロールを配置して居ない処をダブルクリックして コード画面を表示し 左記のコードを入力する 3 デザイン画面で ボタンをダブルクリックして コード画面を表示し 左記のコードを入力する ' スタート位置を表示するジェネラルプロシージャ Private Sub StartPos( ) BX = Int( Rnd( ) * 10 ) : BY = 0 M(BY, BX) = Int(Rnd( ) * ) Call DrawScreen( ) ' 画面を書き換えるジェネラルプロシージャ 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( ) 4 上記 1 と同様に コード記述画面を表示して 左記のコードを記述する ' ブロックを消去するジェネラルプロシージャ 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 If BX < 9 AndAlso M( BY, BX + 1 ) = M( BY, BX ) Then -11-

12 M( BY, BX + 1 ) = 0 : P += 1 If BY < 9 AndAlso M( BY + 1, BX ) = M( BY, BX ) Then M( BY + 1, BX ) = 0 : P += 1 If P > 0 Then M( BY, BX ) = 0 : Call DrawScreen( ) Scr += ( 2 ^ ( P - 1 )) : lblscr. = Scr.ToString( ) If Scr > 0 And ( Scr Mod 10 = 0 ) Then If tmrmove.interval > 100 Then tmrmove.interval = ( Scr 10 ) * 100 ' タイマーが一定間隔で行う処理 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 Else M( BY + 1, BX ) = M( BY, BX ) : M( BY, BX ) = 0 : BY += 1 Call DrawScreen( ) ' キーが開放された時の処理 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( ) 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( ) 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 Class デザイン画面で タイマーをダブルクリックして コード画面を表示し 左記のコードを入力する 7 フォームのイベント一覧より KeyUp イベントをダブルクリックして 左記のコードを入力する

13 烏賊と蛸のボクシング VB プログラムの概要 烏賊と蛸を戦わすゲーム ボクシング です 画面上の スタート ボタンをクリックする ( 又は エンターキーを押す ) と ゲームが開始する プレーヤーは烏賊で 左右の矢印キーで前進 後進し スペースキーでパンチを放つ 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り 楽しみ乍ら プログラムの制作手順を習得する事を目的として居る 制作手順としては 実際の作業過程に従い 段階的に機能を追加する方法を採用して居る 此のプログラムを土台に 更に 各自で機能を追加して行く事が望まれる 今回の課題項目 アプリケーション画面のデザイン ( 標準コントロールの利用 ) プログラムの動作原理 ( イベント駆動型のプログラム ) プログラムの構成要素 ( オブジェクトとプロパティ ) 値の代入 ( 変数 オブジェクトのプロパティ ) グラフィックスの利用 (Graphics オブジェクト ) 条件に応じた処理 (If 文の利用 ) 自動的に行われる処理 ( タイマーの利用 ) -13-

14 オブジェクト プロパティ一覧 ラベル 1 ラベル 2 ラベル 3 パネル プログレスバー 1 プログレスバー 2 ボタン タイマー コントロールの種類 プロパティ プロパティの設定値 フォーム Name boxing FormBorderStyle FixedSingle MaximizeBox False StartPosition CenterScreen 烏賊と蛸のボクシング ラベル1 Name lblmes1 MS 明朝, 14 太字 只今 ラベル2 Name lblscore MS 明朝, 14 太字 0 Align MiddleRight ラベル3 Name lblmes2 MS 明朝, 14 太字 勝抜き中です! パネル Name pnlring White Size 400, 100 プログレスバー 1 Name prgoctopus プログレスバー 2 Name prgsquid ボタン Name btnstart スタート タイマー Name tmrgame Interval

15 プログラムリスト 1 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( ) 2 フォーム上のコントロールを配置して居ない処をダブルクリックして コード画面を表示し 左記のコードを入力する ' キャラクタを表示するジェネラルプロシージャ 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( ) ' ゲームを初期化するジェネラルプロシージャ Private Sub GameInit( ) Po = 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 3 上記 1 と同様に コード記述画面を表示して 左記のコードを記述する ' ボタン ( スタート ) がクリックされた時の処理 Private Sub btnstart_click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles btnstart.click Cnt = 0 : lblscore. = CStr( Cnt ) Call GameInit( ) Me.KeyPreview = True btnstart.enabled = False tmrgame.enabled = True 4 デザイン画面で ボタンをダブルクリックして コード画面を表示し 左記のコードを入力する -15-

16 ' キーが押された時の処理 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 5 フォームのイベント一覧より KeyDown イベントをダブルクリックして 左記のコードを入力する ' タイマーが一定間隔で自動的に行う処理 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 If Po = 0 Then Cnt = Cnt + 1 : lblscore. = CStr( Cnt ) ' 勝抜き人数 Call GameInit( ) Exit Sub ElseIf Ps = 0 Then tmrgame.enabled = False btnstart.enabled = True MsgBox( "KO 負け!", MsgBoxStyle.Exclamation, " 結果 " ) Q = 0 End Class 6 デザイン画面で タイマーをダブルクリックして コード画面を表示し 左記のコードを入力する -16-

17 ビーチバレー VB プログラムの概要 烏賊と蛸が夕日を背に対戦する対戦型アクションゲーム ビーチバレー です 画面上の スタート ボタンをクリックする ( 又は エンターキーを押す ) と ゲームが開始する 10 点先取で勝ちで有る 夫々れのプレーヤーは 画面に表示されたキー操作で烏賊や蛸を操る 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り 楽しみ乍ら プログラムの制作手順を習得する事を目的として居る 制作手順としては 実際の作業過程に従い 段階的に機能を追加する方法を採用して居る 此のプログラムを土台に 更に 各自で機能を追加して行く事が望まれる 今回の課題項目 アプリケーション画面のデザイン ( 標準コントロールの利用 ) プログラムの動作原理 ( イベント駆動型のプログラム ) プログラムの構成要素 ( オブジェクトとプロパティ ) 値の代入 ( 変数 オブジェクトのプロパティ ) グラフィックスの利用 (Graphics オブジェクト ) 条件に応じた処理 (If 文の利用 ) 自動的に行われる処理 ( タイマーの利用 ) -17-

18 オブジェクト プロパティ一覧 ラベル 2 ラベル 1 パネル ピクチャボックス 3 ピクチャボックス 1 ピクチャボックス 2 ピクチャボックス 4 ピクチャボックス 5 ボタン タイマー コンボボックス コントロールの種類 プロパティ プロパティの設定値 フォーム Name volleyball Navy BackGroundImage back.gif FormBorderStyle FixedSingle MaximizeBox False StartPosition CenterScreen ビーチバレー パネル Name pnlground Transparent Location 16, 14 Size 512, 426 ラベル1 Name lblscore0 Transparent MS 明朝, 14 太字 ForeColor White 0-18-

19 コントロールの種類 プロパティ プロパティの設定値 ラベル2 Name lblscore1 Transparent MS 明朝, 14 太字 ForeColor White 0 Align MiddleRight ピクチャボックス1 Name picshadow Transparent Image shadow.gif ピクチャボックス2 Name picoctopus Transparent Image tako1.gif ピクチャボックス3 Name picturtle Transparent Image kame1.gif ピクチャボックス4 Name picball Transparent Image ball.gif ピクチャボックス5 Name picsquid Transparent Image ika1.gif ボタン Name btnstart Cyan HG 創英角ホ ッフ 体 12 太字 スタート コンボボックス Name cbolevel Cyan MS 明朝 10 標準 Items 初級中級上級 タイマー Name tmrgame Interval

20 プログラムリスト 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 1 コード記述画面を表示して左記のコードを入力する 2 上記 1 と同様に コード記述画面を表示して 左記のコードを記述する ' ゲームを初期化するジェネラルプロシージャ 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. = S1.ToString( ) S2 = 0 : lblscore1. = S2.ToString( ) ' フォームが読み込まれた時の処理 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( ) ' ボタン ( スタート ) がクリックされた時の処理 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 フォーム上のコントロールを配置して居ない処をダブルクリックして コード画面を表示し 左記のコードを入力する 4 デザイン画面で ボタンをダブルクリックして コード画面を表示し 左記のコードを入力する

21 ' コンボボックス ( レベル ) がクリックされた時の処理 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 ) ' キーが押された時の処理 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 = * K1 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 = * K2 End Select ' タイマーが一定間隔で自動的に行う処理 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 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 If Q2 > 0 Then Q2 = Q2-1 picoctopus.image = Octopus( Math.Sign( Q2 )) デザイン画面で コンボボックスをダブルクリックして コード画面を表示し 左記のコードを入力する 6 フォームのイベント一覧より KeyDown イベントをダブルクリックして 左記のコードを入力する 7 デザイン画面で タイマーをダブルクリックして コード画面を表示し 左記のコードを入力する

22 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. = S1.ToString( ) : X = 32 If S1 > 9 Then tmrgame.enabled = False MsgBox( " 烏賊の勝ち!", MsgBoxStyle.Information, " 試合終了 " ) btnstart.enabled = True : cbolevel.enabled = True Exit Sub Else S2 = S2 + 1 : lblscore1. = S2.ToString( ) : X = 448 If S2 > 9 Then tmrgame.enabled = False MsgBox( " 蛸の勝ち!", MsgBoxStyle.Information, " 試合終了 " ) btnstart.enabled = True : cbolevel.enabled = True Exit Sub 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 Class -22-

23 バイオリズム VB プログラムの概要 体のリズムを知る バイオリズム プログラムで有る 体のリズムは 身体 感情 知性の 3 種のリズムから出来て居て 此等は一定の周期で 高調期と低調期を繰り返す 此等のリズムは 一定の周期で繰り返されるので 明日や更に先の自分のコンディションを前以て知る事が出来る 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り 楽しみ乍ら プログラムの制作手順を習得する事を目的として居る 制作手順としては 実際の作業過程に従い 段階的に機能を追加する方法を採用して居る 此のプログラムを土台に 更に 各自で機能を追加して行く事が望まれる 今回の課題項目 アプリケーション画面のデザイン ( 標準コントロールの利用 ) プログラムの動作原理 ( イベント駆動型のプログラム ) プログラムの構成要素 ( オブジェクトとプロパティ ) 値の代入 ( 変数 オブジェクトのプロパティ ) グラフィックスの利用 (Graphics オブジェクト ) 条件に応じた処理 (If 文の利用 ) 自動的に行われる処理 ( タイマーの利用 ) -23-

24 オブジェクト プロパティ一覧 ラベル 1 上段 : ラベル 下段 : ラベル パネル 適宜作成 上段 : テキストボックス 1 下段 : テキストボックス 2 上段 : コンボボックス 1 3 下段 : コンボボックス 2 ボタン 1 ボタン 2 ピクチャボックス コントロールの種類 プロパティ プロパティの設定値 フォーム Name biorhythm FormBorderStyle FixedSingle MaximizeBox False StartPosition CenterScreen バイオリズム ラベル1 Name lbltitle HG 創英角ホ ッフ 体 24 標準 バイオリズムプログラム ラベル2 Name lblbirthday MS 明朝 12 太字 誕生日西暦 ラベル3 Name lblyearb MS 明朝 12 太字 年 ラベル4 Name lblmonthb MS 明朝 12 太字 月 ラベル5 Name lbldayb MS 明朝 12 太字 日 -24-

25 コントロールの種類 プロパティ プロパティの設定値 ラベル6 Name lbltarget MS 明朝 12 太字 表示月西暦 ラベル7 Name lblyeart MS 明朝 12 太字 年 ラベル8 Name lblmontht MS 明朝 12 太字 月 テキストボックス1 Name txtyearb MS 明朝 12 太字 自分の誕生年 Align Right テキストボックス2 Name txtyeart MS 明朝 12 太字 空白 Align Right コンボボックス1 Name cbomonthb MS 明朝 12 太字 Items 1~12 自分の誕生月 コンボボックス2 Name cbomontht MS 明朝 12 太字 Items 1~12 空白 コンボボックス3 Name cbodayb MS 明朝 12 太字 Items 1~31 自分の誕生日 ボタン1 Name btnstart MS 明朝 11 太字 表示 ボタン2 Name btnfinish MS 明朝 11 太字 終了 ピクチャボックス Name picdisp Black Size 621, 211 パネル Name pnlexplain 適宜作成 肉体面は赤感情面は緑 知性面は青 -25-

26 プログラムリスト Public Class biorhythm Private Const PI As Single = / 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 1 コード記述画面を表示して左記のコードを入力する 2 ' 表示月の日数の設定 Y = Val( txtyeart. ) M = Val( cbomontht. ) 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., Brushes.White, X + 5, 1 ) Next GR.DrawLine( Pens.White, 0, 10, 620, 10 ) GR.DrawLine( Pens.White, 0, 110, 620, 110 ) picdisp.refresh( ) ' フォームが読み込まれた時の処理 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. = 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 上記 1 と同様に コード記述画面を表示して 左記のコードを記述する 3 フォーム上のコントロールを配置して居ない処をダブルクリックして コード画面を表示し 左記のコードを入力する -26-

27 ' ボタン ( 表示 ) がクリックされた時の処理 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. ) : If Y1 = 0 Then Exit Sub Dim M1 As Integer = Val( cbomonthb. ) : If M1 = 0 Then Exit Sub Dim D1 As Integer = Val( cbodayb. ) : If D1 = 0 Then Exit Sub Dim Y2 As Integer = Val( txtyeart. ) : If Y2 = 0 Then Exit Sub Dim M2 As Integer = Val( cbomontht. ) : 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 4 デザイン画面で ボタンをダブルクリックして コード画面を表示し 左記のコードを入力する ' 位相の算出 (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 = 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 ) PX = PX + ST Next Next picdisp.refresh( ) ' ボタン ( 終了 ) がクリックされた時の処理 Private Sub btnfinish_click(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles btnfinish.click Me.Dispose( ) End End Class 5 デザイン画面で ボタンをダブルクリックして コード画面を表示し 左記のコードを入力する -27-

28 ポップ君の山登り VB プログラムの概要 面クリア型のパズルゲーム ポップ君の山登り で有る 画面右欄に表示されるキー操作 ( 押すキーと移動先の関係を示す ) に従い ポップ君を山の頂上に導く事が出来れば 面クリアで有る 但し 1 段下には降りる事が出来るが 2 段下には降りる事は出来ない 亦 岩は 1 個なら押す事が出来るが 引っ張る事は出来ない 全 33 面が用意されて居る 面データを解析し 新しい面作成に挑戦して欲しい 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り 楽しみ乍ら プログラムの制作手順を習得する事を目的として居る 制作手順としては 実際の作業過程に従い 段階的に機能を追加する方法を採用して居る 此のプログラムを土台に 更に 各自で機能を追加して行く事が望まれる 今回の課題項目 アプリケーション画面のデザイン ( 標準コントロールの利用 ) プログラムの動作原理 ( イベント駆動型のプログラム ) プログラムの構成要素 ( オブジェクトとプロパティ ) 値の代入 ( 変数 オブジェクトのプロパティ ) グラフィックスの利用 (Graphics オブジェクト ) 条件に応じた処理 (If 文の利用 ) 自動的に行われる処理 ( タイマーの利用 ) -28-

29 オブジェクト プロパティ一覧 ラベル 1 ラベル 2 パネル ボタン 1 ピクチャボックス 1 ピクチャボックス2 ピクチャボックス3 ピクチャボックス4 ピクチャボックス5 ラベル3 ラベル4 ラベル5 ラベル6 ボタン2 ピクチャボックス 6 コントロールの種類 プロパティ プロパティの設定値 フォーム Name climbing Black FormBorderStyle FixedSingle MaximizeBox False StartPosition CenterScreen ポップ君の山登り パネル Name pnlback BackgroundImage sky.gif Size 644, 416 ピクチャボックス1 Name picsheet Transparent Size 644, 416 ピクチャボックス2 Name picpop Transparent Image left.gif Size 28, 32 ラベル1 Name lblclear Transparent MS 明朝 20 太字 ForeColor Red クリア!! ラベル2 Name lbltitle Transparent MS 明朝 14 太字 ForeColor White ポップ君の山登り -29-

30 コントロールの種類 プロパティ プロパティの設定値 ラベル3 Name lblsheet AutoSize False Transparent MS 明朝 14 太字 ForeColor White Size 161, 19 第 1 面 Align MiddleCenter ラベル4 Name lblkeyoperation Transparent MS 明朝 14 太字 ForeColor White キー操作 ラベル5 Name lblexplain AutoSize False Transparent MS 明朝 18 太字 ForeColor White 図の様に記述する ラベル6 Name lblescape Transparent MS 明朝 9 太字 ForeColor White ESCキーで遣り直し ピクチャボックス3 Name picleft Transparent Image left.gif Size 28, 32 ピクチャボックス4 Name picright Transparent Image right.gif Size 28, 32 ピクチャボックス5 Name picmountain Transparent Image mountain.gif Size 28, 32 ピクチャボックス6 Name picrock Transparent Image rock.gif Size 28, 32 ボタン1 Name BtnTest テスト Visible False ボタン2 Name btnnext 次へ -30-

31 プログラムリスト 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 1 コード記述画面を表示して左記のコードを入力する ' フォームが読み込まれた時の処理 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 2 フォーム上のコントロールを配置して居ない処をダブルクリックして コード画面を表示し 左記のコードを入力する ' Graphics オブジェクトの生成 With picsheet.image = New Bitmap(.Width,.Height ) G = Graphics.FromImage(.Image ) End With ' 第 1 面の表示 Sheet = 1 : Call DispSheet( ) ' 画面表示テスト 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( ) デザイン画面で ボタンをダブルクリックして コード画面を表示し 左記のコードを入力する

32 ' フォーム上でキー入力が為された時の処理 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 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 ) 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 Else If BD( PX + 1, PY + 1 ) > 0 Then PX = PX + 1 : Call DispPop( 1 ) Else フォームのイベント一覧より KeyUp イベントをダブルクリックして 左記のコードを入力する

33 If BD( PX + 1, PY + 2 ) > 0 Then PX = PX + 1 : PY = PY + 1 : Call DispPop( 1 ) 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 ) 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 ) 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 ) 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 ) Case Keys.Escape: Call DispSheet( ) Case Keys.T: btntest.visible = True End Select ' 面クリアの判定 If PY = 1 Then lblclear. = " クリア!!" 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 -33-

34 ' ボタン ( 次へ ) がクリックされた時の処理 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( ) ' 面を表示するジェネラルプロシージャ Private Sub DispSheet( ) Dim D( ) As String Dim I, J, C, X, Y As Integer ' 面番号の表示 lblsheet. = 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 ' 面データの設定 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 ' 岩の設定と表示 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 ) ' ポップ君を表示するジェネラルプロシージャ 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 ' 岩を消去するジェネラルプロシージャ 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 ) 8 6に同じ G.Clip = New Region( New Rectangle( 0, 0, 644, 416 )) End Class に同じ 6 上記 1 と同様に コード記述画面を表示して 左記のコードを記述する 7 6 に同じ

35 バウンドゴルフ VB プログラムの概要 枠に当たるとボールが跳ね返るゴルフゲーム バウンドゴルフ です メニューバーの ゲーム から スタート をクリックするか F5 キーを押すと ゲームがスタートする ボールが表示されると 左右の矢印キーを用いて ボールを飛ばす方向を決め スペースを押す ボールを打つ力を加減するゲージが表示されるので 適当な強さに成ればスペースを押す 池 ( 水色 ) に落ちたり カラスにボールを奪われると 持ち球が減る 猶 ゲームの難易度を 易しい に設定すると グリーン ( 黄色 ) にボールが乗ると グリーンが拡大表示されて パッティングが容易に成る 此のプログラムを土台に 更に 各自で機能を追加して行く事が望まれる 今回の課題項目 アプリケーション画面のデザイン ( 標準コントロールの利用 ) プログラムの動作原理 ( イベント駆動型のプログラム ) プログラムの構成要素 ( オブジェクトとプロパティ ) 値の代入 ( 変数 オブジェクトのプロパティ ) グラフィックスの利用 (Graphics オブジェクト ) 条件に応じた処理 (If 文の利用 ) 自動的に行われる処理 ( タイマーの利用 ) -35-

36 オブジェクト プロパティ一覧 メニュー ラベル 1 ピクチャボックス 1~5 ラベル 2 グループボックス 1 ラベル 3 グループボックス 2 ラベル 5 パネル グループボックス 3 ラベル 6 ラベル 4 グループボックス 4 ラベル 7 ピクチャボックス 9 ピクチャボックス 10 ピクチャボックス 6 ピクチャボックス 7 ピクチャボックス 8 タイマー 1 タイマー 2 タイマー 3 コントロールの種類 プロパティ プロパティの設定値 フォーム Name golf FormBorderStyle FixedSingle MaximizeBox False StartPosition CenterScreen Size 490, 440 バウンドゴルフ グループボックス1 Name grptitle 空白 ラベル1 Name lbltitle MS 明朝 18 太字 バウンドゴルフ ラベル2 Name lblhole MS 明朝 16 太字 1 ラベル3 Name lblmes MS 明朝 12 太字 番ホール -36-

37 コントロールの種類 プロパティ プロパティの設定値 ピクチャボックス1~5 Name picrest0 ~ picrest4 Image ball.gif Size 16, 16 Visible False パネル Name pnlgd Fuchsia Size 350, 318 ピクチャボックス6 Name piccrow Transparent Image crow0.gif Size 32, 16 ピクチャボックス7 Name picdir Transparent Image arrow0.gif Size 16, 16 ピクチャボックス8 Name picball Transparent Image ball.gif Size 16, 16 ラベル4 Name lblmessage AutoSize False MS 明朝 14 太字 Size 290, 21 空白 Align MiddleCenter ピクチャボックス9 Name picpower White BorderStyle FixedSingle Size 15, 318 ピクチャボックス10 Name piccharactor White Image aya.jpg Size 81, 185 SizeMode Zoom グループボックス2 Name grpscore MS 明朝 8 太字 スコア ラベル5 Name lblscore AutoSize False MS 明朝 10 太字 Size 57, 13 Align 空白 MiddleRight グループボックス3 Name grppat MS 明朝 8 太字 パット数 -37-

38 コントロールの種類 プロパティ プロパティの設定値 ラベル6 Name lblpat AutoSize False MS 明朝 10 太字 Size 57, 13 Align 空白 MiddleRight グループボックス4 Name grpper MS 明朝 8 太字 パー数 ラベル7 Name lblper AutoSize False MS 明朝 10 太字 Size 57, 13 Align 空白 MiddleRight タイマー 1 Name tmrcrow Interval 100 タイマー 2 Name tmrpow Interval 50 タイマー 3 Name tmrdir Interval 100 メニューストリップ Name mnugolf Items Name mnufile mnugame mnuhelp ファイル (&F) ゲーム (&G) ヘルプ (&H) Name DropDownItems ShortcutKeys mnufile mnufilefinish Ctrl+Q 終了 (&X) mnugame mnugamestart F5 スタート (&S) mnugameline mnugamelebel 難易度 (&L) mnuhelp mnuhelpindex Ctrl+H 目次 (&C) mnuhelpline mnuhelpversion バージョン情報 (&V) Name DropDownItems ShortcutKeys mnugamelebel mnugameleveleasy Ctrl+E 易しい (&E) mnugameleveldifficult Ctrl+D 難しい (&D) メニューバーの作成 メニューバーを作成するには 先ず ツールボックス ( メニューとツールバーのカテゴリ ) で MenuStrip コントロールをダブルクリックして フォームに追加する 猶 オブジェクト名は プロパティ欄で設定する事が出来る -38-

39 プログラムリスト 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 Private HY As Integer Private CX As Integer Private CY As Integer Private SX As Integer Private SY As Integer Private DR As Integer Private FX As Integer Private FY As Integer Private KF As Integer Private PW As Integer Private DF As Integer ' ホール番号 ' スコア ' ボール数 ' パット数 ' パー数 ' ホールX 座標 ' ホールY 座標 ' カラスX 座標 ' カラスY 座標 ' ボールX 座標 ' ボールY 座標 ' 飛行方向 ' 横飛行方向 ' 縦飛行方向 ' キーフラグ ' パワー ' 難易度 1 コード記述画面を表示して左記のコードを入力する ' メニュー ( レベル - 難しい ) がクリックされた時の処理 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 ' メニュー ( レベル- 易しい ) がクリックされた時の処理 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 デザイン画面で メニュー項目をダブルクリックして コード画面を表示し 左記のコードを入力する 3 デザイン画面で メニュー項目をダブルクリックして コード画面を表示し 左記のコードを入力する

40 ' フォームが読み込まれた時の処理 Private Sub golf_load( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles MyBase.Load PT = Application.StartupPath : If Not PT.EndsWith( " " ) Then PT &= " " For I As Integer = 0 To 7 ImgD( I ) = New Bitmap( "arrow" & I.ToString( ) & ".gif" ) Next For I As Integer = 0 To 1 ImgC( I ) = New Bitmap( "crow" & I.ToString( ) & ".gif" ) Next With pnlgd B = New Bitmap(.Width,.Height ).BackgroundImage = B G = Graphics.FromImage(.BackgroundImage ) End With With picpower.image = New Bitmap(.Width,.Height ) Gp = Graphics.FromImage(.Image ) End With Call FormInit( ) ' フォームの閉じるがクリックされた時の処理 Private Sub golf_formclosing( ByVal sender As Object, _ ByVal e As System.Windows.Forms.FormClosingEventArgs ) Handles Me.FormClosing Call mnufilefinish_click( mnufilefinish, New System.EventArgs( )) ' キー入力が為された時の処理 Private Sub golf_keydown( ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyEventArgs ) Handles Me.KeyDown Dim K As Integer = e.keycode ' 方向決定の場合 If KF = 1 Then If DF = 0 Then If K = Keys.Space Then KF = -1 ElseIf K = Keys.Right Then DR = DR + 1 : If DR > 7 Then DR = 0 Call DispDir( ) ElseIf K = Keys.Left Then DR = DR - 1 : If DR < 0 Then DR = 7 Call DispDir( ) Else If K = Keys.Space Then tmrdir.enabled = False: KF = -1 ' パワー決定の場合 ElseIf KF = 2 Then If K = Keys.Space Then tmrpow.enabled = False: KF = フォーム上のコントロールを配置して居ない処をダブルクリックして コード画面を表示し 左記のコードを入力する 5 フォームのイベント一覧より FormClosing イベントをダブルクリックして 左記のコードを入力する 6 フォームのイベント一覧より KeyDown イベントをダブルクリックして 左記のコードを入力する

41 ' メニュー ( 終了 ) がクリックされた時の処理 Private Sub mnufilefinish_click( ByVal sender As System.Object, _ ByVal e As System.EventArgs ) Handles mnufilefinish.click If tmrdir.enabled = True Then tmrdir.enabled = False If tmrpow.enabled = True Then tmrpow.enabled = False If tmrdir.enabled = True Then tmrdir.enabled = False Application.Exit( ) ' メニュー ( スタート ) がクリックされた時の処理 Private Sub mnugamestart_click( ByVal sender As System.Object, _ ByVal e As System.EventArgs ) Handles mnugamestart.click 7 デザイン画面で メニュー項目をダブルクリックして コード画面を表示し 左記のコードを入力する Call VarInit( ) lbltitle.visible = False lblhole.visible = True lblmes.visible = True For I As Integer = 0 To 4 Me.grpTitle.Controls( "picrest" & I.ToString( )).Visible = True Next I lblmessage.visible = False Do Until HL > 9 Call GameLoop( ) If tmrcrow.enabled = True Then tmrcrow.enabled = False piccrow.visible = False picball.visible = False Loop Call DispBall( ) If BO > 0 Then lblmessage. = " ホールアウト " Else lblmessage. = " ボールが無く成りました!" lblmessage.visible = True 8 デザイン画面で メニュー項目をダブルクリックして コード画面を表示し 左記のコードを入力する ' タイマ ( カラス ) が一定間隔で自動的に行う処理 Private Sub tmrcrow_tick( ByVal eventsender As System.Object, _ ByVal eventargs As System.EventArgs ) Handles tmrcrow.tick Static CF As Integer CX = CX - 2 : If CX < -16 Then CX = 480 piccrow.image = ImgC( CF ) piccrow.location = New Point( CX, CY ) CF = CF Xor 1 9 デザイン画面で タイマーをダブルクリックして コード画面を表示し 左記のコードを入力する ' タイマ ( 方向決定 ) が一定間隔で自動的に行う処理 Private Sub tmrdir_tick( ByVal eventsender As System.Object, _ ByVal eventargs As System.EventArgs ) Handles tmrdir.tick Call DispDir( ) DR = DR + 1 : If DR > 7 Then DR = 0 10 デザイン画面で タイマーをダブルクリックして コード画面を表示し 左記のコードを入力する -41-

42 ' タイマ ( パワー決定 ) が一定間隔で自動的に行う処理 Private Sub tmrpow_tick( ByVal eventsender As System.Object, _ ByVal eventargs As System.EventArgs ) Handles tmrpow.tick Gp.FillRectangle( Brushes.Red, 0, CInt( ( 318 / 200 ) * PW ), 15, 318 ) picpower.refresh( ) PW = PW + 10 : If PW > 200 Then PW = 0 : Gp.Clear( Color.White ) '======================= ' ジェネラルプロシージャ '======================= ' 画面を初期化するジェネラルプロシージャ Private Sub FormInit( ) ' グランドの描画 G.Clear( Color.Fuchsia ) G.FillRectangle( Brushes.White, 4, 4, 342, 310 ) G.FillRectangle( Brushes.DarkGreen, 8, 8, 334, 302 ) pnlgd.refresh( ) ' 難易度の設定 DF = 0 mnugameleveleasy.checked = True mnugameleveldifficult.checked = False ' 打撃方向を表示するジェネラルプロシージャ Private Sub DispDir( ) Dim X As Integer Dim Y As Integer Select Case DR Case 0, 4 FX = 0 : X = SX Case 1, 2, 3 FX = 1 : X = SX + 16 Case 5, 6, 7 FX = -1 : X = SX - 16 End Select Select Case DR Case 0, 1, 7 FY = -1 : Y = SY - 16 Case 2, 6 FY = 0 : Y = SY Case 3, 4, 5 FY = 1 : Y = SY + 16 End Select picdir.image = ImgD( DR ) picdir.location = New Point( X, Y ) ' 変数を初期化するジェネラルプロシージャ Private Sub VarInit( ) ' 変数の初期化 HL = 1 SC = 0 : Call DispScore( ) BO = 5 : Call DispBall( ) PU = 0 : Call DispPat( ) デザイン画面で メニュー項目をダブルクリックして コード画面を表示し 左記のコードを入力する 12 此れ以降は 総てジェネラルプロシージャなので コード記述画面を表示して左記のコードを入力する

43 ' 得点を表示するジェネラルプロシージャ Private Sub DispScore( ) Dim S As String If SC = 0 Then S = "±" ElseIf SC > 0 Then S = "+" Else S = "-" lblscore. = S & StrConv( CStr( System.Math.Abs( SC )), VbStrConv.Wide ) ' パット数を表示するジェネラルプロシージャ Private Sub DispPat( ) lblpat. = StrConv( CStr( PU ), VbStrConv.Wide ) ' パー数を表示するジェネラルプロシージャ Private Sub DispPer( ) lblper. = StrConv( CStr( PA ), VbStrConv.Wide ) ' ホール番号を表示するジェネラルプロシージャ Private Sub DispHole( ) lblhole. = StrConv( CStr( HL ), VbStrConv.Wide ) For I As Integer = 1 To 3 lblhole.forecolor = Color.Red : System.Threading.Thread.Sleep( 300 ) lblhole.forecolor = Color.Black : System.Threading.Thread.Sleep( 300 ) Next I ' 残りボールを表示するジェネラルプロシージャ Private Sub DispBall( ) For I As Integer = 0 To 4 Me.grpTitle.Controls( "picrest" & I.ToString( )).Visible = False Next I For I As Integer = 0 To ( BO - 1 ) Me.grpTitle.Controls( "picrest" & I.ToString( )).Visible = True Next I ' グランドを表示するジェネラルプロシージャ Private Sub DispGround( ) Dim F As String Dim D( ) As Byte Dim Z As Single Dim Q As Color Dim C, A, X, Y, R, I, J, W, H As Integer F = PT & "hole" & HL.ToString( "00" ) & ".bin" ReDim D( FileLen( F ) - 1 ) FileOpen( 1, F, OpenMode.Binary ) FileGet( 1, D ) FileClose( 1 ) G.FillRectangle( Brushes.DarkGreen, 8, 8, 334, 302 ) -43-

44 PA = D( 0 ) : Call DispPer( ) SX = D( 1 ) : SX = SX * SY = D( 2 ) : SY = SY * 2-48 CY = D( 3 ) : CY *= 2 A = 1 For I = ( SY - 4 ) To ( SY + 18 ) For J = ( SX - 12 ) To ( SX + 26 ) Step 2 B.SetPixel( J + A, I, Color.LightBlue ) Next J A = A Xor 1 Next I C = 4 Do A = D( C ) : C += 1 If A = 0 Then Exit Do If A = 10 Then X = D( C ) : HX = X * : C += 1 Y = D( C ) : HY = Y * : C += 1 G.FillEllipse( Brushes.Yellow, HX - 16, HY - 16, 32, 32 ) G.FillEllipse( Brushes.Black, HX - 3, HY - 3, 7, 7 ) Else Select Case A Case 2 : Q = Color.FromArgb( 255, 0, 255, 0 ) ' Green Case 6 : Q = Color.FromArgb( 255, 139, 0, 0 ) ' DarkRed Case 7 : Q = Color.FromArgb( 255, 0, 255, 255 ) ' Cyan Case 14 : Q = Color.FromArgb( 255, 128, 128, 128 ) ' Gray End Select X = D( C ) : X = X * : C += 1 Y = D( C ) : Y = Y * : C += 1 R = D( C ) : R *= 4 : C += 1 Z = D( C ) : C += 1 : If Z > 10 Then Z /= 100 If Z < 1 Then W = R : H = R * Z Else W = R * ( 1 / Z ) : H = R G.FillEllipse( New SolidBrush( Q ), CInt( X - W / 2 ), CInt( Y - H / 2 ), W, H ) Loop pnlgd.refresh( ) ' ゲームのメインループのジェネラルプロシージャ Private Sub GameLoop( ) Dim BX As Integer ' ボールX 座標 ( 初期位置 ) Dim BY As Integer ' ボールY 座標 ( 初期位置 ) Dim KX As Integer ' ボールX 座標 ( ショット位置 ) Dim KY As Integer ' ボールY 座標 ( ショット位置 ) Dim SS As Integer ' ボール速度 Dim I, J As Integer ' ループ用 Dim C As Color ' 判定用 ( 色で判定 ) Call DispGround( ) Call DispHole( ) CX = 480 : BX = SX : BY = SY : PU = 0 : Call DispPat( ) piccrow.location = New Point( CX, CY ) : piccrow.visible = True : tmrcrow.enabled = True picball.location = New Point( SX, SY ) : picball.visible = True -44-

45 Do picdir.location = New Point( SX, SY - 16 ) : picdir.visible = True ' 方向の決定 KF = 1 : Me.KeyPreview = True DR = 0 : Call DispDir( ) : If DF = 1 Then tmrdir.enabled = True Do Until KF < 0 : Application.DoEvents( ) : Loop Me.KeyPreview = False Call DispDir( ) ' パワーの決定 KF = 2 : Me.KeyPreview = True PW = 0 : tmrpow.enabled = True Do Until KF < 0 : Application.DoEvents( ) : Loop Me.KeyPreview = False Gp.FillRectangle( Brushes.Red, 0, CInt( ( 318 / 200 ) * PW ), 15, 318 ) picpower.refresh( ) picdir.visible = False PU = PU + 1 : Call DispPat( ) ' ボールの移動 SS = PW : KX = SX : KY = SY For I = 1 To PW SX = SX + FX * 2 : If SX < 8 Or SX > 325 Then FX = FX * (-1) SY = SY + FY * 2 : If SY < 8 Or SY > 293 Then FY = FY * (-1) picball.location = New Point( SX, SY ) : Application.DoEvents( ) ' 判定 If ( Math.Abs( SX - CX ) < 8 ) And ( Math.Abs( SY - CY )) < 8 Then tmrcrow.enabled = False SX = CX - 16 : SY = CY : picball.location = New Point( SX, SY ) piccrow.image = ImgC( 1 ) For J = CX To -16 Step -4 SX = J - 16 : picball.location = New Point( SX, SY ) CX = J : piccrow.location = New Point( CX, CY ) Application.DoEvents( ) System.Threading.Thread.Sleep( 50 ) Next J BO = BO - 1 : If BO = 0 Then BO = -1 : HL = 10 : Exit Sub Cal l DispBall( ) SX = BX : SY = BY : CX = 480 piccrow.location = New Point( CX, CY ) : tmrcrow.enabled = True picball.location = New Point( SX, SY ) Exit For Else C = B.GetPixel( SX + 8, SY + 8 ) Select Case C Case Color.FromArgb( 255, 0, 0, 0 ), Color.Black ' ホール If SS < 50 Then If PU = 1 Then lblmessage. = " ホールインワン!!" Else lblmessage. = " カップイン!" lblmessage.visible = True System.Threading.Thread.Sleep( 1000 ) Select Case ( PU - PA ) Case Is < -3: lblmessage. = " 嘘だろ!!" Case -3: lblmessage. = " アルバトロス " Case -2: lblmessage. = " イーグル " Case -1: lblmessage. = " バーディ " Case 0: lblmessage. = " パー " -45-

46 Case 1: lblmessage. = " ボギー " Case 2: lblmessage. = " ダブルボギー " Case 3: lblmessage. = " トリプルボギー " Case Else: lblmessage. = " 何んだ コリャ!!" End Select Application.DoEvents( ) System.Threading.Thread.Sleep( 2000 ) lblmessage.visible = False SC = SC + ( PU - PA ) : Call DispScore( ) HL = HL + 1 Exit Sub Case Color.FromArgb( 255, 255, 255, 0 ), Color.Yellow ' グリーン If ( SS < 50 ) And ( DF = 0 ) Then G.FillRectangle( Brushes.LightGreen, 4, 4, 342, 310 ) G.FillEllipse( Brushes.Black, 164, 148, 20, 20 ) SX = (( SX + 8 ) - HX ) * : SY = (( SY + 8 ) - HY ) * picball.location = New Point( SX, SY ) pnlgd.refresh( ) Exit For Case Color.FromArgb( 255, 139, 0, 0 ), Color.DarkRed ' 林 If SS < 70 Then SX = SX + ( Int( Rnd( ) * 3 ) - 1 ) * 6 : FX = Int( Rnd( ) * 3 ) - 1 If SX < 8 Then SX = 8 : FX = 1 If SX > 325 Then SX = 325 : FX = -1 SY = SY + ( Int( Rnd( ) * 3 ) - 1 ) * 6 : FY = Int( Rnd( ) * 3 ) - 1 If SY < 8 Then SY = 8 : FY = 1 If SY > 325 Then SY = 325 : FY = -1 picball.location = New Point( SX, SY ) Case Color.FromArgb( 255, 128, 128, 128 ), Color.Gray ' バンカー If SS < 80 Then lblmessage. = " バンカー!" : lblmessage.visible = True Application.DoEvents() System.Threading.Thread.Sleep( 2000 ) lblmessage.visible = False Exit For Case Color.FromArgb( 255, 0, 255, 255 ), Color.Cyan ' 池 If SS < 60 Then lblmessage. = " 池に落ちた!" : lblmessage.visible = True Application.DoEvents( ) System.Threading.Thread.Sleep( 2000 ) lblmessage.visible = False BO = BO - 1 : If BO = 0 Then BO = -1 : HL = 10 : Exit Sub Call DispBall( ) SX = KX : SY = KY : picball.location = New Point( SX, SY ) Exit For End Select SS -= 1 System.Threading.Thread.Sleep( 30 ) Next I Loop End Class -46-

47 三目並べ VB プログラムの概要 非常に単純なコンピュータ対戦型のボードゲーム 三目並べ です 画面上の 開始 をクリックすると 先手後手を決める画面が表示されるので 停止 をクリックする 後は 手番の時に桝目をクリックして 縦 横 斜めの孰れかに三目並べれば勝ちで有る 先手は 絶対に負けない一手が有り 非常に単純なゲームで有るが 五目並べや立体三目並べの原型と成るゲームで有る 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り 楽しみ乍ら プログラムの制作手順を習得する事を目的として居る 制作手順としては 実際の作業過程に従い 段階的に機能を追加する方法を採用して居る 此のプログラムを土台に 更に 各自で機能を追加して行く事が望まれる 今回の課題項目 アプリケーション画面のデザイン ( 標準コントロールの利用 ) プログラムの動作原理 ( イベント駆動型のプログラム ) プログラムの構成要素 ( オブジェクトとプロパティ ) 値の代入 ( 変数 オブジェクトのプロパティ ) グラフィックスの利用 (Graphics オブジェクト ) 条件に応じた処理 (If 文の利用 ) 自動的に行われる処理 ( タイマーの利用 ) -47-

48 オブジェクト プロパティ一覧 パネル ピクチャボックス ラベル ボタン 2 ボタン 1 タイマー コントロールの種類 プロパティ プロパティの設定値 フォーム Name three Green FormBorderStyle FixedSingle MaximizeBox False StartPosition CenterScreen 3 目並べ ピクチャボックス Name picboard Size 181, 181 ボタン1 Name btnstart Lime MS 明朝 12 太字 開始 パネル Name pnlturn 192, 255, 255( 薄水色 ) MS 明朝 12 太字 ForeColor White ボタン2 Name btnstop Cyan( 水色 ) MS 明朝 12 太字 停止 タイマー Name tmrturn Enabled False Interval

49 プログラムリスト Public Class three ' フォームクラスレベルでグローバルな変数の宣言 Private G As Graphics Private F As Boolean = False Private C, T, X( 8 ), W( 8 ) As Integer 1 コード記述画面を表示して左記のコードを入力する ' フォームが読み込まれた時の処理 Private Sub three_load( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles Me.Load ' 描画の為の Graphics オブジェクトの生成 With picboard.image = New Bitmap(.Width,.Height ) G = Graphics.FromImage(.Image ) End With Call GameInit( ) ' ボタン ( 開始 ) がクリックされた時の処理 Private Sub btnstart_click( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles btnstart.click pnlturn.visible = True tmrturn.enabled = True ' タイマー ( 順番決定 ) が一定間隔で自動的に行う処理 Private Sub tmrturn_tick(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles tmrturn.tick Static N As Integer = 0 If N Mod 2 = 0 Then lblturn. = " 先手 " : T = 0 Else lblturn. = " 後手 " : T = 1 N += 1 2 フォーム上のコントロールを配置して居ない処をダブルクリックして コード画面を表示し 左記のコードを入力する 3 デザイン画面で ボタンをダブルクリックして コード画面を表示し 左記のコードを入力する 4 デザイン画面で タイマーをダブルクリックして コード画面を表示し 左記のコードを入力する ' ボタン ( 停止 ) がクリックされた時の処理 Private Sub btnstop_click(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles btnstop.click tmrturn.enabled = False System.Threading.Thread.Sleep( 1000 ) pnlturn.visible = False Call GameInit( ) F = True : C = 0 If T = 1 Then Call Computer( ) 5 デザイン画面で ボタンをダブルクリックして コード画面を表示し 左記のコードを入力する -49-

50 ' ピクチャボックス ( 盤 ) でマウスをクリックした時の処理 Private Sub picboard_mouseup( ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs ) Handles picboard.mouseup Dim K As Integer = ( e.x 60 ) + ( e.y 60 ) * 3 If Not F Then Exit Sub If Not Math.Abs( X( K )) = 1 Then 6 ピクチャボックスを選択し イベント画面に切り替え MouseUp の項目をダブルクリックして 左記のコードを入力する G.FillRectangle( Brushes.Red, ( K Mod 3 ) * , ( K 3 ) * , 59, 59 ) picboard.refresh( ) X( K ) = 1 : C += 1 : Call Judge( ) If F Then Call Computer( ) ' ゲームを初期化する自作メソッド Private Sub GameInit( ) G.Clear( Color.White ) For I As Integer = 0 To 180 Step 60 G.DrawLine( Pens.Black, I, 0, I, 180 ) G.DrawLine( Pens.Black, 0, I, 180, I ) Next picboard.refresh( ) For I As Integer = 0 To 8 : X( I ) = 0 : W( I ) = 0 : Next 7 上記 1 と同様に コード記述画面を表示して 左記のコードを記述する ' 勝敗を判定する自作メソッド Private Sub Judge( ) Dim J As Integer = 0 If X( 0 ) + X( 1 ) + X( 2 ) = 3 Then J = 1 If X( 3 ) + X( 4 ) + X( 5 ) = 3 Then J = 1 If X( 6 ) + X( 7 ) + X( 8 ) = 3 Then J = 1 If X( 0 ) + X( 3 ) + X( 6 ) = 3 Then J = 1 If X( 1 ) + X( 4 ) + X( 7 ) = 3 Then J = 1 If X( 2 ) + X( 5 ) + X( 8 ) = 3 Then J = 1 If X( 0 ) + X( 4 ) + X( 8 ) = 3 Then J = 1 If X( 2 ) + X( 4 ) + X( 6 ) = 3 Then J = 1 If X( 0 ) + X( 1 ) + X( 2 ) = -3 Then J = 2 If X( 3 ) + X( 4 ) + X( 5 ) = -3 Then J = 2 If X( 6 ) + X( 7 ) + X( 8 ) = -3 Then J = 2 If X( 0 ) + X( 3 ) + X( 6 ) = -3 Then J = 2 If X( 1 ) + X( 4 ) + X( 7 ) = -3 Then J = 2 If X( 2 ) + X( 5 ) + X( 8 ) = -3 Then J = 2 If X( 0 ) + X( 4 ) + X( 8 ) = -3 Then J = 2 If X( 2 ) + X( 4 ) + X( 6 ) = -3 Then J = 2 8 上記 7 に引き続き コード記述画面を表示して 左記のコードを記述する If J = 1 Then MsgBox( " 貴方の勝ち!", MsgBoxStyle.Information, " 三目並べ " ) ElseIf J = 2 Then MsgBox( " 電脳の勝ち!", MsgBoxStyle.Information, " 三目並べ " ) ElseIf C = 9 Then MsgBox( " 引き分け " ) : J = 3 If J > 0 Then F = False -50-

51 ' コンピュータの思考ルーチンと成る自作メソッド Private Sub Computer( ) Dim K As Integer = -1 If Not Math.Abs( X( 0 )) = 1 Then If Math.Abs( X( 1 ) + X( 2 )) = 2 Then K = 0 If Math.Abs( X( 3 ) + X( 6 )) = 2 Then K = 0 If Math.Abs( X( 4 ) + X( 8 )) = 2 Then K = 0 If Not Math.Abs( X( 1 )) = 1 Then If Math.Abs( X( 0 ) + X( 2 )) = 2 Then K = 1 If Math.Abs( X( 4 ) + X( 7 )) = 2 Then K = 1 If Not Math.Abs( X( 2 )) = 1 Then 9 If Math.Abs( X( 0 ) + X( 1 )) = 2 Then K = 2 If Math.Abs( X( 5 ) + X( 8 )) = 2 Then K = 2 If Math.Abs( X( 4 ) + X( 6 )) = 2 Then K = 2 上記 8に引き続 If Not Math.Abs( X( 3 )) = 1 Then き コード記述画 If Math.Abs( X( 4 ) + X( 5 )) = 2 Then K = 3 面を表示して 左 If Math.Abs( X( 0 ) + X( 6 )) = 2 Then K = 3 記のコードを記 述する If Not Math.Abs( X( 4 )) = 1 Then If Math.Abs( X( 3 ) + X( 5 )) = 2 Then K = 4 If Math.Abs( X( 1 ) + X( 7 )) = 2 Then K = 4 If Math.Abs( X( 0 ) + X( 8 )) = 2 Then K = 4 If Math.Abs( X( 2 ) + X( 6 )) = 2 Then K = 4 If Not Math.Abs( X( 5 )) = 1 Then If Math.Abs( X( 3 ) + X( 4 )) = 2 Then K = 5 If Math.Abs( X( 2 ) + X( 8 )) = 2 Then K = 5 If Not Math.Abs( X( 6 )) = 1 Then If Math.Abs( X( 7 ) + X( 8 )) = 2 Then K = 6 If Math.Abs( X( 0 ) + X( 3 )) = 2 Then K = 6 If Math.Abs( X( 2 ) + X( 4 )) = 2 Then K = 6 If Not Math.Abs( X( 7 )) = 1 Then If Math.Abs( X( 6 ) + X( 8 )) = 2 Then K = 7 If Math.Abs( X( 1 ) + X( 4 )) = 2 Then K = 7 If Not Math.Abs( X( 8 )) = 1 Then If Math.Abs( X( 6 ) + X( 7 )) = 2 Then K = 8 If Math.Abs( X( 2 ) + X( 5 )) = 2 Then K = 8 If Math.Abs( X( 0 ) + X( 4 )) = 2 Then K = 8 If K < 0 Then Dim N As Integer = 0 For I As Integer = 0 To 8 If X( I ) = 0 Then W( N ) = I : N += 1 Next K = W( Int( Rnd( ) * N )) G.FillRectangle( Brushes.Blue, ( K Mod 3 ) * , ( K 3 ) * , 59, 59 ) picboard.refresh( ) X( K ) = -1 : C += 1 : Call Judge( ) End Class -51-

52 じゃんけんロック VB プログラムの概要 面クリア型のパズルゲーム じゃんけんロック で有る 上下左右の矢印キーで 対応する方向にキャラクタを移動させる 但し 四角の固定ロックには移動する事は出来ない 荷物とじゃんけんロックは 押して移動する事が出来るが 引っ張る事は出来ない 亦 じゃんけんロックは ジャンケンの規則に従い 消去する事が出来る 例えばグーの岩をチョキの岩に押し付けると チョキの岩は消滅する 荷物を家に送り届ければ 面クリアで有る 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り 楽しみ乍ら プログラムの制作手順を習得する事を目的として居る 制作手順としては 実際の作業過程に従い 段階的に機能を追加する方法を採用して居る 此のプログラムを土台に 更に 各自で機能を追加して行く事が望まれる 今回の課題項目 アプリケーション画面のデザイン ( 標準コントロールの利用 ) プログラムの動作原理 ( イベント駆動型のプログラム ) プログラムの構成要素 ( オブジェクトとプロパティ ) 値の代入 ( 変数 オブジェクトのプロパティ ) グラフィックスの利用 (Graphics オブジェクト ) 条件に応じた処理 (If 文の利用 ) 自動的に行われる処理 ( タイマーの利用 ) -52-

53 オブジェクト プロパティ一覧 ラベル 1 ピクチャボックス 1~10 ボタン 6 ラベル 2 パネル 1 グループボックス 1 パネル 2 コンボボックス ボタン 1 ボタン 2 グループボックス 2 ボタン 4 グループボックス 3 ボタン 3 ボタン 5 コントロールの種類 プロパティ プロパティの設定値 フォーム Name JankenRock Green MS 明朝 9 標準 FormBorderStyle FixedSingle KeyPreview True MaximizeBox False StartPosition CenterScreen ジャンケンロック ラベル1 Name lblnumber AutoSize False Transparent MS 明朝 16 標準 ForeColor White 第 1 面 Align MiddleCenter パネル1 Name pnlground 0, 192, 0 Size 384,

54 コントロールの種類 プロパティ プロパティの設定値 ラベル2 Name lblclear AutoSize False Transparent MS 明朝 20 太字 ForeColor 255, 255, 192 クリア!! Align MiddleCenter パネル2 Name pnlselect Black Visible False グループボックス1 Name grpselect MS 明朝 10 太字 ForeColor White クリア面 コンボボックス Name cboselect ボタン1 Name btnok MS 明朝 11 太字 決定 ボタン2 Name btncancel MS 明朝 11 太字 キャンセル グループボックス2 Name grpoperation ForeColor White 操作 ボタン3 Name btnreplay Enabled False 再生 ボタン4 Name btnnext Enabled False 次へ グループボックス3 Name grpachieve ForeColor White 実績 ボタン5 Name btnselect クリア面の選択 ボタン6 Name btntest テスト Visible False ピクチャボックス1~10 Name picbase0 ~ picbase9 Transparent Image 上図の通り Size 32, 32 作成した後 フォームのサイズを変更して見えなくする -54-

55 プログラムリスト Public Class JankenRock Friend Const MAX As Integer = 59 1 Private BD( 58, 11 ) As String Private ST( 11, 11 ) As String Private NS As Integer Private CX As Integer Private CY As Integer Private DP As String Private G As Graphics ' 面データ ' ステージデータ ' 面番号 ' X 座標 ' Y 座標 ' データパス コード記述画面を表示して左記のコードを入力する Private KeyRec( 1000 ) As Integer ' キー入力記録 Private Kcnt As Integer ' キー入力数 Private ReplayMode As Boolean ' 再生モードフラグ Private Num( MAX - 1 ) As Integer ' フォームが読み込まれた時の処理 Private Sub JankenRock_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load Dim I As Integer Dim J As Integer Dim F As String ' 面データファイル名の設定 DP = Application.StartupPath : If Not DP.EndsWith( " " ) Then DP &= " " F = DP & "JankenRock.dat" ' 面データの読込 FileOpen( 1, F, OpenMode.Input ) For I = 0 To 58 For J = 0 To 11 Input( 1, BD( I, J )) Next J Next I FileClose( 1 ) ' Graphics オブジェクトの生成 With pnlground.backgroundimage = New Bitmap(.Width,.Height ) G = Graphics.FromImage(.BackgroundImage ) End With 2 フォーム上のコントロールを配置して居ない処をダブルクリックして コード画面を表示し 左記のコードを入力する ' 着目面番号の初期化 NS = 0 ' 第 1 面の表示 Call DispSheet( ) -55-

56 ' フォーム上でキー入力が為された時の処理 Private Sub JankenRock_KeyUp( ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.KeyEventArgs ) Handles MyBase.KeyUp ' キー入力の記録 If ReplayMode = False Then KeyRec( Kcnt ) = e.keycode: Kcnt += 1 ' 入力キーに依る処理分岐 Call KeyOperation( e.keycode ) 3 フォームを選択し イベント画面に切り替え KeyUp の項目をダブルクリックして 左記のコードを入力する ' ボタン ( 次へ ) がクリックされた時の処理 Private Sub btnnext_click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles btnnext.click btnnext.enabled = False btnreplay.enabled = False NS = NS + 1 Call DispSheet( ): pnlground.focus( ) 4 デザイン画面のボタン btnnext をダブルクリックして コード画面を表示し 左記のコードを入力する ' ボタン ( 再生 ) がクリックされた時の処理 Private Sub btnreplay_click(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles btnreplay.click Dim I, K As Integer K = Kcnt : Call DispSheet( ) : Kcnt = K ReplayMode = True For I = 0 To ( Kcnt - 1 ) Call KeyOperation( KeyRec( I )) System.Threading.Thread.Sleep( 500 ) Next I 5 デザイン画面のボタン btnreplay をダブルクリックして コード画面を表示し 左記のコードを入力する ReplayMode = False: pnlground.focus( ) ' ボタン ( クリア面の選択 ) がクリックされた時の処理 Private Sub btnselect_click(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles btnselect.click Dim F As String Dim I, C As Integer C = 0 cboselect.items.clear( ) For I = 1 To MAX F = DP & I.ToString( "00" ) & ".dat" If Not Dir( F ) = "" Then cboselect.items.add( " 第 " & StrConv( I.ToString( ), vbwide ) & " 面 " ) Num( C ) = I : C += 1 Next I pnlselect.visible = True デザイン画面のボタン btnselect をダブルクリックして コード画面を表示し 左記のコードを入力する

57 ' ボタン ( 決定 ) がクリックされた時の処理 Private Sub btnok_click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles btnok.click Dim F As String Dim I, K, C As Integer If Not cboselect.selectedindex < 0 Then NS = Num( cboselect.selectedindex ) - 1 F = DP & Num( cboselect.selectedindex ).ToString( "00" ) & ".dat" FileOpen( 1, F, OpenMode.Input ) Input( 1, Kcnt ) For I = 0 To ( Kcnt - 1 ) Input( 1, KeyRec( I )) Next I FileClose( 1 ) K = Kcnt : Call DispSheet( ) : Kcnt = K If NS < MAX Then btnnext.enabled = True btnreplay.enabled = True pnlground.focus( ) pnlselect.visible = False ' ボタン ( キャンセル ) がクリックされた時の処理 Private Sub btncancel_click(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles btncancel.click pnlselect.visible = False ' 画面を表示するジェネラルプロシージャ Private Sub DispSheet( ) Dim I, J As Integer 7 デザイン画面のボタン btnok をダブルクリックして コード画面を表示し 左記のコードを入力する 8 デザイン画面のボタン btncancel をダブルクリックして コード画面を表示し 左記のコードを入力する ' キー入力数と再生フラグの初期化 Kcnt = 0: ReplayMode = False 9 ' 画面の表示 G.Clear( pnlground. ) 上記 1と同様に コード記述画面を表示して For I = 0 To 11 左記のコードを記述する 以下同様 For J = 0 To 11 ST( J, I ) = System.Convert.ToInt32( BD( NS, I ).Substring( J, 1 )) Select Case ST( J, I ) Case 1: G.DrawImage( picbase4.image, J * 32, I * 32 ) Case 2: G.DrawImage( picbase5.image, J * 32, I * 32 ) Case 3: G.DrawImage( picbase6.image, J * 32, I * 32 ) Case 4: G.DrawImage( picbase7.image, J * 32, I * 32 ) Case 5: G.DrawImage( picbase8.image, J * 32, I * 32 ) Case 6: G.DrawImage( picbase9.image, J * 32, I * 32 ) Case 7: G.DrawImage( picbase0.image, J * 32, I * 32 ): CX = J : CY = I End Select Next J Next I pnlground.refresh( ) lblnumber. = " 第 " & StrConv(( NS + 1 ).ToString( ), VbStrConv.Wide ) & " 面 " -57-

58 ' キー入力を処理するジェネラルプロシージャ Private Sub KeyOperation( ByVal K As Keys ) Select Case K Case Keys.Down: Call MoveChar( CX, CY + 1, CX, CY + 2, 0 ) Case Keys.Up: Call MoveChar( CX, CY - 1, CX, CY - 2, 1 ) Case Keys.Left: Call MoveChar( CX - 1, CY, CX - 2, CY, 2 ) Case Keys.Right: Call MoveChar( CX + 1, CY, CX + 2, CY, 3 ) Case Keys.Escape: Call DispSheet( ) Case Keys.T: btnnext.visible = True End Select ' キャラクタを移動するジェネラルプロシージャ Private Sub MoveChar( ByVal X1 As Integer, ByVal Y1 As Integer, _ ByVal X2 As Integer, ByVal Y2 As Integer, ByVal N As Integer ) Dim I, B As Integer Dim F, S As String Dim R As Boolean Dim P As PictureBox = Me.Controls( "picbase" & N.ToString( )) Select Case ST( X1, Y1 ) ' 移動先が固定岩か家の場合 Case 1, 6 Exit Sub ' 移動先が空白の場合 Case 0 G.FillRectangle( New SolidBrush( pnlground. ), CX * 32, CY * 32, 32, 32 ) ST( CX, CY ) = 0 : CX = X1 : CY = Y1 : ST( CX, CY ) = 7 G.DrawImage( P.Image, CX * 32, CY * 32 ) ' 移動先がグーの場合 Case 2 If ST( X2, Y2 ) = 0 Or ST( X2, Y2 ) = 3 Then G.FillRectangle( New SolidBrush( pnlground. ), CX * 32, CY * 32, 32, 32 ) G.FillRectangle( New SolidBrush( pnlground. ), X1 * 32, Y1 * 32, 32, 32 ) ST( CX, CY ) = 0 : ST( X2, Y2 ) = ST( X1, Y1 ) : CX = X1 : CY = Y1 : ST( CX, CY ) = 7 G.DrawImage( picbase5.image, X2 * 32, Y2 * 32 ) G.DrawImage( P.Image, CX * 32, CY * 32 ) ' 移動先がチョキの場合 Case 3 If ST( X2, Y2 ) = 0 Or ST( X2, Y2 ) = 4 Then G.FillRectangle( New SolidBrush( pnlground. ), CX * 32, CY * 32, 32, 32 ) G.FillRectangle( New SolidBrush( pnlground. ), X1 * 32, Y1 * 32, 32, 32 ) ST( CX, CY ) = 0 : ST( X2, Y2 ) = ST( X1, Y1 ) : CX = X1 : CY = Y1 : ST( CX, CY ) = 7 G.DrawImage( picbase6.image, X2 * 32, Y2 * 32 ) G.DrawImage( P.Image, CX * 32, CY * 32 ) ' 移動先がパーの場合 Case 4 If ST( X2, Y2 ) = 0 Or ST( X2, Y2 ) = 2 Then G.FillRectangle( New SolidBrush( pnlground. ), CX * 32, CY * 32, 32, 32 ) G.FillRectangle( New SolidBrush( pnlground. ), X1 * 32, Y1 * 32, 32, 32 ) ST( CX, CY ) = 0 : ST( X2, Y2 ) = ST( X1, Y1 ) : CX = X1 : CY = Y1 : ST( CX, CY ) = 7 G.DrawImage( picbase7.image, X2 * 32, Y2 * 32 ) G.DrawImage( P.Image, CX * 32, CY * 32 ) -58-

59 ' 移動先が荷物の場合 Case 5 If ST( X2, Y2 ) = 6 Then G.FillRectangle( New SolidBrush( pnlground. ), CX * 32, CY * 32, 32, 32 ) G.FillRectangle( New SolidBrush( pnlground. ), X1 * 32, Y1 * 32, 32, 32 ) ST( CX, CY ) = 0 : CX = X1 : CY = Y1 : ST( CX, CY ) = 7 G.DrawImage( P.Image, CX * 32, CY * 32 ) ' クリアのブリンク表示 lblclear. = " クリア!!" 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 ' 最短手数の判定 R = True F = DP & ( NS + 1 ).ToString( "00" ) & ".dat" If Not Dir( F ) = "" Then FileOpen( 1, F, OpenMode.Input ) Input( 1, B ) FileClose( 1 ) If Not B > Kcnt Then R = False ' 最短手数の場合の処理 ( 記録の保存と表示 ) If R Then S = CStr( Kcnt ) For I = 0 To ( Kcnt - 1 ) S &= ( "," & KeyRec( I ).ToString( )) Next I FileOpen( 1, F, OpenMode.Output ) PrintLine( 1, S ) FileClose( 1 ) lblclear. = " 最短手数達成!" 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 NS < MAX Then btnnext.enabled = True btnreplay.enabled = True ElseIf ST( X2, Y2 ) = 0 Then G.FillRectangle( New SolidBrush( pnlground. ), CX * 32, CY * 32, 32, 32 ) G.FillRectangle( New SolidBrush( pnlground. ), X1 * 32, Y1 * 32, 32, 32 ) ST( CX, CY ) = 0 : ST( X2, Y2 ) = ST( X1, Y1 ) : CX = X1 : CY = Y1 : ST( CX, CY ) = 7 G.DrawImage( picbase8.image, X2 * 32, Y2 * 32 ) G.DrawImage( P.Image, CX * 32, CY * 32 ) End Select pnlground.refresh( ) -59-

60 ' 画面表示テスト Private Sub btntest_click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles btntest.click NS = NS + 1 : If NS >= MAX Then NS = 0 Call DispSheet( ) pnlground.focus( ) End Class 10 デザイン画面のボタン btntest をダブルクリックして コード画面を表示し 左記のコードを入力する -60-

61 ドラゴンの城 VB プログラムの概要 オーソドックスな RPG ゲーム ドラゴンの城 で有る 上下左右の矢印キーで 対応する方向にキャラクタを移動させる 但し 山の方向には移動する事は出来ない 幾多の敵と闘う事で 体力と経験値を高め ドラゴンの城に行き ドラゴンを倒すとクリアで有る 体力が無く成ると ゲームオーバーと成り プログラムは終了する 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り 楽しみ乍ら プログラムの制作手順を習得する事を目的として居る 制作手順としては 実際の作業過程に従い 段階的に機能を追加する方法を採用して居る 此のプログラムを土台に 更に 各自で機能を追加して行く事が望まれる 今回の課題項目 アプリケーション画面のデザイン ( 標準コントロールの利用 ) プログラムの動作原理 ( イベント駆動型のプログラム ) プログラムの構成要素 ( オブジェクトとプロパティ ) 値の代入 ( 変数 オブジェクトのプロパティ ) グラフィックスの利用 (Graphics オブジェクト ) 条件に応じた処理 (If 文の利用 ) 自動的に行われる処理 ( タイマーの利用 ) -61-

62 オブジェクト プロパティ一覧 ピクチャボックス 1 ラベル 1 ラベル 2 ラベル 5 ラベル 6 ラベル 3 ラベル 7 ラベル 4 ラベル 8 ラベル 9 ラベル 10 ラベル 11 ラベル 12 ピクチャボックス 2 コントロールの種類 プロパティ プロパティの設定値 フォーム Name DragonCastle Black FormBorderStyle FixedSingle MaximizeBox False StartPosition CenterScreen ドラゴンの城 ピクチャボックス1 Name picmap Lime Size 288, 224 ラベル1 Name lblitem1 MS 明朝 16 標準 ForeColor White 体力 ラベル2 Name lblitem2 MS 明朝 16 標準 ForeColor White 攻撃力 -62-

63 コントロールの種類 プロパティ プロパティの設定値 ラベル3 Name lblclear MS 明朝 16 太字 ForeColor White 経験値 ラベル4 Name lblitem3 MS 明朝 16 太字 ForeColor White 所持金 ラベル5~8 Name ラベル5:lblHP ラベル6:lblSTR ラベル7:lblEXP ラベル8:lblGOLD AutoSize False MS 明朝 16 太字 ForeColor White Align MiddleRight ラベル9 Name lblmes MS 明朝 14 太字 ForeColor Red 空白 Align MiddleLeft ラベル10 Name lblenemyname MS 明朝 14 太字 ForeColor Red 空白 Align MiddleLeft ラベル11 Name lblenemystr MS 明朝 14 太字 ForeColor Red 空白 Align MiddleRight ラベル12 Name lblkey MS 明朝 14 太字 ForeColor 255, 255, 128 SPC: 戦闘 ESC: 逃亡 Align MiddleCenter ピクチャボックス2 Name picenemy Black Size 142, 106 SizeMode Zoom 上図では ラベルは グループボックスの中に入れて居る 此の様な 飾り は 各自の判断で 適宜 付けて欲しい 猶 上図では グループボックスの プロパティを 空白 に仕て居る -63-

64 プログラムリスト Public Class DragonCastle Private HP, ST, DF, EP, GD As Integer Private EB, EN, EM As Integer Private ES As String Private MapX, MapY, ManX, ManY As Integer Private Map( 34, 28 ) As Integer Private Battle, Dragon As Boolean 1 コード記述画面を表示して左記のコードを入力する Private Bm( 5 ), Be( 10 ) As Bitmap Private Gr As Graphics Private Rn As Random = New Random( ) ' フォームが読み込まれた時の処理 Private Sub DragonCastle_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load HP = 200 : ST = 100 : DF = 20 : EP = 1 : GD = 0 MapX = 4 : MapY = 4 : ManX = 8 : ManY = 7 FileOpen( 1, "dragon_map.txt", OpenMode.Input ) For I As Integer = 0 To 28 For J As Integer = 0 To 34 Input( 1, Map( J, I )) Next Next FileClose( 1 ) Bm( 0 ) = New Bitmap( "dragon_pat1.gif" ) Bm( 1 ) = New Bitmap( "dragon_pat2.gif" ) Bm( 2 ) = New Bitmap( "dragon_pat3.gif" ) Bm( 3 ) = New Bitmap( "dragon_pat4.gif" ) Bm( 4 ) = New Bitmap( "dragon_pat5.gif" ) Bm( 5 ) = New Bitmap( "dragon_pat6.gif" ) Be( 0 ) = New Bitmap( "dragon_ene0.gif" ) Be( 1 ) = New Bitmap( "dragon_ene1.gif" ) Be( 2 ) = New Bitmap( "dragon_ene2.gif" ) Be( 3 ) = New Bitmap( "dragon_ene3.gif" ) Be( 4 ) = New Bitmap( "dragon_ene4.gif" ) Be( 5 ) = New Bitmap( "dragon_ene5.gif" ) Be( 6 ) = New Bitmap( "dragon_ene6.gif" ) Be( 7 ) = New Bitmap( "dragon_ene7.gif" ) Be( 8 ) = New Bitmap( "dragon_ene8.gif" ) Be( 9 ) = New Bitmap( "dragon_ene9.gif" ) Be( 10 ) = New Bitmap( "dragon_enea.gif" ) データファイルは 事前に 実行ファイルと同じフォルダに格納して置く 2 フォーム上のコントロールを配置して居ない処をダブルクリックして コード画面を表示し 左記のコードを入力する 各画像ファイルは 事前に 実行ファイルと同じフォルダに格納して置く -64-

65 With picmap.image = New Bitmap(.Width,.Height ) Gr = Graphics.FromImage(.Image ) End With Call DrawMap( ) : Call DrawMan( ) : Call DispState( ) Battle = False : Dragon = False 3 ' マップを表示するジェネラルプロシージャ Private Sub DrawMap( ) Dim N As Integer = 0 上記 1と同様に コード記述画面を表示して For I As Integer = 0 To 6 左記のコードを記述する 以下同様 For J As Integer = 0 To 8 If Map( MapX + J, MapY + I ) < 6 Then Gr.DrawImage( Bm( Map( MapX + J, MapY + I )), J * 32, I * 32 ) Next Next picmap.refresh( ) ' 勇者を表示するジェネラルプロシージャ Private Sub DrawMan( ) Gr.DrawImage( Bm( 0 ), 128, 96 ) picmap.refresh( ) ' 勇者の状態を表示するジェネラルプロシージャ Private Sub DispState( ) lblhp. = HP.ToString( ) lblstr. = ST.ToString( ) lblexp. = EP.ToString( ) lblgold. = GD.ToString( ) 4 上記 3 に同じ ' メッセージを消去するジェネラルプロシージャ Private Sub DelMes( ByVal T As Integer ) If T > 0 Then System.Threading.Thread.Sleep( T ) lblmes. = "" lblenemyname. = "" lblenemystr. = "" lblkey.visible = False picenemy.visible = False 5 上記 3 に同じ -65-

66 ' キー入力が為された時の処理 Private Sub DragonCastle_KeyUp( ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.KeyEventArgs ) Handles MyBase.KeyUp Dim N, Q, C, T, V As Integer Dim F As Boolean = False If Not Battle Then ' 勇者の移動 Select Case e.keycode Case Keys.Left N = Map( ManX - 1, ManY ) If Not N = 2 Then ManX -= 1 : MapX -= 1 : Call DrawMap( ) : Call DrawMan( ) : F = True Case Keys.Right N = Map( ManX + 1, ManY ) If Not N = 2 Then ManX += 1 : MapX += 1 : Call DrawMap( ) : Call DrawMan( ) : F = True Case Keys.Up N = Map( ManX, ManY - 1 ) If Not N = 2 Then ManY -= 1 : MapY -= 1 : Call DrawMap( ) : Call DrawMan( ) : F = True Case Keys.Down N = Map( ManX, ManY + 1 ) If Not N = 2 Then ManY += 1 : MapY += 1 : Call DrawMap( ) : Call DrawMan( ) : F = True Case Keys.End HP *= 2 : ST *= 2 : DF *= 2 : EP *= 2 : GD *= 2 Call DispState( ) End Select ' 移動した場合の処理 If F Then ' 体力減尐 ( 森と池 ) Select Case N Case 3: HP -= 471 / (ST / 5) + 7 Case 4: HP -= 471 / (ST / 10) + 10 End Select ' 体力増加 ( 病院?) If ( ManX = 5 And ManY = 5 ) Or ( ManX = 26 And ManY = 19 ) Then If Not HP = 3000 Then HP += GD : GD = 0 If HP > 3000 Then HP = フォームを選択し イベント画面に切り替え KeyUp の項目をダブルクリックして 左記のコードを入力する

67 Call DispState( ) If HP <= 0 Then MessageBox.Show( " 死亡 " ) Application.Exit( ) ' 敵出現 If ManX = 14 And ManY = 23 Then ' ドラゴン出現 lblmes. = " ドラゴンが居る!!!" : Application.DoEvents( ) lblenemyname. = " ドラゴン " : lblenemystr. = "????" picenemy.image = Be( 10 ) : picenemy.visible = True lblkey.visible = True : Battle = True : Dragon = True Else If Rn.Next( 1, 3 ) = 2 Then lblmes. = " 敵が現れた!!" Select Case Map( ManX, ManY ) Case 1 : Q = 0 Case 3 : Q = 3 Case 4 : Q = 6 End Select C = Rn.Next( 3 ) + Q Select Case C Case 0 : ES = " シルフ " : EB = 150 : EN = 100 : EM = 10 Case 1 : ES = " アデプト " : EB = 200 : EN = 120 : EM = 12 Case 2 : ES = " ウィザード " : EB = 250 : EN = 145 : EM = 14 Case 3 : ES = " ヴァヴァーン " : EB = 300 : EN = 170 : EM = 16 Case 4 : ES = " ナーレット " : EB = 350 : EN = 195 : EM = 20 Case 5 : ES = " カーティケイヤ " : EB = 400 : EN = 224 : EM = 21 Case 6 : ES = " キメラ " : EB = 450 : EN = 230 : EM = 22 Case 7 : ES = " ハーピー " : EB = 550 : EN = 257 : EM = 23 Case 8 : ES = " マスターロード " : EB = 700 : EN = 293 : EM = 24 Case 9 : ES = " アキンドナイト " : EB = 900 : EN = 332 : EM = 30 End Select lblenemyname. = ES : lblenemystr. = EB.ToString( ) picenemy.image = Be( C ) : picenemy.visible = True lblkey.visible = True : Battle = True Else ' 戦闘 Select Case e.keycode Case Keys.Space If Not Dragon Then lblmes. = " アタック!!!" : Application.DoEvents( ) System.Threading.Thread.Sleep( 500 ) T = ST + DF : V = EN + EM If T > V Then -67-

68 ' 勝利 lblmes. = ES & " を倒した!" GD += ( EB / 5 ) If Not ST > EN Then EP += ( EM * / ST ) If EP >= ST * 3 Then ST += ( EN / ) : DF += 5 Else ' 敵の攻撃 lblmes. = " 敗北した " : Application.DoEvents( ) HP -= ( EM * 22 5 ) If HP <= 0 Then MessageBox.Show( " 死亡 " ) Application.Exit( ) Call DispState( ) Else If ST >= 373 And HP >= 2556 Then lblmes. = " ドラゴンを倒した!!!" : Application.DoEvents( ) MessageBox.Show( " おめでとう!" ) Application.Exit( ) Else lblmes. = " 未だ未だドラゴンは倒せん!" : Application.DoEvents( ) MapX = 4 : MapY = 4 : ManX = 8 : ManY = 7 Call DrawMap( ) : Call DrawMan( ) Dragon = False Battle = False Application.DoEvents( ) : Call DelMes( 1000 ) Case Keys.Escape If Rn.Next( 4 ) = 0 Then lblmes. = " 敵の襲撃!!!" : Application.DoEvents( ) HP -= ( EB / ( ST - 80 )) If HP <= 0 Then MessageBox.Show( " 死亡 " ) Application.Exit( ) Call DispState( ) Else lblmes. = " 逃げ切れた " : Application.DoEvents( ) Battle = False : Call DelMes( 1000 ) End Select End Class -68-

69 ジャスト 10 VB プログラムの概要 貴方の体内時計の正確さを試すゲーム ジャスト 10 で有る スタートボタンをクリックして 10 秒経過したと思えばストップボタンをクリックする 丁度 10 秒に成る様に調整して下さい 呉々も イカボン の動きに惑わされない様に 注意して下さい 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り 楽しみ乍ら プログラムの制作手順を習得する事を目的として居る 制作手順としては 実際の作業過程に従い 段階的に機能を追加する方法を採用して居る 此のプログラムを土台に 更に 各自で機能を追加して行く事が望まれる 今回の課題項目 アプリケーション画面のデザイン ( 標準コントロールの利用 ) プログラムの動作原理 ( イベント駆動型のプログラム ) プログラムの構成要素 ( オブジェクトとプロパティ ) 値の代入 ( 変数 オブジェクトのプロパティ ) グラフィックスの利用 (Graphics オブジェクト ) 条件に応じた処理 (If 文の利用 ) 自動的に行われる処理 ( タイマーの利用 ) -69-

70 オブジェクト プロパティ一覧 ラベル 1 ラベル 2 ピクチャボックス タイマー ボタン 1 ボタン 2 tmrconfuse コントロールの種類 プロパティ プロパティの設定値 フォーム Name just10 MS 明朝 9 標準 FormBorderStyle FixedSingle MaximizeBox False StartPosition CenterScreen ジャスト10 ピクチャボックス Name picchar Image ikabon1.gif Size 169, 276 ラベル1 2 Name lbltime lblmes Blue Red MS 明朝 12 標準 ForeColor White 空白 Align MiddleCenter タイマー Name tmrconfuse INterval 500 ボタン1 2 Name btnstart btnstop MS 明朝 12 標準 START STOP -70-

71 プログラムリスト Public Class just10 Private Sw As Stopwatch = New Stopwatch( ) Private Rn As Random = New Random( ) Private Ch( 1 ) As Bitmap Private Ct As Boolean ' フォームが読み込まれた時の処理 Private Sub just10_load( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles MyBase.Load Ch( 0 ) = New Bitmap( "ikabon1.gif" ) Ch( 1 ) = New Bitmap( "ikabon2.gif" ) ' ボタン (START) がクリックされた時の処理 Private Sub btnstart_click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles btnstart.click 1 コード記述画面を表示して左記のコードを入力する 2 フォーム上のコントロールを配置して居ない処をダブルクリックして コード画面を表示し 左記のコードを入力する Sw.Reset( ) : Sw.Start( ) btnstart.enabled = False btnstop.enabled = True lbltime. = "" : lblmes. = "" Ct = True tmrconfuse.enabled = True 3 デザイン画面のボタン btnstart をダブルクリックして コード画面を表示し 左記のコードを入力する ' ボタン (STOP) がクリックされた時の処理 Private Sub btnstop_click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles btnstop.click Sw.Stop( ) : tmrconfuse.enabled = False Dim T As Single = Sw.ElapsedMilliseconds / 1000 lbltime. = T.ToString( "#0.00" ) If T = 10 Then lblmes. = " 素晴らしい!!!" ElseIf 9.5 < T And T < 10.5 Then lblmes. = " 惜しい!!!" Else lblmes. = " 練習しよう!!!" btnstop.enabled = False btnstart.enabled = True 4 デザイン画面のボタン btnstart をダブルクリックして コード画面を表示し 左記のコードを入力する -71-

72 ' タイマーが一定間隔で行う処理 Private Sub tmrconfuse_tick(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles tmrconfuse.tick If Ct Then picchar.image = Ch( 1 ) Else picchar.image = Ch( 0 ) Ct = Not Ct tmrconfuse.interval = ( Rn.Next( -300, 300 )) End Class 5 デザイン画面で タイマーをダブルクリックして コード画面を表示し 左記のコードを入力する -72-

73 対戦チェッカー VB プログラムの概要 人間対人間の対戦型のボードゲーム チェッカー で有る 青が先手で 赤が後手で有る 手番の人間は 先ず 動かす駒をクリックし 次に 移動する場所をクリックする 飛び越して取る事の出来る駒が有る場合は 必ず取らなければ成らない 勿論 ルール違反の移動先をクリックした場合は 無効で 警告が表示される 相手の駒を総て取れば勝ちで有る メッセージボックスが表示されるので 続けてゲームを行う事も出来る 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り 楽しみ乍ら プログラムの制作手順を習得する事を目的として居る 制作手順としては 実際の作業過程に従い 段階的に機能を追加する方法を採用して居る 此のプログラムを土台に 更に 各自で機能を追加して行く事が望まれる 今回の課題項目 アプリケーション画面のデザイン ( 標準コントロールの利用 ) プログラムの動作原理 ( イベント駆動型のプログラム ) プログラムの構成要素 ( オブジェクトとプロパティ ) 値の代入 ( 変数 オブジェクトのプロパティ ) グラフィックスの利用 (Graphics オブジェクト ) 条件に応じた処理 (If 文の利用 ) 自動的に行われる処理 ( タイマーの利用 ) -73-

74 オブジェクト プロパティ一覧 ピクチャボックス1 ラベル1 ピクチャボックス2 ラベル 2 ラベル 3 ラベル 4 ピクチャボックス 3 ボタン コントロールの種類 プロパティ プロパティの設定値 フォーム Name checker FormBorderStyle FixedSingle MaximizeBox False StartPosition CenterScreen チェッカー ピクチャボックス1 Name picblue Transparent Image picblue.gif Size 37, 37 ピクチャボックス2 Name picred Transparent Image picred.gif Size 37, 37 ラベル1 Name lbltitle HG 創英角ホ ッフ 体 26 太字 対戦チェッカー -74-

75 コントロールの種類 プロパティ プロパティの設定値 ラベル2 Name lblscr2 AutoSize False Blue MS 明朝 16 標準 ForeColor White 0 Align MiddleRight ラベル3 Name lblscr3 AutoSize False Red MS 明朝 12 標準 0 Align MiddleRight ラベル4 Name lblmessage AutoSize False White MS 明朝 12 標準 ForeColor White 0 Align MiddleCenter ピクチャボックス3 Name picboard White BorderStyle FixedSingle Size 322, 322 ボタン Name BtnFinish MS 明朝 12 標準 終了 -75-

76 プログラムリスト Public Class checker ' フォームクラスレベルでグローバルな変数の宣言 Private KP( 7, 7 ) As Integer ' 盤データ ( 保存用 ) Private BD( 7, 7 ) As Integer ' 盤データ ( 競技用 ) Private UN( 1 ) As Integer ' 判定用 Private VN( 1 ) As Integer ' 判定用 Private SC( 3 ) As Integer ' 得点 (2: 青 3: 赤 ) Private XD( 8 ) As Integer ' 判定用 Private YD( 8 ) As Integer ' 判定用 Private DP( 1, 3, 4 ) As Integer ' 判定用 Private V1( 1, 3, 48 ) As Integer ' 判定用 Private V2( 1, 3, 48 ) As Integer ' 判定用 Private BA As Integer ' 手番 (2: 青 3: 赤 ) Private TN As Integer ' 互先 (2: 先手 3: 後手 ) Private CX As Integer ' 着目 X 座標 ( 盤面升目 ) Private CY As Integer ' 着目 Y 座標 ( 盤面升目 ) Private PX As Integer ' 駒位置 X 座標 ( 盤面升目 ) Private PY As Integer ' 駒位置 Y 座標 ( 盤面升目 ) Private FX As Integer ' 移動先 X 座標 ( 盤面升目 ) Private FY As Integer ' 移動先 Y 座標 ( 盤面升目 ) Private PC As Boolean ' 駒位置指定フラグ Private NM As Boolean ' 連続移動フラグ Private OK As Boolean ' 規則違反判定フラグ Private TB As Boolean ' 敵駒取得フラグ Private ED As Boolean ' 終了フラグ Private KM As Boolean ' 王駒昇格フラグ Private PR As String ' メッセージ Private G As Graphics 1 コード記述画面を表示して左記のコードを入力する ' フォームが読み込まれた時の処理 Private Sub checker_load( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles MyBase.Load ' Graphics オブジェクトの生成 With picboard.image = New Bitmap(.Width,.Height ) G = Graphics.FromImage(.Image ) End With ' 盤面データの設定 Call DataSet( ) ' 盤面の初期化 Call GameInit( ) Call TurnDisp( ) Call BoardInit( 0 ) 2 フォーム上のコントロールを配置して居ない処をダブルクリックして コード画面を表示し 左記のコードを入力する -76-

77 ' 盤面でマウスボタンをクリックした時の処理 Private Sub picboard_mouseup( ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.MouseEventArgs ) Handles picboard.mouseup If TN = BA Then ' 駒の枠線を消去する G.DrawRectangle( Pens.White, CX * 40, CY * 40, 40, 40 ) picboard.refresh( ) ' 着目座標を求める CX = e.x 40 : CY = e.y 40 ' 一巡の処理を行う Call Turn( ) ' ボタン ( 終了 ) がクリックされた時の処理 Private Sub cmdfinish_click(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles cmdfinish.click Me.Dispose( ) End ' 盤面データを設定するジェネラルサブプロシージャ Private Sub DataSet( ) ' サブプロシージャレベルでローカルの変数 Dim I, J As Integer 5 上記 1と同様に コー ' 盤面データを設定するド記述画面を表示し For I = 0 To 7 て 左記のコードを記 For J = 0 To 7 述する 以下同様 Select Case J Case 0, 2 If I Mod 2 = 0 Then KP( I, J ) = 4 Else KP( I, J ) = 2 Case 1 If I Mod 2 = 0 Then KP( I, J ) = 2 Else KP( I, J ) = 4 Case 3 If I Mod 2 = 0 Then KP( I, J ) = 1 Else KP( I, J ) = 4 Case 4 最後迄 If I Mod 2 = 0 Then KP( I, J ) = 4 Else KP( I, J ) = 1 Case 5, 7 If I Mod 2 = 0 Then KP( I, J ) = 3 Else KP( I, J ) = 4 Case 6 If I Mod 2 = 0 Then KP( I, J ) = 4 Else KP( I, J ) = 3 End Select Next J Next I -77-

78 XD( 1 ) = 0 : YD( 1 ) = -2 XD( 2 ) = 1 : YD( 2 ) = -1 XD( 3 ) = 2 : YD( 3 ) = 0 XD( 4 ) = 1 : YD( 4 ) = 1 XD( 5 ) = 0 : YD( 5 ) = 2 XD( 6 ) = -1 : YD( 6 ) = 1 XD( 7 ) = -2 : YD( 7 ) = 0 XD( 8 ) = -1 : YD( 8 ) = -1 DP( 0, 2, 1 ) = 4 : DP( 0, 2, 2 ) = 6 : DP( 0, 2, 3 ) = 2 : DP( 0, 2, 4 ) = 8 DP( 0, 3, 1 ) = 2 : DP( 0, 3, 2 ) = 8 : DP( 0, 3, 3 ) = 4 : DP( 0, 3, 4 ) = 6 DP( 1, 2, 1 ) = 2 : DP( 1, 2, 2 ) = 8 : DP( 1, 2, 3 ) = 4 : DP( 1, 2, 4 ) = 6 DP( 1, 3, 1 ) = 6 : DP( 1, 3, 2 ) = 4 : DP( 1, 3, 3 ) = 8 : DP( 1, 3, 4 ) = 2 ' ゲームを初期化するジェネラルサブプロシージャ Private Sub GameInit( ) TN = 2 : BA = 2 : CX = 1 : CY = 0 PC = False : NM = False : ED = False UN( 1 ) = 0 : SC( 2 ) = 0 : SC( 3 ) = 0 lblscr2. = "0" lblscr3. = "0" ' 手番を表示するジェネラルサブプロシージャ Private Sub TurnDisp( ) If BA = 2 Then lblmessage. = Color.Blue lblmessage.forecolor = Color.White lblmessage. = " 青の番 " Else lblmessage. = Color.Red lblmessage.forecolor = Color.White lblmessage. = " 赤の番 " ' 盤面を初期化するジェネラルサブプロシージャ Private Sub BoardInit( ByVal F As Integer ) Dim I, J As Integer Dim A As PictureBox Dim B As PictureBox If F = 0 Then A = picblue : B = picred Else A = picred : B = picblue -78-

79 For I = 0 To 7 For J = 0 To 7 Select Case KP( I, J ) Case 1 G.FillRectangle( Brushes.White, I * 40, J * 40, 40, 40 ) Case 2 G.DrawImage( A.Image, I * , J * ) Case 3 G.DrawImage( B.Image, I * , J * ) Case 4 G.FillRectangle( Brushes.Black, I * 40, J * 40, 40, 40 ) End Select BD( I, J ) = KP( I, J ) Next J Next I picboard.refresh( ) ' 一巡の処理を行うジェネラルサブプロシージャ Private Sub Turn( ) ' 移動する駒を指定する If ( BD( CX, CY ) And 7 ) = BA And NM = False Then G.DrawRectangle( Pens.Red, CX * 40, CY * 40, 40, 40 ) picboard.refresh( ) PX = CX : PY = CY : PC = True ' 移動先を指定する If PC = True Then If BD( CX, CY ) = 1 Then FX = CX : FY = CY ' 移動先を検証する If JudgeDestination( PX, PY, FX, FY, 0 ) Then Exit Sub Call MovePiece( ) ' 駒を移動する Call JudgeKing( ) ' キングに昇格したか判定する Call TakePiece( ) ' 駒を取り上げる ' 連続して跳べるか判定する If JumpMore( ) Then Exit Sub ' 終了したか判定する Call JudgeEnd( ) If ED = True Then If BA = 2 Then PR = " 青 " Else PR = " 赤 " lblmessage. = PR & " の勝ちです!!" If MsgBox(" もう一度?", vbyesno + vbquestion, " 対戦ゲーム ") = MsgBoxResult.Yes Then Call GameInit() Call TurnDisp() Call BoardInit(0) Else BA = BA Xor 1 : PC = False : Call TurnDisp() : TN = TN Xor 1-79-

80 ' 移動先を検証するジェネラルサブプロシージャ Public Function JudgeDestination( ByVal X1 As Integer, ByVal Y1 As Integer, _ ByVal X2 As Integer, ByVal Y2 As Integer, ByVal F As Integer ) As Boolean Dim XX As Integer Dim YY As Integer Dim NG As Boolean OK = False : TB = False XX = Math.Abs( X2 - X1 ) : YY = Math.Abs( Y2 - Y1 ) If ( XX = 0 Or XX = 1 ) And ( YY = 0 Or YY = 1 ) Then If BD( X1, Y1 ) <> ( BD( X1, Y1 ) And 7 ) Then OK = True ElseIf ( BA = 2 ) And ( Y2 - Y1 = 1 ) Then OK = True ElseIf ( BA = 3 ) And ( Y2 - Y1 = -1 ) Then OK = True ElseIf ( XX = 0 Or XX = 2 ) And ( YY = 0 Or YY = 2 ) Then XX = X1 + ( X2 X1 ) / 2 : YY = Y1 + ( Y2 - Y1 ) / 2 If ( BD( XX, YY ) And 7) = ( BA Xor 1) Then If BD( X1, Y1 ) <> ( BD( X1, Y1 ) And 7 ) Then OK = True : TB = True ElseIf ( BA = 2 ) And ( Y2 - Y1 = 2 ) Then OK = True : TB = True ElseIf ( BA = 3 ) And ( Y2 - Y1 = -2 ) Then OK = True : TB = True If F = 1 Then Return OK Else NG = False If ( NM = True ) And ( TB = False ) Then NG = True : PR = " 駒を取らなければ成りません!" ElseIf ( UN( 1 ) > 0 ) And ( OK = True ) And ( TB = False ) Then NG = True : PR = " 駒を取らなければ成りません!" ElseIf OK = False Then NG = True : PR = " ルール違反です!" If NG = True Then PC = False lblmessage. = PR If NM = True Then PC = True Else G.DrawRectangle( Pens.White, PX * 40, PY * 40, 40, 40 ) picboard.refresh( ) Return NG End Function -80-

81 ' 駒を移動させるジェネラルサブプロシージャ Public Sub MovePiece( ) G.FillRectangle( Brushes.White, PX * 40, PY * 40, 40, 40 ) If BA = 2 Then G.DrawImage( picblue.image, FX * , FY * ) Else G.DrawImage( picred.image, FX * , FY * ) picboard.refresh( ) BD( FX, FY ) = BD( PX, PY ) : BD( PX, PY ) = 1 ' キングに昇格したか判定するジェネラルサブプロシージャ Public Sub JudgeKing( ) KM = False If ( BA = 2 And FY > 6 ) Or ( BA = 3 And FY < 1 ) Then If ( BD( FX, FY ) And 8 ) = 0 Then BD( FX, FY ) = BD( FX, FY ) Or 8: KM = True : NM = False ' 駒を取り上げるジェネラルサブプロシージャ Public Sub TakePiece( ) Dim XX, YY As Integer If TB = True Then XX = PX + ( FX PX ) / 2 : YY = PY + ( FY - PY ) / 2 G.FillRectangle( Brushes.White, XX * 40, YY * 40, 40, 40 ): picboard.refresh( ) BD( XX, YY ) = 1 : SC( BA ) += 1 Me.Controls( "lblscr" & BA.ToString( )). = SC( BA ) ' 連続して跳べるか判定するジェネラルサブプロシージャ Public Function JumpMore( ) As Boolean Dim XT, YT, I As Integer NM = False If Not (( TB = False ) Or ( KM = True )) Then For I = 2 To 8 Step 2 XT = FX + XD( I ) * 2 : YT = FY + YD( I ) * 2 If ( XT >= 0 And XT <= 7 ) And ( YT >= 0 And YT <= 7 ) Then If BD( XT, YT ) = 1 Then If JudgeDestination( FX, FY, XT, YT, 1 ) Then Exit For Next I -81-

82 If OK = True Then NM = True : PC = True PX = FX : PY = FY G.DrawRectangle( Pens.Red, CX * 40, CY * 40, 40, 40 ) lblmessage. = " 続けて跳ぶ事が出来ます!" Return OK End Function ' 終了したか判定するジェネラルサブプロシージャ Public Sub JudgeEnd() Dim I, J, K As Integer If SC( BA ) >= 12 Then ED = True Else BA = BA Xor 1 : Call Judge2( ) : BA = BA Xor 1 If VN( 0 ) = 0 And VN( 1 ) = 0 Then ED = True Else For I = 0 To 1 UN( I ) = VN( I ) For J = 1 To VN( I ) For K = 0 To 3 V2( I, K, J ) = V1( I, K, J ) Next K Next J Next I ' 終了を判定するジェネラルサブプロシージャ Public Sub Judge2() Dim CS As Integer Dim CE As Integer Dim CC As Integer Dim W1 As Integer Dim W2 As Integer Dim W3 As Integer Dim I As Integer Dim J As Integer Dim K As Integer Dim X As Integer Dim Y As Integer -82-

83 VN( 0 ) = 0 : VN( 1 ) = 0 CS = 0 : CE = 7 : CC = 1 : If BA = 2 Then CS = 7 : CE = 0 : CC = -1 For I = CS To CE Step CC If I Mod 2 = 0 Then W1 = 1 Else W1 = 0 For J = ( W1 ) To ( W1 + 6 ) Step 2 If ( BD( J, I ) And 7 ) = BA Then If ( BD( J, I ) And 8 ) = 8 Then W2 = 4 : W3 = 1 Else W2 = 2 : W3 = 0 For K = 1 To W2 X = J + XD( DP( W3, BA, K )) : Y = I + YD( DP( W3, BA, K )) If ( X >= 0 And X <= 7 ) And ( Y >= 0 And Y <= 7 ) Then If Not ( BD( X, Y ) = 0 Or BD( X, Y ) = 4 ) Then If BD( X, Y ) = 1 Then VN( 0 ) = VN( 0 ) + 1 V1( 0, 0, VN( 0 )) = J : V1( 0, 1, VN( 0 )) = I V1( 0, 2, VN( 0 )) = X : V1( 0, 3, VN( 0 )) = Y ElseIf ( BD( X, Y ) And 7 ) <> BA Then X = X + XD( DP( W3, BA, K )) : Y = Y + YD( DP( W3, BA, K )) If ( X >= 0 And X <= 7 ) And ( Y >= 0 And Y <= 7 ) Then If BD( X, Y ) = 1 Then VN( 1 ) = VN( 1 ) + 1 V1( 1, 0, VN( 1 )) = J : V1( 1, 1, VN( 1 )) = I V1( 1, 2, VN( 1 )) = X : V1( 1, 3, VN( 1 )) = Y Next K Next J Next I End Class -83-

84 重力空間 VB プログラムの概要 頭脳と反射神経を試すアクションパズルゲーム 重力空間 で有る スタートボタンをクリックして 矢印キーで コングを扉の処に導けば 面クリアで有る コングは 或る高さから落ちると 暫く動けなく成る 10 秒毎に 重力方向が変化するので 惑わされない様に 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り 楽しみ乍ら プログラムの制作手順を習得する事を目的として居る 制作手順としては 実際の作業過程に従い 段階的に機能を追加する方法を採用して居る 此のプログラムを土台に 更に 各自で機能を追加して行く事が望まれる 今回の課題項目 アプリケーション画面のデザイン ( 標準コントロールの利用 ) プログラムの動作原理 ( イベント駆動型のプログラム ) プログラムの構成要素 ( オブジェクトとプロパティ ) 値の代入 ( 変数 オブジェクトのプロパティ ) グラフィックスの利用 (Graphics オブジェクト ) 条件に応じた処理 (If 文の利用 ) 自動的に行われる処理 ( タイマーの利用 ) -84-

85 オブジェクト プロパティ一覧 ラベル 2 グループボックス 1 ラベル 3 ラベル 4 ラベル 1 ラベル 5 パネル ラベル 6 グループボックス 2 ラベル 8 ピクチャボックス ラベル 7 グループボックス 3 ラベル 10 ラベル 9 ボタン 1 タイマー ボタン 2 コントロールの種類 プロパティ プロパティの設定値 フォーム Name frmplayer MS 明朝 9 標準 FormBorderStyle FixedSingle Icon donkey.ico MaximizeBox False StartPosition CenterScreen GRAVITY ZONE - 重力空間 ラベル1 Name lblboard AutoSize False White BorderStyle FixedSingle Location 7, 8 Size 593, 593 空白 パネル Name pnlboard Black Location 15, 16 Size 576,

86 コントロールの種類 プロパティ プロパティの設定値 ピクチャボックス Name pickong Transparent Image donkey2.gif Size 48, 48 ラベル2 Name lblsheetno AutoSize false MS 明朝 18 標準 第 1 面 Align MiddleCenter グループボックス1 Name grahiscore 最短所要時間 ラベル3 Name lblhiscore MS 明朝 14 標準 0 Align MiddleRight ラベル4 Name lblsecond0 MS 明朝 14 標準 秒 Align MiddleLeft ラベル5 Name lblchampion White MS 明朝 14 標準 空白 Align MiddleCenter ラベル6 Name lbldate White MS 明朝 14 標準 空白 Align MiddleCenter グループボックス2 Name grascore 経過時間 ラベル7 Name lblscore MS 明朝 14 標準 0 Align MiddleRight ラベル8 Name lblsecond1 MS 明朝 14 標準 秒 Align MiddleLeft グループボックス3 Name gratotal 所要時間 ラベル9 Name lbltotal MS 明朝 14 標準 0 Align MiddleRight -86-

87 ラベル10 Name lblsecond2 MS 明朝 14 標準 秒 Align MiddleLeft ボタン1 Name btnplay MS 明朝 12 標準 プレイ ボタン2 Name btnfinish MS 明朝 12 標準 終了 タイマー Name tmrtime Interval 100 追加フォーム ラベル 1 ラベル 3 ラベル 2 ラベル 4 ラベル 5 グループボックス テキストボックス ボタン コントロールの種類 プロパティ プロパティの設定値 フォーム Name frminfo Black MS 明朝 9 標準 FormBorderStyle FixedSingle Icon donkey.ico MaximizeBox False StartPosition CenterScreen GRAVITY ZONE - 結果 -87-

ブロック パニック

ブロック パニック ブロックパニック VB 2005 9 プログラムの概要 壁が迫り来る不思議な空間のオリジナルゲーム ブロックパニック を作成する スタートボタンをクリックし上下左右の矢印キーで白猿を移動させる スペースキーを押すと 向いて居る方向の壁が後退する 左右の壁が合わさると ゲームは終了する 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り

More information

ルーレットプログラム

ルーレットプログラム ルーレットプログラム VB 2005 4 プログラムの概要 カジノの代表的なゲーム ルーレット を作成する 先ず GO! ボタンをクリックすると ルーレット盤上をボールが回転し 一定時間経過すると ボールが止まり 出目を表示するプログラムを作成する 出目を 1~16 大小 偶数奇数の内から予想して 予め設定した持ち点の範囲内で賭け点を決め 賭け点と出目に依り 1 点賭けの場合は 16 倍 其他は 2

More information

ブロック崩し風テニス

ブロック崩し風テニス ぱっくんフィッシング VB 2005 13 プログラムの概要 パーティゲームとして良く知られた釣りゲームです マウスで釣り糸を操作して 開閉する魚の口に餌を垂らし 魚が餌を咥えると 釣り上げ 籠の中に入れます 直ぐに口を開けて 海に逃れる魚 中々餌を離さず 籠に入らない魚と 色々なバリエーションが楽しめます 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い

More information

インベーダープログラム

インベーダープログラム インベーダーゲーム VB 2005 5 プログラムの概要 テレビゲームの流行の魁と成る懐かしのゲーム インベーダー を作成する 先ず FIGHT!! ボタンをクリックすると インベーダーが左右に移動し乍ら 降下して来るので 自機を左右のカーソルキーで移動させ スペースキーでミサイルを発射する インベーダーが 最終ライン迄 降下して 侵略される前に 総てのインベーダーを撃墜しなければ ゲームは終了する

More information

倉庫番

倉庫番 倉庫番 VB 2005 63 プログラムの概要 其の昔 一世を風靡し世界中に愛好家の居るパズルゲーム 倉庫番 で有る 荷物 ( 蛸 ) を押して ( 引く事は出来ない ) 所定の場所 ( 壺 ) に納める単純明快な物で有る 猶 一度クリアした面は 自由に再度プレイする事が出来るが 新たな面には 前の面をクリアしないと進む事は出来ない 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い

More information

バスケットボール

バスケットボール バスケットボール きょうつうへんすうせんげん 共通の変数を宣言する ひょうじ 1. ソリューションエクスプローラで コードの表示をクリックする つぎひょうじところしたかこにゅうりょく 2. 次のコードが表示されるので 1の所に 下の囲いのコードを入力する Imports System.Runtime.InteropServices Public Class Basketball にゅうりょく 1 ここに入力する!

More information

プロシード

プロシード プロシード VB 2005 14 きょうつうへんすうせんげん 共通の変数を宣言する ひょうじ 1. ソリューションエクスプローラで コードの表示をクリックする つぎひょうじところしたかこ 2. 次のコードが表示されるので 1の所に 下の囲いのコードを入力する Imports System.IO Imports System.Drawing.Drawing2D Public Class proceed

More information

ドライブは安全運転で in 滋賀♪

ドライブは安全運転で in 滋賀♪ 烏賊セーバー VB 2005 71 プログラムの概要 可愛い烏賊が 画面を泳ぐスクリーンセーバーで有る 烏賊の数 背景 ( 黒一色かデスクトップ画面 ) を設定する事が出来る 背景が 黒一色の場合は 単に烏賊が 左右から現れては 反対側に泳いで行く丈だが デスクトップ画面の場合は 徐々に背景が烏賊の形に塗り潰されて行く スクリーンセーバーの本来の目的は ディスプレイの焼き付きを防止する事で有るが 現在では

More information

ドッグファイト

ドッグファイト ドッグファイト きょうつうへんすうこうぞうたいせんげん 共通の変数や構造体を宣言する ひょうじ 1. ソリューションエクスプローラで コードの表示をクリックする 2. 次のコードが表示されるので 1の所に 下の囲いのコードを入力する Public Class DogFighter 1 ここに入力する! End Class Private Structure BeamPosition Dim XL As

More information

3D回転体プログラム

3D回転体プログラム 3D 回転体プログラム VB 2005 4 プログラムの概要 入力画面で マウスを用いて 側面より見た平面図を描きます マウスの左ボタンをクリックする事で連続線を描き 右ボタンをクリックすると新しい線を描く事が出来る 側面図が完成すると 回転の基本角度を設定して 確定ボタンをクリックすると 平面図を立体図に座標変換する 各軸の回転角度を設定して 表示ボタンをクリックすると 立体図が表示される 各軸の回転角度を変更して

More information

神経衰弱ゲーム

神経衰弱ゲーム 神経衰弱ゲーム VB 2005 10 プログラムの概要 プログラムを起動すると 1 組のカードが裏向きに表示される 開始ボタンをクリックすると 其の場所に 先手と後手の得点が表示され タイトル部分に手番が表示されてゲームを開始する事が出来る 任意のカードを左クリックして開き 同じ数字のカードを 2 枚開くと 其のカードは盤上から取り除かれ カードを開いた者の得点と成る 開いた 2 枚のカードが揃わ無い時は

More information

はるよちゃんっ!

はるよちゃんっ! ゴルフ VB 2005 68 プログラムの概要 ゴルフ版スポーツシミュレーションゲーム ゴルフ で有る 新規ゲームで ゲームを開始し 倶楽部ハウスでプログラムを終了する 操作方法や新しいコースを自作する方法に付いては ヘルプを観れば解る様に成って居る 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り 楽しみ乍ら

More information

相性占いプログラム

相性占いプログラム 相性占いプログラム VB 2005 1 プログラムの概要 画面上で 男女夫々れの誕生日の月日と血液型をコンボボックスより選択した後 占うボタンをクリックする 相性とアドバイス & ポイントは 血液型と星座の位置に依り 予め或る占術法に基づき作成されたデータをファイルより読み込んで配列に記憶させ 誕生日と血液型に依り算出された評価値に該当するデータを表示する 猶 必要な入力が行われて居ない場合には 警告音を鳴らして

More information

かべうちテニス

かべうちテニス かべうちテニス ときみぎうご スタートボタンをクリックした時 ボールを右に動かす がめん 1. デザイン画面で スタートボタン をダブルクリックする つぎひょうじしたかこにゅうりょく 2. 次のコードが表示されるので 下の囲いのコードを入力する Private Sub btnstart_click(byval sender As As System.EventArgs) Handles btnstart.click

More information

Microsoft Word 練習問題の解答.doc

Microsoft Word 練習問題の解答.doc 演習問題解答 練習 1.1 Label1.Text = Val(Label1.Text) + 2 練習 1.2 コントロールの追加 Private Sub Button2_Click( 省略 ) Handles Button2.Click Label1.Text = Val(Label1.Text) - 2 練習 2.1 TextBox3.Text = Val(TextBox1.Text) * Val(TextBox2.Text)

More information

ランボール

ランボール ランボール きょうつうへんすうせんげん 共通の変数を宣言する ひょうじ 1. ソリューションエクスプローラで コードの表示をクリックする つぎひょうじところしたかこにゅうりょく 2. 次のコードが表示されるので 1の所に 下の囲いのコードを入力する Imports System.Runtime.InteropServices Public Class runball にゅうりょく 1 ここに入力する!

More information

グラフィックス

グラフィックス グラフィックス PictureBox の Image プロパティに関する良く有る勘違い PictureBox に画像を表示する方法と仕て PictureBox の Image プロパティを使う方法と Graphics の DrawImage メソッドを使う方法が有るが 此の 2 つの方法を混同し 正しく理解して居ない事が多い様で有る 例えば 下記に列挙する様な状況が 此れに該当する 1.PictureBox

More information

占領双六ゲーム

占領双六ゲーム 占領双六ゲーム VB 2005 9 プログラムの概要 赤と青の 2 者が順番にサイコロを振り 出た目の数だけ駒を進めて行き 停止したマス目を自分の色に塗り潰して 自分の陣地に出来ると謂う 所有る陣取りゲームを作成する マス目は最初に其のマスに停止した方の陣地となり 既に孰れかの色に塗り潰されて居るマスに 後から別の駒が停止しても 陣地の占領者が変わる事は無い 総てのマス目が孰れかの色に塗り潰されゝばゲームは終了し

More information

アプリケーション

アプリケーション アプリケーション開発 お絵かきソフト 目次 お絵かきソフトを作ってみよう... 3 絵を書く枠と場所表示を作る... 3 マウスの動きを見てみよう... 4 絵を書く準備をします... 5 絵を書くとはどういうことか... 5 では線画を描いてみよう... 6 マウスをドラッグしたときだけ線を引くように改造する... 8 お絵かきソフトを作ってみよう 今回は お絵かきソフトを作ってみましょう マウスを動かして線画を書いてみましょう

More information

回文作成支援プログラム

回文作成支援プログラム スロットプログラム プログラムの概要 スタートボタンをクリックすると 3 個のピクチャーボックスの絵がランダムに変化する 次にストップボタンをクリックすると 3 個のピクチャーボックスの絵が止まり 3 個の絵柄が総て揃えば あたり 2 個の絵柄が揃えば おしい 総ての絵柄が異なれば はずれ と表示される 終了ボタンをクリックすると プログラムをメモリから消去して終了する 今回の課題項目 定数の宣言

More information

ListViewコントロール

ListViewコントロール ListView コントロール ListView コントロールへ項目を追加 本稿では.NET Framework の標準コントロールで有る ListView コントロール (System.Windows.Forms 名前空間 ) を活用する為に ListView コントロールにデータを追加する方法を紹介する ListView コントロールは データ項目をアイコン表示や詳細表示等に依り一覧表示する為の物で

More information

ICONファイルフォーマット

ICONファイルフォーマット グラフィックス 画像フォーマットエンコーダパラメータ 様々なフォーマットで画像を保存 Bitmap クラスを用いる事でビットマップ JPEG GIF PNG 等様々なフォーマットの画像を読み込み操作する事が出来る 更に Bitmap クラスや Graphics コンテナを用いて描画処理等を施したイメージをファイルに保存する事も出来る 此の時 読み込めるフォーマット同様に保存するフォーマットを選択する事が出来る

More information

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るので 此れを利用して音声認識を行うサンプルを紹介する 下記の様な Windows フォームアプリケーションを作成する エディタを起動すると

More information

Microsoft Word - VB_10.doc

Microsoft Word - VB_10.doc ここでは オブジェクトの移動 キーボードからの入力判定について学んだ後 動きのある本格的なゲームを作成しましょう 10.1 オブジェクトの位置 第 10 章 動きのあるゲーム オブジェクトの位置もプロパティです Location プロパティを見ることでオブジェクトの座標がわかります また Location プロパティを変更することでオブジェクトの位置を変更できます Location プロパティは X

More information

(Microsoft Word \203v\203\215\203O\203\211\203~\203\223\203O)

(Microsoft Word \203v\203\215\203O\203\211\203~\203\223\203O) 21113 Visual Basic を利用したフリーソフト開発 要旨 各自でフリーソフトを作成 インターネット上に公開することを目的とし Visual Basic2008 2010 を使い簡単なアプリの作成に成功した 1. 目的情報化が進んだ現代において 社会に出ていくためにはパソコンの一つや二つ 軽く扱えなければならない さらに 資源の乏しい日本においては今後 情報技術の発展することが望ましいと考える

More information

チア ダンス

チア ダンス チアダンス きょうつうへんすうこうぞうたいせんげん 共通の変数や構造体を宣言する せんたくひょうじ 1. ソリューションエクスプローラで CheerDance.vb を選択し コードの表示をクリックする 2. 次のコードが表示されるので 1の所に 下の囲いのコードを入力する Imports System.IO Public Class frmmain 1 ここに入力する! End Class Private

More information

スロットプログラム

スロットプログラム スロットプログラム VB 2005 6 プログラムの概要 スタートボタンをクリックすると 3 個のピクチャボックスの絵が 一定間隔で 5 種類の絵柄の中から ランダムに変化する 次にストップボタンをクリックすると 3 個のピクチャボックスの絵が止まり 3 個の絵柄が総て揃えば あたり 2 個の絵柄が揃えば おしい 総ての絵柄が異なれば はずれ と表示される タイトルバーの 閉じる ボタンをクリックすると

More information

VB実用⑦ エクセル操作Ⅰ

VB実用⑦ エクセル操作Ⅰ VB でエクセル操作 Ⅰ VB 2005 7 プログラムの概要 事務処理に於いて Microsoft 社のスプレッドシートソフトで有るエクセルは データベースソフトで有るアクセスと共に 業界標準 (De Facto Standard) で有ると謂う事が出来る 此処では 其のエクセルを Visual Basic から操作する方法を 重点的に学ぶ 今回は Visual Basic でエクセルを利用する基本と成るオブジェクト生成と

More information

ファイル操作-インターネットキャッシュ

ファイル操作-インターネットキャッシュ ファイル操作 インターネット一時ファイルの保存場所 インターネットキャッシュ インターネット一時ファイルの保存場所は Internet Explorer の場合 下記の手順で確認する事が出来る 1.[ ツール ] [ インターネットオプション ] でインターネットオプション画面のダイアログを表示させる 2.[ 全般 ] タブで [ インターネット一時ファイル ] グループの [ 設定 ] をクリックすると

More information

回文作成支援プログラム

回文作成支援プログラム 電光掲示板プログラム VB 2005 1 プログラムの概要 掲示文を入力し 表示開始ボタンをクリックすると 入力した掲示文が 上部の表示域に 右から左へ流れる様に表示される 亦 表示停止ボタンをクリックすると 掲示文の動きが停止する 終了ボタンをクリックすると タイマーを停止し プログラムをメモリから消去して終了する 今回の課題項目 単純変数の宣言 (Private) Windows フォームコントロールの利用

More information

VB.NET解説

VB.NET解説 Visual Basic.NET 印刷編 目次 印刷の概要... 2 印刷の流れ... 2 標準の Windows フォーム印刷ジョブの作成... 3 実行時に於ける Windows フォーム印刷オプションの変更... 3 Windows フォームに於ける接続されたプリンタの選択... 4 Windows フォームでのグラフィックスの印刷... 5 Windows フォームでのテキストの印刷...

More information

パラパラ漫画

パラパラ漫画 パラパラ漫画 VB 2005 3 プログラムの概要 10 枚のピクチャーボックスの夫々れに マウスを左クリックしてドラッグする事に依り 連続線を引き 自由な絵を描く 此の場合 マウスを右クリックする事に依り 新たな線を描き始める事が出来る 描画の対象と成る各ピクチャーボックスは 戻るボタン又は 進むボタンをクリックする事に依り 変更する事が出来る 10 枚の絵を描き終われば ( 途中での再生も可 )

More information

データアダプタ概要

データアダプタ概要 データベース TableAdapter クエリを実行する方法 TableAdapter クエリは アプリケーションがデータベースに対して実行出来る SQL ステートメントやストアドプロシージャで TableAdapter で型指定されたメソッドと仕て公開される TableAdapter クエリは 所有るオブジェクトのメソッドと同様に 関連付けられたメソッドを呼び出す事に依り実行出来る TableAdapter

More information

Userコントロール

Userコントロール User コントロール 初めてのユーザーコントロールの作成 作成したクラスは他のプログラムで再利用出来る為 同じコードを何度も繰り返し作成する必要が無い コントロールも 複数のプロジェクトで再利用出来るクラスで有る 同じユーザーインターフェイスを何度も繰り返してデザインすると謂う経験は 恐らく誰でも有る 例えば 姓と名を入力する為の TextBox コントロールを追加した後で 両方を組み合わせてフルネームを作成するコードを追加する等の作業で有る

More information

ウォームアップ 61-70

ウォームアップ 61-70 ランナー VB 2005 61 プログラムの概要 少し昔大流行したロードランナーを髣髴させるが 只々走る丈のアクションゲーム ランナー で有る 7 種のコースを夫々れ 3 周する 道路に埋まった赤い三角 ( コーン ) を踏むと 人が 1 人減り 3 人全員が失敗すると ゲームオーバーと成る コーンを踏まない様に スペースキーでジャンプし 右向き矢印キーで飛距離を伸ばす事が出来る 但し ジャンプして居る間は

More information

NotifyIconコントロール

NotifyIconコントロール NotifyIcon コントロール システムトレイ ( タスクトレイ ) にアイコンを表示する.NET Framework 2.0 以降の場合は 後述の 2 を観て欲しい Outlook や MSN Messenger 等の様に Windows アプリケーションではシステムトレイ ( タスクトレイ ステータス領域等とも呼ばれる ) にアイコンを表示して アプリケーションの状態を示したり アプリケーションのフォームを表示したりする為のショートカットとして利用する事が出来る.NET

More information

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター 平成 30 年度 プログラミング研修講座 岩手県立総合教育センター 目次第 1 章プログラミングについて 1 ソフトウェアの働き 1 2 プログラミング言語 1 3 主なプログラミング言語の歴史 2 第 2 章 Visual Basic について 1 Visual Basic とは 3 2.NET Framework の環境 3 3 Visual Basic と.NET Framework の関係

More information

チャットプログラム

チャットプログラム チャット VB 2005 5 プログラムの概要 Winsock コントロールを使用すると リモートコンピュータに接続し データを交換出来る事を利用して チャット ( 通信雑談システム ) を作成する サーバー クライアント共に 背景色が黄色のテキストボックスに必要項目を入力し 設定ボタンをクリックすると 通信が確立し チャットを開始する事が出来る 送信用テキストボックスに送信文を入力して送信ボタンをクリックすると

More information

万年暦プログラム

万年暦プログラム 暦カルキュレータ VB8 プログラムの概要 テキストボックスで指定した年月日より オプションボタンで日付が選択されて居る場合は 何年 又は 何箇月 又は 何日 又は 何週後 又は 前の日付を求める 亦 オプションボタンで日数が選択されて居る場合は 更にテキストボックスで指定した年月日迄の日数を求める オプションボタンの選択状況に依り 入力欄の有効 無効を切り替えると共に コマンドボタンのキャプションを書き換えて

More information

ファイル操作

ファイル操作 ファイル操作 TextFieldParser オブジェクト ストリームの読込と書込 Microsoft.VisualBasic.FileIO 名前空間の TextFieldParser オブジェクトは 構造化テキストファイルの解析に使用するメソッドとプロパティを備えたオブジェクトで有る テキストファイルを TextFieldParser で解析するのは テキストファイルを反復処理するのと同じで有り

More information

画像閲覧プログラム

画像閲覧プログラム 画像閲覧プログラム VB 2005 3 プログラムの概要 連動するドライブリストボックス ディレクトリリストボックス ファイルリストボックスから画像ファイルを選択してクリックします ピクチャーボックスに選択した画像が実物大で表示される 此の時 画像が表示領域より大きい場合は 画像の大きさに応じてスクロールバーが表示される 此のスクロールバーを操作する事に依り 画像全体を見る事が出来る 終了ボタンをクリックすると

More information

ファイル監視

ファイル監視 ファイル操作 ファイルやディレクトリの監視 FileSystemWatcher クラス.NET Framework のクラスライブラリには ファイルやディレクトリの作成 変更 削除を監視する為の FileSystemWatcher クラスが System.IO 名前空間に用意されて居る ( 但し Windows 98/Me では利用出来ない ) 此れを利用すると 特定のディレクトリにファイルが作成された

More information

回文作成支援プログラム

回文作成支援プログラム 電光掲示板プログラム C# 2005 1 プログラムの概要 掲示文を入力し 表示開始ボタンをクリックすると 入力した掲示文が 上部の表示域に 右から左へ流れる様に表示される 亦 表示停止ボタンをクリックすると 掲示文の動きが停止する 終了ボタンをクリックすると タイマーを停止し プログラムをメモリから消去して終了する 今回の課題項目 クラスレベルでグローバルな単純変数の宣言 (private) Windows

More information

万年暦プログラム

万年暦プログラム 神経衰弱ゲーム VB10 プログラムの概要 プログラムを起動すると 1 組のカードが裏向きに表示される 開始ボタンをクリックすると 其の場所に 先手と後手の得点が表示され タイトル部分に手番が表示されてゲームを開始する事が出来る 任意のカードを左クリックして開き 同じ数字のカードを 2 枚開くと 其のカードは盤上から取り除かれ カードを開いた者の得点と成る 開いた 2 枚のカードが揃わ無い時は 右クリックして

More information

回文作成支援プログラム

回文作成支援プログラム 回文作成支援プログラム VB 2005 2 プログラムの概要 原文を 1 字入力する度に 其の回文が順次表示される 即ち AB と入力すると ABA と表示され ABC と入力すると ABCBA と表示される 亦 消去ボタンをクリックすると 原文 及び 回文を消去する事も出来る 終了ボタンをクリックすると プログラムをメモリから消去して終了する 今回の課題項目 単純変数の宣言 (Dim) Windows

More information

VB実用⑯ 印刷Ⅵ(Excel)

VB実用⑯ 印刷Ⅵ(Excel) 印刷 Ⅴ VB 2005 5 プログラムの概要 事務処理に於いて 集計結果等を印刷して 確認等を行う事も多い為 ペーパーレスオフィスが推奨される昨今に於いても 矢張り印刷に関する技術は必要で有る Visual Basic から印刷を行う方法は.NET 以降 PrintDocument オブジェクトを使用する方法が 標準と仕て一般的で有るが Professional 版等では ReportView や

More information

ウィンドウ操作 応用

ウィンドウ操作 応用 Win32API 関数 ウィンドウ操作 ウィンドウ名でトップレベルウィンドウ ( 親を持たないウィンドウ ) のハンドルを取得 メモ帳や電卓等のウィンドウ名でトップレベルウィンドウ ( 親を持たないウィンドウ ) のハンドルを取得する方法を 下記に示す Visual Basic Imports System.Runtime.InteropServices Public Class WindowFromWindowName

More information

構造体

構造体 構造体 Byte 配列 構造体とコピーする方法 構造体とバイト配列の変換を行うには System.Runtime.InteropServices 名前空間をインポートして置くと便利で有る Imports System.Runtime.InteropServices using System.Runtime.InteropServices; 下記の 3 種類の構造体にバイト配列の値を格納した場合に付いて検証する

More information

わにわにパニックプログラム

わにわにパニックプログラム 目覚まし時計プログラム VB 2005 2 プログラムの概要 オーソドックスなユーティリティ 目覚まし時計 を作成する プログラムを起動すると 懐かしいアナログの目覚まし時計が 画面に表示される 時針 分針 秒針が 現在の時間を知らせる 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲーム感覚のプログラムを作成する事に依り 楽しみ乍ら プログラムの制作手順を習得する事を目的として居る

More information

回文作成支援プログラム

回文作成支援プログラム 回文作成支援プログラム VB1 プログラムの概要 原文を 1 字入力する度に 其の回文が順次表示される 即ち AB と入力すると ABA と表示され ABC と入力すると ABCBA と表示される 亦 消去ボタンをクリックすると 原文 及び 回文を消去する事も出来る 終了ボタンをクリックすると プログラムをメモリから消去して終了する 今回の課題項目 単純変数の宣言 (Dim) 標準コントロールの利用

More information

ウォームアップ講座 51~60

ウォームアップ講座 51~60 カールおじさんの林檎狩 VB 2005 51 プログラムの概要 アクションゲーム カールおじさんの林檎狩 で有る 頭上の林檎が 段々と生長して落下して来るので カールおじさんを矢印キーで移動させて 林檎をキャッチする 前後も考慮されるので 上部の俯瞰図にも注意する 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り

More information

何時何処で誰が

何時何処で誰が 何時何処で誰が VB 2005 2 プログラムの概要 表示タブでは 表示ボタンをクリックする度に 各文節がランダムに選択されて表示される 編集タブでは 新たに文章を入力して追加したり 既存の文章を訂正して更新したり 不要の文章を削除したりする事が出来る 亦 先頭や末尾 1 つ前や 1 つ後のレコードに移動する為のボタンも用意する 今回は ファイルアクセスの基礎と成るシーケンシャルファイルの入出力全般に付いて学習します

More information

通信対戦プログラム

通信対戦プログラム 通信対戦プログラム C# 2005 6 プログラムの概要 Winsock コントロールを使用すると リモートコンピュータに接続し データを交換出来る事を利用して 通信対戦ゲームを作成する ゲームに関する処理は 既に標準モジュールに グローバルなプロシージャとして 入力されて居るので 此れを追加して 使用する ( ファイル名は othello_mod.vb で有る ) 相手のアドレス (IP アドレス

More information

Prog2_12th

Prog2_12th 2018 年 12 月 13 日 ( 木 ) 実施クラスの継承オブジェクト指向プログラミングの基本的な属性として, 親クラスのメンバを再利用, 拡張, または変更する子クラスを定義することが出来る メンバの再利用を継承と呼び, 継承元となるクラスを基底クラスと呼ぶ また, 基底クラスのメンバを継承するクラスを, 派生クラスと呼ぶ なお, メンバの中でコンストラクタは継承されない C# 言語では,Java

More information

草競馬プログラム

草競馬プログラム 草競馬プログラム C# 2005 5 プログラムの概要 6 頭の馬の内 一着でゴールする馬を予想してテキストボックスに 1 から 6 の数値を入力してスタートボタンをクリックする 馬は 乱数を利用して 右から左に 1 枡宛移動する 一定の時間間隔で乱数を発生させて該当する馬を 1 枡左に移動させるにはタイマーオブジェクトを使用する 1 頭の馬がゴールに達すると 予想が的中したか何うか判定を行い あたり

More information

3D回転体プログラム

3D回転体プログラム 3D 回転体プログラム C# 2005 4 プログラムの概要 入力画面で マウスを用いて 側面より見た平面図を描きます マウスの左ボタンをクリックする事で連続線を描き 右ボタンをクリックすると新しい線を描く事が出来る 側面図が完成すると 回転の基本角度を設定して 確定ボタンをクリックすると 平面図を立体図に座標変換する 各軸の回転角度を設定して 表示ボタンをクリックすると 立体図が表示される 各軸の回転角度を変更して

More information

相性占いプログラム

相性占いプログラム 相性占いプログラム VB1 プログラムの概要 画面上で 男女夫々れの誕生日の月日と血液型をコンボボックスより選択した後 占うボタンをクリックします 相性とアドバイス & ポイントは 血液型と星座の位置に依り 予め或る占術法に基づき作成されたデータをファイルより読み込んで配列に記憶させ 誕生日と血液型に依り算出された評価値に該当するデータを表示します 猶 必要な入力が行われて居ない場合には 警告音を鳴らして

More information

正規表現応用

正規表現応用 正規表現 正規表現を使って文字列が或る形式と一致するか調べる 指定された正規表現のパターンと一致する対象が入力文字列内で見付かるか何うかを調べるには Regex クラスの IsMatch メソッドを使用する 此処では IsMatch メソッドを使った例を幾つか紹介する 猶 正規表現のパターンと一致する個所を探し 見付かれば 其の箇所を抽出する方法は 正規表現を使って文字列を検索し 抽出する で紹介して居る

More information

プロセス間通信

プロセス間通信 プロセス間通信 プロセス間通信 (SendMessage) プロセス間通信とは 同一コンピューター上で起動して居るアプリケーション間でデータを受け渡し度い事は時々有る Framework には リモート処理 と謂う方法でデータの受け渡しを行なう方法が有る 此処では 此の方法では無く 従来の方法の API を使用したプロセス間通信を紹介する 此の方法は 送信側は API の SendMessage で送り

More information

Public Grid As ReverseGrid Public Position As Point ' 論理位置 Public Rectangle As Rectangle ' 物理位置 Status; 黒 白 なしの状態 Grid; オセロの盤面 Position; 盤面内の説明 Rectan

Public Grid As ReverseGrid Public Position As Point ' 論理位置 Public Rectangle As Rectangle ' 物理位置 Status; 黒 白 なしの状態 Grid; オセロの盤面 Position; 盤面内の説明 Rectan 31204 プログラミング 3605 井上寛晶 3531 松井佑樹 3635 宮地翼 要旨各自でフリーソフトを作成 インターネット上に公開することを目的とし Visual Basic2008 2010 を使い 二年生までは ちんちろりん という簡単なゲームを作ったが 今回はより難度が高い オセロ の作成に成功した 本文 1. 目的情報化が進んだ現代において 社会に出ていくためにはパソコンの一つや二つ

More information

Prog2_15th

Prog2_15th 2019 年 7 月 25 日 ( 木 ) 実施メニューメニューバーとコンテクストメニュー Visual C# では, メニューはコントロールの一つとして扱われ, フォームアプリケーションの上部に配置されるメニューバーと, コントロール上でマウスを右クリックすると表示されるコンテクストメニューとに対応している これ等は選択するとメニューアイテムのリストが表示されるプルダウンメニューと呼ばれる形式に従う

More information

神経衰弱ゲーム

神経衰弱ゲーム 神経衰弱ゲーム C# 2005 10 プログラムの概要 プログラムを起動すると 1 組のカードが裏向きに表示される 開始ボタンをクリックすると 其の場所に 先手と後手の得点が表示され タイトル部分に手番が表示されてゲームを開始する事が出来る 任意のカードを左クリックして開き 同じ数字のカードを 2 枚開くと 其のカードは盤上から取り除かれ カードを開いた者の得点と成る 開いた 2 枚のカードが揃わ無い時は

More information

万年暦プログラム

万年暦プログラム 万年暦プログラム C# 2005 7 プログラムの概要 年月をテキストボックスで指定した後 表示ボタンをクリックして 指定した年月のカレンダーを表示する 画面上部のグループボックスでは 現在の年月日と時間をリアルタイムで表示する 此の場合 時間丈でなく 日付が変われば 日付もリアルタイムで変化する 指定した年月のカレンダーを表示するには 日付と時間を扱う組込関数を使用し 亦 日付と時間をリアルタイム表示するには

More information

1.dll の配置場所配布時はプログラムの実行フォルダーへ配置 2. 開発環境での使用 プロジェクトのプロパティーで [USBPIO.dll] を参照追加してください 開発環境 dll ファイルの場所 VB.Net Express Edition 境プロジェクトのフォルダ \bin\release VB.Netebugビルドの場合プロジェクトのフォルダ \bin\debug VB.Net Releaseビルドの場合プロジェクトのフォルダ

More information

Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバー

Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバー Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバーコード OCX や バーコード対応レ ポートツールが豊富にありますので それほど困ることは無いと思われます

More information

VB実用⑬ 印刷Ⅲ(PrintFormメソッド)

VB実用⑬ 印刷Ⅲ(PrintFormメソッド) 印刷 Ⅳ VB 2005 4 プログラムの概要 事務処理に於いて 集計結果等を印刷して 確認等を行う事も多い為 ペーパーレスオフィスが推奨される昨今に於いても 矢張り印刷に関する技術は必要で有る Visual Basic から印刷を行う方法は.NET 以降 PrintDocument オブジェクトを使用する方法が 標準機能と仕て一般的で有るが Professional 版等では ReportView

More information

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略       - LogisticaTRUCKServer-Ⅱ(SQLServer 版 ) 距離計算サーハ API.NET DLL WindowsForm サンフ ルフ ロク ラム - 1 - LogisticaTRUCKServer-Ⅱ 距離計算サーハ.NET DLL WindowsForm VisualBasic での利用方法 LogisticaTRUCKServer-Ⅱ 距離計算.NET DLLのサンプルプログラムの参照サンフ

More information

DAOの利用

DAOの利用 DAO VB2005 で DAO を使用して Excel のデータを取得 Visual Basic 6.0 Dim DB As DAO.Database Dim RS As DAO.Recordset Dim xlfilename As String Dim xlsheetname As String xlfilename = Form1.StatusBar1.Panels(12) & Dir(Form1.StatusBar1.Panels(12)

More information

相性占いプログラム

相性占いプログラム 相性占いプログラム C# 2005 1 プログラムの概要 画面上で 男女夫々れの誕生日の月日と血液型をコンボボックスより選択した後 占うボタンをクリックする 相性とアドバイス & ポイントは 血液型と星座の位置に依り 予め或る占術法に基づき作成されたデータをファイルより読み込んで配列に記憶させ 誕生日と血液型に依り算出された評価値に該当するデータを表示する 猶 必要な入力が行われて居ない場合には 警告音を鳴らして

More information

占領双六ゲーム

占領双六ゲーム 占領双六ゲーム C# 2005 9 プログラムの概要 赤と青の 2 者が順番にサイコロを振り 出た目の数だけ駒を進めて行き 停止したマス目を自分の色に塗り潰して 自分の陣地に出来ると謂う 所有る陣取りゲームを作成する マス目は最初に其のマスに停止した方の陣地となり 既に孰れかの色に塗り潰されて居るマスに 後から別の駒が停止しても 陣地の占領者が変わる事は無い 総てのマス目が孰れかの色に塗り潰されゝばゲームは終了し

More information

万年暦プログラム

万年暦プログラム 万年暦プログラム VB 2005 7 プログラムの概要 年月をテキストボックスで指定した後 表示ボタンをクリックして 指定した年月のカレンダーを表示する 画面上部のグループボックスでは 現在の年月日と時間をリアルタイムで表示する 此の場合 時間丈でなく 日付が変われば 日付もリアルタイムで変化する 指定した年月のカレンダーを表示するには 日付と時間を扱う組込関数を使用し 亦 日付と時間をリアルタイム表示するには

More information

スレッド操作 タイマー

スレッド操作 タイマー スレッド操作 タイマー System.Windows.Forms.Timer Windows フォームの Timer は 一定の間隔でイベントを発生させるコンポーネントで有る 此のコンポーネントは Windows フォーム環境で使用する サーバー環境に適したタイマが必要な場合は 後述の System.Timers.Timer を使用する イベントの発生する間隔は ミリ秒単位で Interval プロパティで設定しする

More information

チャットプログラム

チャットプログラム チャット C# 2005 5 プログラムの概要 Winsock コントロールを使用すると リモートコンピュータに接続し データを交換出来る事を利用して チャット ( 通信雑談システム ) を作成する サーバー クライアント共に 背景色が黄色のテキストボックスに必要項目を入力し 設定ボタンをクリックすると 通信が確立し チャットを開始する事が出来る 送信用テキストボックスに送信文を入力して送信ボタンをクリックすると

More information

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略       - LogisticaTRUCKServer-Ⅱ(SQLServer 版 ) 距離計算サーハ API.NET DLL WebForms ASP.NET サンフ ルフ ロク ラム - 1 - LogisticaTRUCKServer-Ⅱ 距離計算サーハ.NET DLL WebForm ASP.NET VisualBasic での利用方法 LogisticaTRUCKServer-Ⅱ 距離計算.NET

More information

マルチメディア・音声

マルチメディア・音声 マルチメディア 音声 VB 2005 7 プログラムの概要 マルチメディアコントロールを使用すると アプリケーションでメディアコントロールインターフェイス (MCI) デバイスを扱う事が出来る事を利用して マルチメディアプレイヤーを作成する 此処では ビデオファイル (AVI) MIDI シーケンサ (MID) WAVE オーディオ (WAV) オーディオ CD を再生するプレイヤーを作成する ドライブリストボックス

More information

ウォームアップ 61-70

ウォームアップ 61-70 烏賊セーバー VB 2005 71 プログラムの概要 可愛い烏賊が 画面を泳ぐスクリーンセーバーで有る 烏賊の数 背景 ( 黒一色かデスクトップ画面 ) を設定する事が出来る 背景が 黒一色の場合は 単に烏賊が 左右から現れては 反対側に泳いで行く丈だが デスクトップ画面の場合は 徐々に背景が烏賊の形に塗り潰されて行く スクリーンセーバーの本来の目的は ディスプレイの焼き付きを防止する事で有るが 現在では

More information

1. 入力画面

1. 入力画面 指定した時刻に指定したマクロ (VBA) を実行するプログラム (VBA) 益永八尋 様々な業務を行っている場合には 指定した時刻に指定したマクロ (Macro VBA) を実行したくなる場合がある たとえば 9:00 17: 00 や 1 時間 6 時間間隔に指定したマクロ (Macro VBA) を実行する この様な場合に対応できるように汎用性の高いプログラムを作成した この場合に注意する必要があるのは

More information

パラパラ漫画

パラパラ漫画 パラパラ漫画 C# 2005 3 プログラムの概要 10 枚のピクチャーボックスの夫々れに マウスを左クリックしてドラッグする事に依り 連続線を引き 自由な絵を描く 此の場合 マウスを右クリックする事に依り 新たな線を描き始める事が出来る 描画の対象と成る各ピクチャーボックスは 戻るボタン又は 進むボタンをクリックする事に依り 変更する事が出来る 10 枚の絵を描き終われば ( 途中での再生も可 )

More information

データを TreeView コントロールで表示 VisualStudio2017 の Web サイトプロジェクトで bootstrap, 及び script フォルダの js ファイルが使用できるマスターページを親とする TestTreeView.aspx ページを作成します 下記の html コー

データを TreeView コントロールで表示 VisualStudio2017 の Web サイトプロジェクトで bootstrap, 及び script フォルダの js ファイルが使用できるマスターページを親とする TestTreeView.aspx ページを作成します 下記の html コー データを TreeView コントロールで表示 VisualStudio2017 の Web サイトプロジェクトで bootstrap, 及び script フォルダの js ファイルが使用できるマスターページを親とする TestTreeView.aspx ページを作成します 下記の html コードのスタイルを作成します html コード 1

More information

データベースⅠ

データベースⅠ データベース操作プログラム Ⅰ VB 2005 8 プログラムの概要 データベースプログラムを手軽に作成する方法としては Access のフォーム機能を用いる事が 先ず考えられます ウィザードも充実しており 操作を覚えれば簡単に作成する事が出来ます 其れでは VB でデータベースプログラムを作るメリットは何んでしょうか 1 つは Access のフォーム機能に比べ コントロールが充実している事 より自由なデザインが可能です

More information

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D GS1-128 の描画 DLL について (ver. 2.2) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される必要があります 使用条件 プリンタの解像度 300dpi 以上 機能 バーコードの基本幅を 1 ドット単位で指定できる

More information

画像閲覧プログラム

画像閲覧プログラム 画像閲覧プログラム C# 2005 3 プログラムの概要 連動するドライブリストボックス ディレクトリリストボックス ファイルリストボックスから画像ファイルを選択してクリックします ピクチャーボックスに選択した画像が実物大で表示される 此の時 画像が表示領域より大きい場合は 画像の大きさに応じてスクロールバーが表示される 此のスクロールバーを操作する事に依り 画像全体を見る事が出来る 終了ボタンをクリックすると

More information

クリッピング領域

クリッピング領域 グラフィックス 領域の利用 GDI+ での領域 領域は 出力デバイスのディスプレイ範囲の一部です 単純な領域 ( 単一の四角形 ) と複雑な領域 ( 複数の多角形と閉じた曲線の組み合わせ ) があります 四角形から構築された領域とパスから構築された領域を次の図に示します 領域の使用 領域は クリッピングとヒットテストに使用されることがよくあります クリッピングでは ディスプレイ範囲の特定の領域 (

More information

VB実用⑩ エクセル操作Ⅳ

VB実用⑩ エクセル操作Ⅳ VB でエクセル操作 Ⅳ VB 2005 10 プログラムの概要 事務処理に於いて Microsoft 社のスプレッドシートソフトで有るエクセルは データベースソフトで有るアクセスと共に 業界標準 (De Facto Standard) で有ると謂う事が出来る 今回は Visual Basic から エクセルのセルに値を設定する手法を 重点的に学ぶ 前回迄に学んだエクセル操作の為のオブジェクトの生成を元に

More information

GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される

GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される必要があります 使用条件 プリンタの解像度 300dpi 以上 機能 バーコードの基本幅を 1 ドット単位で指定できる

More information

Java KK-MAS チュートリアル

Java KK-MAS チュートリアル artisoc チュートリアル お問合せは創造工学部まで TEL : 03-5342-1125 E-mail : artisoc@kke.co.jp 株式会社 構造計画研究所 164-0012 東京都中野区本町 4-38-13 創造工学部 TEL:03-5342-1125 FAX:03-5342-1225 社会現象をシミュレーションしよう ユーザフレンドリーなマルチエージェント シミュレータ artisoc

More information

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~ .NET プログラマー早期育成ドリル VB 編 付録文法早見表 本資料は UUM01W:.NET プログラマー早期育成ドリル VB 編コードリーディング もしくは UUM02W:.NET プログラマー早期育成ドリル VB 編コードライティング を ご購入頂いた方にのみ提供される資料です 資料内容の転載はご遠慮下さい VB プログラミング文法早見表 < 基本文法 > 名前空間の定義 Namespace

More information

Microsoft PowerPoint - diip ppt

Microsoft PowerPoint - diip ppt 2006 年度デザイン情報学科情報処理 III 第 12 回マウスによる制御 ブロック崩し の部品 ボール直径 10pixel の円ラケット横 60pixel 縦 10pixel, マウスにより左右に移動ブロック横 50pixel 縦 20pixel,28 個 (7 個 4 段 ) 壁 ( フィールド ) 横 400pixel 縦 600pixel 2006 年度デザイン情報学科情報処理 III 2

More information

モグラ叩きプログラム

モグラ叩きプログラム プログラミングの有用性 VB 2005 1 醒めよ!! 遣り度い事を遣るには 先ず 遣らなければ成らない事を遣る! 現に 其の事に気付いて 日々 其の 遣らなければ成らない事 に邁進して居る人間が 居る 寧ろ 其れを愉しんでさえ居る者も居る 然して 着実に 世の中が必要とする技 術を身に付けて行って居る者が居る 併し 何が 遣らなければ成らない事 なのか解らない場合は 現実に対応出来る技術力 を持ち

More information

グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラ

グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラ C# & VB 1 グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラフィックを行うためには Visual Studio の基本操作や C# または VB

More information

スライド 1

スライド 1 C# の基本 ~ ファイル読み込み ~ 今回学ぶ事 今回はファイル読み書きに必要 BinaryReader クラスについて記載する ファイル参照ダイアログである OpenFileDialog クラスについても理解を深める また Bitmap クラスを用いた Bitmap ファイルの読み込み方法についても学ぶ フォーム作り まず label picturebox を配置する ツールボックスより左クリックで選択する

More information

VFD256 サンプルプログラム

VFD256 サンプルプログラム VFD256 サンプルプログラム 目次 1 制御プログラム... 1 2.Net 用コントロール Vfd256 の使い方... 11 2.1 表示文字列の設定... 11 2.2 VFD256 書込み前のクリア処理... 11 2.3 書き出しモード... 11 2.4 表示モード... 12 2.5 表示... 13 2.6 クリア... 13 2.7 接続方法 ボーレートの設定... 13 2.8

More information

3D回転体プログラム

3D回転体プログラム 3D 回転体プログラム VB4 プログラムの概要 入力画面で マウスを用いて 側面より見た平面図を描きます マウスの左ボタンをクリックする事で連続線を描き 右ボタンをクリックすると新しい線を描く事が出来る 側面図が完成すると 回転の基本角度を設定して 確定ボタンをクリックすると 平面図を立体図に座標変換する 各軸の回転角度を設定して 表示ボタンをクリックすると 立体図が表示される 各軸の回転角度を変更して

More information

VB実用⑫ 印刷Ⅱ(Printerオブジェクト)

VB実用⑫ 印刷Ⅱ(Printerオブジェクト) 印刷 Ⅱ VB 2005 2 プログラムの概要 事務処理に於いて 集計結果等を印刷して 確認等を行う事も多い為 ペーパーレスオフィスが推奨される昨今に於いても 矢張り印刷に関する技術は必要で有る Visual Basic から印刷を行う方法は.NET 以降 PrintDocument オブジェクトを使用する方法が標準機能と仕て一般的で有るが Professional 版等では ReportView

More information

回文作成支援プログラム

回文作成支援プログラム 回文作成支援プログラム C# 2005 2 プログラムの概要 原文を 1 字入力する度に 其の回文が順次表示される 即ち AB と入力すると ABA と表示され ABC と入力すると ABCBA と表示される 亦 消去ボタンをクリックすると 原文 及び 回文を消去する事も出来る 終了ボタンをクリックすると プログラムをメモリから消去して終了する 今回の課題項目 単純変数の宣言 ( データ型変数名 ;)

More information

Microsoft Word - VB.doc

Microsoft Word - VB.doc 第 1 章 初めてのプログラミング 本章では カウントアップというボタンを押すと表示されている値が1ずつ増加し カウントダウンというボタンを押すと表示されている値が1ずつ減少する簡単な機能のプログラムを作り これを通して Visual Basic.NET によるプログラム開発の概要を学んでいきます 1.1 起動とプロジェクトの新規作成 Visual Studio.NET の起動とプロジェクトの新規作成の方法を

More information

VB実用⑨ エクセル操作Ⅲ

VB実用⑨ エクセル操作Ⅲ VB でエクセル操作 Ⅲ VB 2005 9 プログラムの概要 事務処理に於いて Microsoft 社のスプレッドシートソフトで有るエクセルは データベースソフトで有るアクセスと共に 業界標準 ( De Facto Standard) で有ると謂う事が出来る 今回は エクセルのセルに設定された書式の取得を 重点的に学ぶ 前回迄に学んだエクセル操作の為のオブジェクトの生成と 既存のエクセルのデータが実際に入力されて居る範囲と値の取得を元に

More information

14.event-handling

14.event-handling 14. Event-Handling イベント処理 (Event Handling) 今回は Windows の Form アプリケーションで 様々なイベント を表示する時のプログラムです 題材として 以下のプログラムを使います 何のプログラムか? 見ての通りです 全く同じプログラムで 先頭 の数行を変更するだけでサイズや通路の広さを変えることができます 試してみてください なお 縦 と 横 のサイズは一致させています

More information

コンピュータ概論

コンピュータ概論 4.1 For Check Point 1. For 2. 4.1.1 For (For) For = To Step (Next) 4.1.1 Next 4.1.1 4.1.2 1 i 10 For Next Cells(i,1) Cells(1, 1) Cells(2, 1) Cells(10, 1) 4.1.2 50 1. 2 1 10 3. 0 360 10 sin() 4.1.2 For

More information

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値 ( 此処では 10) を代入する丈でなく 2 の配列変数の宣言の様に ブレース { } の中にカンマ区切りで初期値のリストを記述し 配列の各要素に初期値を代入出来る様に成った

More information