占領双六ゲーム

Similar documents
占領双六ゲーム

ルーレットプログラム

ブロック パニック

ブロック崩し風テニス

インベーダープログラム

相性占いプログラム

神経衰弱ゲーム

回文作成支援プログラム

3D回転体プログラム

グラフィックス

回文作成支援プログラム

万年暦プログラム

回文作成支援プログラム

回文作成支援プログラム

Userコントロール

ExcelVBA

ICONファイルフォーマット

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

万年暦プログラム

sinfI2005_VBA.doc

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

VB実用⑦ エクセル操作Ⅰ

VB.NET解説

ファイル操作

データアダプタ概要

相性占いプログラム

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

画像閲覧プログラム

正規表現応用

プロセス間通信

回文作成支援プログラム

ListViewコントロール

草競馬プログラム

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

NotifyIconコントロール

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

チャットプログラム

Microsoft Word - VB.doc

万年暦プログラム

スロットプログラム

万年暦プログラム

何時何処で誰が

モグラ叩きプログラム

データベース1

回文作成支援プログラム

3D回転体プログラム

Prog2_12th

倉庫番

GUIプログラムⅣ

Microsoft Word _VBAProg1.docx

MS-ExcelVBA 基礎 (Visual Basic for Application)

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

パラパラ漫画

Microsoft Word -

アプリケーション

構造体

データベースⅠ

PowerPoint プレゼンテーション

VB実用Ⅲ⑩ フリーデータベースⅡ

プラグイン

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

ハッシュテーブル

ファイル操作-バイナリファイル

かべうちテニス

PowerPoint プレゼンテーション

プレポスト【問題】

ii Excel Excel IF IF IF VLOOKUP HLOOKUP IF VLOOKUP HLOOKUP ExcelVBA Excel Excel Excel Web p Excel Excel Excel

ウィンドウ操作 応用

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

ファイル監視

PowerPoint プレゼンテーション

Java講座

バスケットボール

データベース1

画像閲覧プログラム

VFD256 サンプルプログラム

プログラミング演習

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

PowerPoint プレゼンテーション

VB実用⑯ 印刷Ⅵ(Excel)

相性占いプログラム

神経衰弱ゲーム

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

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

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが

Microsoft PowerPoint - VBA解説1.ppt [互換モード]

DAOの利用

Prog2_15th

Microsoft Word - VB_10.doc

Javaプログラムの実行手順

VB実用⑩ エクセル操作Ⅳ

はるよちゃんっ!


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

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

ドッグファイト

VB実用⑧ エクセル操作Ⅱ

グラフィックス 目次

スライド 1

データベースⅡ

Transcription:

占領双六ゲーム VB 2005 9 プログラムの概要 赤と青の 2 者が順番にサイコロを振り 出た目の数だけ駒を進めて行き 停止したマス目を自分の色に塗り潰して 自分の陣地に出来ると謂う 所有る陣取りゲームを作成する マス目は最初に其のマスに停止した方の陣地となり 既に孰れかの色に塗り潰されて居るマスに 後から別の駒が停止しても 陣地の占領者が変わる事は無い 総てのマス目が孰れかの色に塗り潰されゝばゲームは終了し 最終的に多くのマスを塗り潰した方が勝ちと成る 今回の課題項目 単純 配列変数の宣言 (Private Static Dim) 標準コントロールの利用 (Panel PictureBox Label Button Timer) コントロール配列の利用 (Control 型のオブジェクト配列変数にコントロールを格納 ) プロパティの値の取得と設定 (BackColor Name Text Width Height Location 等 ) イベントの利用 (Load Click Tick) メソッドの利用 (Equals Add) ステートメントの利用 (Call Exit Sub) サブプロシージャーの作成と呼出 (Private Sub プロシージャ名 Call) 組込関数の利用 (SubString Int Val Rnd Cstr MsgBox) 演算子 ( 代入演算子 比較演算子 結合演算子 ) 制御構造構文 ( 条件分岐 If ~ Then Select Case ループ処理 For ~ Next) 今回の重点項目 変数の適用範囲 (Private Static Dim) コントロール配列の利用 (Control 型のオブジェクト配列変数にコントロールを格納 ) 埋め込み画像の利用 ( リソースの利用 ) Select Case 文による条件分岐 (Select Case ~ Case End Select) 今回の応用項目 マス毎に点数を付け 高得点を競うゲームにする 先に 9 地点占領するとゲームが終了する様にする 色々なルールを考えて観る -1-

~ VB 2005 9 VB 2005 基礎 Ⅰ noa オブジェクト プロパティ一覧 左上を起点に時計廻りに配置パネル 1 ピクチャーボックス 1 パネル 16 ピクチャーボックス 3 ピクチャーボックス 2 ラベル コマンドボタン タイマー 1 タイマー 2 コントロールの種類 プロパティ プロパティの設定値 フォーム Name sugoroku BackColor White FormBorderStyle FixedSingle Icon saikoro.ico MaximizeBox False StartPosition CenterScreen Text 占領双六ゲーム パネル1 Name pnlmasu00 BackColor Aqua( 任意の色に設定しても良い ) パネル16 Name pnlmasu15 BackColor Aqua( 任意の色に設定しても良い ) ピクチャーボックス1 Name picdice Image 1.gif( ローカルリソースでインポート ) Size 32, 39 ピクチャーボックス2 Name picred Image picred.gif( ローカルリソースでインポート ) Size 37, 37 ピクチャーボックス3 Name picblue Image picblue.gif( ローカルリソースでインポート ) Size 37, 37-2-

コントロールの種類 プロパティ プロパティの設定値 ラベル Name lbldisp AutoSize False BackColor Black ForeColor White Text Font 1(MS 明朝, 太字, 12) TextAlign MiddleCenter ボタン Name btndice BackColor Blue ForeColor White Text Font ぽちっと ( 任意 ) タイマー 1 Name tmrdice Interval 200 タイマー 2 Name tmrgo Interval 500 ラベルテキストを表示するコントロール 此のテキストは ユーザーが直接入力したり変更したりする事は出来ない ボタンユーザーが選択したコマンド ( 命令 ) や操作を実行するコントロール OK ボタンや実行ボタン等 処理の開始や中断 終了の合図に用いられ 最も良く利用されるコントロールです パネル他のコントロールをグループ化する為のコンテナと成るコントロールで有る 通常は 機能別にフォームを細分化する為に使用する 亦 BackgroundImage プロパティを設定すると コントロールの背景にイメージが表示される タイマー一定の時間間隔でイベントが発生する様にするコントロール 一定時間毎にプログラムを実行したい時に使用する 此のコントロールは 実行時には表示されない ビットマップ アイコン メタファイル JPEG ファイル GIF ファイル等の画像を表示するコントロール 従来のバージョン (VB 6.0) の様に 描画メソッドを用いて描画する事や 内部に他のコントロールを配置してコンテナと仕て使用する事はは出来ない デザイン時の注意 パネルは 左上隅を起点にに最初のパネル (pnlmasu00) を配置して 以下時計廻りに 15 個のパネル (pnlmasu01~pnlmasu15) を配置する -3-

画像ファイルを実行ファイルに埋め込む ソリューションエクスプローラで 総てのファイルを表示 をクリックし ( 左図 ) My Project を展開して Resouces.resx をダブルクリックする ( 右図 ) 下図の様に RESX タブが表示されるので リソースの追加 新しいイメージ と進み GIF イメージ をクリックする 下図のダイアログボックスでは リソース識別名 ( 此処では Dice1 から Dice6 とする ) を入力し 追加 ボタンをクリックする WEB ブラウザ等の関連付けられたアプリケーションが起動し 該当ファイル ( 上記では Dice1.gif) を表示しようとするが 何も表示されないので アプリケーションを閉じる 追加したリソース ( 例えば Dice1) のプロパティで Persistence プロパティを.resx に埋め込まれました に変更する -4-

追加したリソースを右クリックして ポップアップメニューを表示し ファイルからインポート をクリックする ( 上図では 表示方法を 一覧での表示 と仕て居る ) ファイルを指定するダイアログボックスが表示されるので 対応する画像を選択し 開く ボタンをクリックする 上記の手順で 必要な画像ファイル ( 此処では 1.gif から 6.gif) を リソースに取り込む 猶 RESX タブに 画像ファイル等を直接ドラッグ & ドロップするか 又は プロジェクト内の Resouces フォルダに 画像ファイル等を直接コピーして ポップアップメニューから プロジェクトに含める をクリックして リソースを取り込む事も出来る -5-

Public Class sugoroku プログラムリスト 此処で Private 宣言した変数は同 じフォームモジュール内の総ての ' フォームレベルでグローバルな変数の宣言 サブプロシージャで値の参照と設 Private Dice As Byte ' 賽子の目数 定を行う事が出来る Private MasuCnt As Byte ' 占領桝総数 Private Turn As Byte ' 手番 (0: 赤 1: 青 ) 色を格納する変数には Color オブ Private PMasu(1) As Byte ' 現在桝目位置 ジェクト型を使用する Private BaseColor As Color ' 桝目背景色 Private pnlmasu(15) As Panel ' 桝目を表わす Panel オブジェクト Private pickoma(1) As Control ' 駒を表わす PictureBox オブジェクト ' フォームが読み込まれた時の処理 Private Sub sugoroku_load( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles Me.Load Dim C As Control Dim N As Byte ' 桝目の元の背景色の取得 BaseColor = pnlmasu00.backcolor ' コントロールの Object 配列化 For Each C In Me.Controls If C.Name Like "pnlmasu*" Then N = Val( C.Name.Substring( 7 ) ) pnlmasu( N ) = C ElseIf C.Name.Equals( "picred" ) Then pickoma( 0 ) = C ElseIf C.Name.Equals( "picblue" ) Then pickoma( 1 ) = C End If Next ' ゲームの初期化 Call gameinit( ) End Sub ' 駒を表示するジェネラルプロシージャ Private Sub KomaDisp( ByVal T As Byte ) Dim X, Y As Integer X = (pnlmasu( Pmasu(T)).Width - pickoma(t).width) / 2 Y = (pnlmasu( Pmasu(T)).Height - pickoma(t).height) / 2 X = X + (T = 0) * X / 2 - (T > 0) * X / 2 pickoma( T ).Location = New Point( X, Y ) pnlmasu( Pmasu( T ) ).Controls.Add( pickoma( T ) ) End Sub 此処で宣言した変数は宣言したサブプロシージャ内でしか値の参照と設定を行う事が出来ない Visual Basic.NET 以降ではコントロール配列が使用出来ない為 コントロールを配列変数に格納 オブジェクトの比較には 比較演算子 (=) では無く Equals メソッドを使用する Call は Sub プロシージャ等に制御を渡すステートメントで有る 駒を枡の中央に配置する様に横方向と縦方向の座標を求めた後 駒が同じ枡に停止した時の為に 横方向の位置を外らして居る コントロールの Left プロパティと Top プロパティは Location プロパティで纏めて設定出来る コンテナの Controls コレクションに Add メソッドでコントロールをコンテナ化する事が出来る -6-

' ゲームの初期化を行うジェネラルプロシージャ Private Sub GameInit( ) Dim I As Byte ' 各枡の背景色を元の色に設定 For I = 0 To 15 pnlmasu( I ).BackColor = BaseColor Next I ' 変数や駒の位置等の初期化 Turn = 0 MasuCnt = 0 Pmasu( 0 ) = 0 : Call KomaDisp( 0 ) Pmasu( 1 ) = 8 : Call KomaDisp( 1 ) lbldisp.text = " 赤の番 " btndice.enabled = True End Sub 此処で宣言した変数は宣言したサブプロシージャ内でしか値の参照と設定を行う事が出来ない 此のループ処理ではカウンター I の値を 0 から 15 に 1 宛変化させて Next 迄の処理を繰り返し行う 引数を指定して Sub プロシージャの呼び出す 此れは ローカルな変数値等を他のプロシージャに引き渡す時に利用する ' ボタン ( ぽちっと ) がクリックされた時の処理 Private Sub btndice_click( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles btndice.click ' トグル形式で tmrdice の Enabled プロパティを変更 If tmrdice.enabled = False Then tmrdice.enabled = True Else tmrdice.enabled = False tmrgo.enabled = True End If End Sub Enabled プロパティが True の場合は False に False の場合は True にと謂う様に循環する動作をトグルと謂い プログラムでは良く利用される ' タイマー ( 賽子を振る ) が一定間隔で行う処理 Private Sub tmrdice_tick( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles tmrdice.tick Dim S As String ' 乱数で賽子の目を設定 Dice = Int( Rnd( ) * 6 + 1 ) lbldisp.text = CStr( Dice ) ' リソース識別名の設定 S = "Dice" & CStr( Dice ) Rnd 関数を用いて1から6 迄の乱数を発生させて整数化し 其れをラベルに表示して居る 埋め込まれたリソースを実行時に読み込む為の公式で有る ' 賽子の画像を表示 picdice.image = My.Resources.ResourceManager.GetObject( S ) End Sub -7-

' タイマー ( 駒を進める ) が一定間隔で行う処理 Private Sub tmrgo_tick( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles tmrgo.tick Static ステートメントで宣言した Static GoCnt As Byte Static RedCnt As Byte Dim C As Color btndice.enabled = False 変数の値を1 増やす事をインクリ GoCnt += 1 メントと謂い プログラムでは良 Pmasu( Turn ) += 1 く利用される If Pmasu( Turn ) = 16 Then Pmasu( Turn ) = 0 最高値を超えた場合に最初に戻る Call KomaDisp( Turn ) 様な動作をトグルと謂い プログ If Dice = GoCnt Then ラムでは良く利用される tmrgo.enabled = False GoCnt = 0 ' 駒が占領されて居ない枡に停止した場合 If pnlmasu(pmasu(turn)).backcolor.equals(basecolor) Then If Turn = 0 Then C = Color.Red : RedCnt += 1 Else C = Color.Blue pnlmasu(pmasu(turn)).backcolor = C MasuCnt += 1 インクリメントは A=A+1 と謂う ' ゲーム終了事で有るが 使用頻度が高い為に If MasuCnt = 16 Then A+=1 と謂う簡略形も使用可 If RedCnt > 8 Then MsgBox( " 赤の勝ち!!",, " ゲーム終了 " ) 条件判定に 比較演算子を使用し ElseIf RedCnt = 8 Then て居る MsgBox( " 引き分け!!",, " ゲーム終了 " ) A > B : AはBより大きい Else MsgBox( " 青の勝ち!!",, " ゲーム終了 " ) ElseIf 節は 最初の条件を満たさ End If 無い場合で 更に条件分岐する必 RedCnt = 0 要の有る時に用いる 評価する変 Call GameInit( ) 数が同一の場合には Select Case Exit Sub 文を使用する事も出来る End If End If Exit Sub ステートメントは 以降 Select Case Turn のコードを実行せずに 直ちに Case 0 Sub プロシージャを抜ける命令で Turn = 1 有る lbldisp.text = " 青の番 " Case 1 Turn = 0 変数の取り得る値が0か1で 0 lbldisp.text = " 赤の番 " なら1に 1なら0にトグル形式 End Select で変更するには 論理演算子 Xor btndice.enabled = True を用いて A=A Xor 1 と謂う様に記 End If 述する事も出来る End Sub End Class -8- 変数は Sub プロシージャを抜け ても プログラムが実行されて居 る間を通して保持される

Substring メソッドに依る文字列の操作 機能 書式 解説 部分文字列を取得するメソッド Object.Substring( 開始位置, 文字数 ) Object で表わされる文字列の開始位置から指定した文字数丈切り出した文字列を返す 引数の開始位置には 開始位置のインデックスを指定し 省略する事は出来ない 引数の文字数には 切り取る文字数を指定し 省略可能で有る 引数の開始位置は 0 から始まるインデックスで指定する 亦 引数の文字数を省略した場合は インデックス以降の末尾迄の総ての文字列が切り出される Equals メソッドに依るオブジェクトの比較 機能 書式 解説 2 個のオブジェクトが同一か比較するメソッド Object.Equals( オブジェクト ) 2 個のオブジェクトが同一で有れば True を 同一でなければ False を返す 引数のオブジェクトには 比較するオブジェクトを指定し 省略する事は出来ない オブジェクトの比較は プリミティブな型の値を比較する = 演算子で比較する事は出来ない 其処でオブジェクトの比較には Is 演算子か Equals メソッドを用いる 猶 String 型は 実際には オブジェクト型で有るが 使用頻度が高い為 Visual Basic では プリミティブな型の様に = 演算子で比較する事が出来る Add メソッドに依るコントロールのコンテナ化 機能 書式 解説 コントロールコレクションにコントロールを追加するメソッド Object.Controls.Add( コントロール ) コントロールコレクションにコントロールを追加し コンテナ化 ( 内包 ) する 引数のコントロールには コレクションに追加するコントロールを指定し 省略する事は出来ない Object は フォーム パネル グループボックス等のコンテナに成る事の出来るコントロールで有る必要が有る コンテナに成る事の出来るコントロールとは 他のコントロールを内包する事の出来るコントロールの事を謂う 猶 追加されるコントロールが 既に他のコントロールの子コントロールで有る場合 別のコントロールに追加される前に 現在の親コントロールのコレクションから削除される -9-

変数の宣言と適用範囲 ( スコープ ) 機能書式解説機能書式解説機能書式解説機能書式解説 モジュールレベルで総てのサブプロシージャで参照出来る変数の宣言 Private 変数名 As 型 モジュールの全般 (General) の宣言部 (Declarations) に記述する 標準モジュール フォームモジュールの孰れでも宣言出来る プロシージャレベルでのみ参照出来る変数の宣言 1 Dim 変数名 As 型 通常 プロシージャの最初の部分に記述する 実行カーソルがサブプロシージャを抜けると記憶内容は抹消される モジュールレベルでの宣言にも使用出来るが 混同を避ける為に 使い分ける事が望ましい プロシージャレベルでのみ参照出来る変数の宣言 2 Static 変数名 As 型 通常 プロシージャの最初の部分に記述する 実行カーソルがサブプロシージャを抜けても記憶内容は保持し続ける アプリケーションレベルで総てのモジュールで参照出来る変数の宣言 Public 変数名 As 型 標準モジュールの全般 (General) の宣言部 (Declarations) に記述する 型の種類と範囲 Byte( バイト型 ) : 0 ~ 255 Integer( 整数型 ) : -32,768 ~ 32,767 Long( 長整数型 ) : -2,147,483,648~ 2,147,483,647 Single( 単精度実数型 ) : -3.402823E38~3.402823E38 Double( 倍精度実数型 ) : -4.94065645841247E-324~4.94065645841247E-324 Currncy( 通貨型 ) : -922,337,203,685,477.5808~922,337,203,685,477.5807 String( 文字列型 ) : 0~2GB Boolean( ブール型 ) : 真 (True) または偽 (False) Date( 日付型 ) : 100 年 1 月 1 日 ~9999 年 12 月 31 日 Variant( バリアント型 ) : 総ての型に対応 -10-

.NET Framework 対応 文字列の部分一致 従来の記述法 If C.Name Like "pnlmasu*" Then.NET Framework の記述法 If C.Name.StartsWith("pnlMasu") Then.NET Framework では 文字列の部分一致の検証には String クラスの様々なメソッドを使用するが出来る 前方一致の場合は 上記の StartsWith メソッド 後方一致の場合は EndsWith メソッド 部分一致の場合は Contains メソッドが提供されて居る 猶.NET Framework には 種々のパターン ( 例えば メールアドレスや電話番号等 ) に合致するか検証するには Regex クラスが提供されて居る 此の正規表現を簡易に行う事が出来るのが Like 演算子で有り Basic 固有の演算子では有るが 有用な演算子で有り Visual Basic でプログラミングして居る場合 特に書き直す必要は無い 文字列の数値化 従来の記述法 N = Val(C.Name.Substring(7)).NET Framework の記述法 N = Byte.Parse(C.Name.Substring(7)).NET Framework では 文字列を数値化するには 変換後のデータ型を表すクラスの Parse メソッドを使用する 但し Val 関数は 文字列を先頭から評価して行き 数値と仕て評価出来る処迄を数値化して返し 数値と仕て評価出来ない場合は 0 を返すと謂う柔軟性が有るが Parse メソッドでは 文字列が 変換後のデータ型と合致しない場合は 例外 ( エラー ) が発生する 其の為 入力された文字列を数値化する場合等では 入力された文字列が 変換後のデータ型と合致するか検証する為 TryParse メソッドを使用する必要が有る 但し 上記では コントロール名を正しく付けて居れば 8 文字目 ( インデックスは 7) 以降は 必ず整数値なので 変換後のデータ型と合致するかの検証は 必要が無い 猶 上記では 変数 N が Byte 型なので Byte クラスの Parse を使用して居るが 変換後のデータ型を表すクラス ( 例えば 変数 N が Double 型なら Double クラス ) の Parse を使用する -11-

乱数の発生 従来の記述法 Dice = Int(Rnd() * 6 + 1).NET Framework の記述法 Dice = New Random().Next(1, 7).NET Framework では 乱数を発生させるには Rnd 関数ではなく Random オブジェクトの Next メソッドを使用する クラスをインスタンスを変数に割り当てず 上記の様に 生成したインスタンスで 其の儘 メソッドを実行する事も出来る 上記では 1 以上 7 未満の整数値 (Integer 型 ) が返される 猶 Rnd 関数の様に 0.0 以上 1.0 未満の実数値 (Double 型 ) を返す NextDouble メソッドも提供されて居る リソースの利用 Basic 固有の記述法 picdice.image = My.Resources.ResourceManager.GetObject("Dice" & CStr(Dice)).NET Framework の記述法 Dim R As System.Resources.ResourceManager = _ New System.Resources.ResourceManager("sugoroku.Resources", GetType(sugoroku).Assembly) picdice.image = R.GetObject("Dice" & CStr(Dice)) 上記は 孰れも.NET Framework の記述法で有るが My は Basic 固有の機能で 頻繁に使用するメソッドやプロパティやイベントに解り易いアクセス方法を提供して居る 併し C# 等でも使用出来る.NET Framuwork の一般的な記述法で記述すると 下記の記述法と成る 此の場合 Next メソッドが 共有メソッド (Shared Method) でない為 先ず ResourceManager クラスのインスタンスを生成する必要が有る タイマーの始動 停止 従来の記述法 tmrdice.enabled = False tmrdice.enabled = True.NET Framework の記述法 tmrdice.stop() tmrdice.start().net Framework では タイマーの始動 停止には Start メソッドや Stop メソッドを使用するも出来る ( 孰れも 結果は同じで有る ) -12-