• 検索結果がありません。

万年暦プログラム

N/A
N/A
Protected

Academic year: 2021

シェア "万年暦プログラム"

Copied!
10
0
0

読み込み中.... (全文を見る)

全文

(1)

プログラムの概要

プログラムを起動すると1組のカードが裏向きに表示さ れる。開始ボタンをクリックすると、其の場所に、先手と 後手の得点が表示され、タイトル部分に手番が表示されて ゲームを開始する事が出来る。 任意のカードを左クリックして開き、同じ数字のカードを 2枚開くと、其のカードは盤上から取り除かれ、カードを 開いた者の得点と成る。開いた2枚のカードが揃わ無い時 は、右クリックして、カードを閉じる。 2枚のカードが揃えば、続けてカードを開く事が出来、揃 わ無ければ、順番が相手に移る。最終的に14組以上を獲 得した者が勝者と成る。

神経衰弱ゲーム

VB⑩ □ 単純・配列変数の宣言(Private、Dim) □ 標準コントロールの利用(Picture、CommandButton) □ コントロール配列の利用(Picture:コードでインスタンスを作成) □ プロパティの値の取得と設定(ScaleMode、Image、CurrentX、CurrentY、Left、Top 等) □ イベントの利用(Load、Click、MouseUp) □ メソッドの利用(Line、PaintPicture、Print) □ ステートメントの利用(Load、Randomize、Call、Exit Sub) □ 組込関数(乱数)の利用(Rnd)

□ 制御構造構文(条件分岐 If ~ Then、Select Case、ループ処理 For ~ Next) □ 演算子(代入演算子、比較演算子、結合演算子、論理演算子) □ サブプロシージャーの作成と呼出(Call:引数有りと無し) 今回の課題項目 □ 実行時のオブジェクト生成(Load) □ 商と剰余の利用(Mod 演算子、¥演算子) □ 画像の指定範囲転送(PaintPicture) 今回の重点項目 □ メッセージ等を別フォームで表示する。 今回の応用項目

(2)

■ オブジェクト・プロパティ一覧 ■ コントロールの種類 プロパティ プロパティの設定値 フォーム オブジェクト名 Form1 AutoRedraw True BaclColor &H00008000&(濃緑) BorderStyle 1-固定(実線) Caption 神経衰弱 ScaleMode 3-ピクセル Font MS明朝,太字,14 ピクチャーボックス1 オブジェクト名 picBase Appearance 0-フラット AutoSize True BorderStyle 0-なし Picture cards.gif ScaleMode 3-ピクセル Visible False ピクチャーボックス2 オブジェクト名 picCard Appearance 0-フラット AutoRedraw True BorderStyle 0-なし Height 96 Index 0 ScaleMode 3-ピクセル Width 71 ピクチャーボックス3 オブジェクト名 picBack Appearance 0-フラット AutoSize True BorderStyle 0-なし Picture back.gif ScaleMode 3-ピクセル Visible False ピクチャーボックス1 コマンドボタン ピクチャーボックス2 コントロール配列 (0だけを作成) ピクチャーボックス3

(3)

コントロールの種類 プロパティ プロパティの設定値 コマンドボタン オブジェクト名 cmdStart Caption 開始 Height 96 Width 143 ピクチャーボックス ビットマップ、アイコン、メタファイル、JPEGファイル、GIFフィル等の画像を表示す るコントロール。描画メソッドを用いて、円や直線等のグラフィックを描画する事も出来る。 亦、他のコントロールを内包するコンテナに成る事も出来る。 コマンドボタン ユーザーが選択したコマンド(命令)や操作を実行するコントロール。OKボタンや実行ボタ ン等、処理の開始や中断・終了の合図に用いられ、最も良く利用されるコントロールです。 算術演算子 比較演算子 論理演算子 1.^ 冪乗 1.= 等しい 1.Not 否定 2.- 負数 2.<> 等しくない 2.And 論理積 3.*、/ 乗算と除算 3.< より小さい 3.Or 論理和 4.¥ 整数除算 4.> より大きい 4.Xor 排他的論理和 5.Mod 剰余 5.<= 以下 5.Eqv 同値 6.+、- 加算と減算 6.>= 以上 6.Imp 包合 算術演算子と論理演算子では、複数の演算子が使用されて居る場合には、頭に付けた番号の順序で 演算が行われる(上に書かれて居る演算子程優先順位が高い)。 型の種類と範囲 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(バリアント型) : 総ての型に対応

(4)

■ プログラムリスト ■

Option Explicit

Private Card(51) As Integer ' カードの種類

Private Score(1) As Byte ' 得点(0:先手、1:後手) Private Turn As Byte ' 手番(0:先手、1:後手) Private Number As Byte ' 枚目(0:1枚目、1:2枚目) Private Shows(1) As Byte ' 表札(0:1枚目、1:2枚目)

' フォームが読み込まれた時の処理 Private Sub Form_Load( ) Dim I As Integer ' フォームのサイズを設定する Me.Width = 679 * Screen.TwipsPerPixelX Me.Height = 640 * Screen.TwipsPerPixelY ' フォームを中央に配置する

Me.Left = (Screen.Width - Me.Width) / 2 Me.Top = (Screen.Height - Me.Height) / 2 ' カード用のピクチャーボックスを配置する picCard(0).Top = 16: picCard(0).Left = 16 For I = 1 To 51 Load picCard(I) picCard(I).Top = (I ¥ 9) * 97 + 16 picCard(I).Left = (I Mod 9) * 72 + 16 picCard(I).Visible = True picCard(I).ScaleMode = 3 Next I ' 開始ボタンを配置する cmdStart.Top = 501 cmdStart.Left = 520 ' 乱数系列を初期化する Randomize ' ゲームを初期化する Call GameInit End Sub ' コマンドボタン(開始)がクリックされた時の処理 Private Sub cmdStart_Click( )

' スコアを初期化する

Call ScoreDisp(0, 0): Call ScoreDisp(1, 0) ' 手番を表示する Form1.Caption = "神経衰弱 - 先手の番です" ' 開始ボタンを非表示にする cmdStart.Visible = False End Sub 此処で宣言した変数は同じ フォーム内の総てのサブプ ロシージャで値の参照と設 定を行う事が出来る。 此処で宣言した変数は宣言 したサブプロシージャ内で しか値の参照と設定を行う 事が出来ない。 フォームのサイズはTwip 単 位でしか設定出来ない為、此 処では Screen オブジェクト のTwipsPerPixelX 等を用い てピクセル数をTwip に変換 して居る。 コントロール配列は、実行時 にLoad ステートメントを使 用して追加、Unload ステー トメントを使用して削除す る事が出来る。猶、Load ス テートメントで追加された コントロール配列の Visible プ ロ パ テ ィ は 初 期 状 態 で False に設定されて居る。 乱数系列を初期化する場合 に乱数の種(シード)を引数 として与える事も出来るが、 引数を省略した時は、システ ムタイマーから取得した値 が新しいシード値として使 用される。 Call は、Sub プロシージャ等 に制御を渡すステートメン トで有る。 必要が有れば、引数を指定す る事で、変数、配列、式の孰 れかをプロシージャに引き 渡す事が出来る。

(5)

' ピクチャーボックス(カード)がクリックされた時の処理

Private Sub picCard_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim S As String

If cmdStart.Visible = True Then Exit Sub Select Case Button

Case 1 ' 左ボタン

If Card(Index) = -1 Then Exit Sub If Number < 2 Then

Call CardDisp(Index, Card(Index))

Shows(Number) = Index: Number = Number + 1 End If

If Number = 2 Then

If (Card(Shows(0)) Mod 13) = (Card(Shows(1)) Mod 13) Then picCard(Shows(0)).Line (0, 0)-(71, 96), RGB(0, 128, 0), BF

picCard(Shows(1)).Line (0, 0)-(71, 96), RGB(0, 128, 0), BF Card(Shows(0)) = -1: Card(Shows(1)) = -1

Score(Turn) = Score(Turn) + 1 If Score(0) + Score(1) = 26 Then Select Case Score(0)

Case Is > 13 Form1.Caption = "神経衰弱 - 先手の勝ちです" Case Is < 13 Form1.Caption = "神経衰弱 - 後手の勝ちです" Case Else Form1.Caption = "神経衰弱 - 引き分けです" End Select Call GameInit cmdStart.Visible = True Else

Call ScoreDisp(Turn, Score(Turn)) Number = 0

End If End If End If

Case 2 ' 右ボタン

If Number = 0 Then Exit Sub

picCard(Shows(0)).PaintPicture picBack.Image, 0, 0

If Number = 2 Then picCard(Shows(1)).PaintPicture picBack.Image, 0, 0 Number = 0: Turn = Turn Xor 1

Select Case Turn Case 0 Form1.Caption = "神経衰弱 - 先手の番です" Case 1 Form1.Caption = "神経衰弱 - 後手の番です" End Select End Select End Sub マウスの左右のボタンの押 下状態はClick イベントでは 感知出来ない。

Select Case 文では、Is キー ワードを比較演算子と共に 用いて、値の範囲を指定する 事が出来る。 現在の変数の値に1を加え た値を新たな値にする、即ち 変数の値を1増やす事をイ ンクリメントと謂い、プログ ラムでは良く行われる。 Exit Sub ステートメントは、 以降のコードを実行せずに 直ちに Sub プロシージャを 抜ける命令で有る。 評価する変数が同一の場合 にはSelect Case 文を使用す るとコードが簡潔に成る。 変数の取り得る値が0か1 で、0なら1に、1なら0に 変更するには、論理演算子 Xor を用いる事が出来る。

(6)

' ゲームを初期化するサブプロシージャ Private Sub GameInit( )

Dim I As Integer, K As Integer, S As Integer, D As Integer

' カードを初期化する

For I = 0 To 51: Card(I) = I: Next I ' カードをシャッフルする

For I = 1 To 300

S = Int(Rnd * 52): D = Int(Rnd * 52)

K = Card(D): Card(D) = Card(S): Card(S) = K Next I

' 裏面カードを表示する

For I = 0 To 51: picCard(I).PaintPicture picBack.Image, 0, 0: Next I ' 開始ボタンを表示する cmdStart.Visible = True ' 得点を初期化する Score(0) = 0: Score(1) = 0 ' 手番を初期化する Turn = 0 ' 表札の枚数を初期化する Number = 0 End Sub ' カードを表示するサブプロシージャ

Private Sub CardDisp(N As Integer, S As Integer) Dim X As Integer, Y As Integer

X = (S Mod 13) * 71: Y = (S ¥ 13) * 96

picCard(N).PaintPicture picBase.Image, 0, 0, 71, 96, X, Y, 71, 96 End Sub

' 得点を表示するサブプロシージャ

Private Sub ScoreDisp(T As Byte, S As Byte) Dim Z As String, Y As Integer

If T = 0 Then Z = "先手": Y = 516 Else Z = "後手": Y = 556 With Form1 Form1.Line (535, Y)-Step(140, 30), RGB(0, 128, 0), BF .CurrentX = 536 .CurrentY = Y + 1 .ForeColor = vbRed

Form1.Print Z; ":"; StrConv(Right$(" " + Trim$(Str$(S)), 2), vbWide); "組" .CurrentX = 535

.CurrentY = Y

.ForeColor = vbYellow

Form1.Print Z; ":"; StrConv(Right$(" " + Trim$(Str$(S)), 2), vbWide); "組" End With End Sub 新規プロシージャ(ジェネラ ルプロシージャ)は、主に複 数のイベントプロシージャ で同じ様な処理が必要と成 る場合に、共通コードを記述 する為に使用するが、メンテ ナス面でも有用である。 変数の宣言は、此の様に複数 の変数をカンマで区切り1 行で宣言する事も出来る。 此れはカードシャッフルの 定型と謂う可き方法で有る。 PaintPicture メソッドに依 り、1枚の画像から必要な部 分だけを切り出して居る。 同じオブジェクトに対して 複数の処理を実施する必要 が有る場合With ステートメ ントを用いると、コードが簡 潔に成る。

(7)

Select文に依る条件分岐 評価式の値に従い、複数のステートメントブロックの中の孰れかを実行するステートメント Select Case 評価式 Case 該当式1 評価式が該当式1に該当する場合の処理 Case 該当式2 評価式が該当式2に該当する場合の処理 … Case Else 上記孰れの該当式にも該当しない場合の処理 End Select 評価式の値に従い、複数のステートメントブロックの中の孰れかを実行する。Select 文では 評価式が1回だけ評価され、其の値と各Case 節の値が比較され、一致した場合、其の Case 節に対応するステートメントブロックが実行される。 該当式には、1個以上の値リストを指定する。複数の値を指定する場合には、値をカンマ(,)で区切 る。亦、キーワードIs と To を使用する事も出来る。 評価式が複数の該当式と一致した場合には、最初に一致したCase 節のステートメントブロックが実行 される。亦、孰れの該当式とも一致しない場合は、Else Case 節(省略可能)が実行される。 For文に依るループ処理 指定した回数だけ一連の処理を行うステートメント For カウンター変数 = 初期値 To 終了値 Step 増分 一連の処理 Next カウンター変数

For…Next ステートメントは、For ステートメントから Next ステートメントの間に記述さ れた一連の処理を、指定した回数だけ繰り返し(ループ)実行する。 Step 節は省略する事が出来、此の場合、増分はプラス1と看做される。亦、増分は、負の値を指定する 事も出来る。 For…Next ステートメントのループは、下記の順序で実行される。 1.カウンター変数に初期値が設定される。 2.カウンター変数と終了値の値を比較し、カウンター変数の値が終了値より大きい場合は、ループ 内の処理は実行されずに、ループが終了する(増分が負の値の場合は、カウンター変数が終了値 より小さいかどうかが判断される)。 3.ループ内の処理を実行する。 4.カウンター変数に増分を加算する(Step 節を省略した場合は、1が加算される)。 5.ステップ2から4を繰り返す。 Exit For ステートメントを使用すると、ループから強制的に抜け出す事が出来る。 機 能 書 式 解 説 機 能 書 式 解 説

(8)

Randomizeステートメントに依る乱数系列の初期化 乱数ジェネレータを初期化(乱数系列を再設定)する数値演算ステートメント Randomize 引数 乱数系列を初期化して、新しい乱数系列を設定する。引数を省略した場合は、システムタイ マーから取得した値が新しいシード値として使用される。 引数には、Rnd 関数の乱数ジェネレータに与える新しいシード値を指定し、省略する事が出来る。 Rnd関数に依る乱数の発生 単精度浮動小数点型(Single)の乱数を返す関数 Rnd(引数) 0以上1未満の乱数を与える。引数の値に依り返す乱数が決まる。 発生される乱数は、引数の値に依り、下記の様に異なる。 1.引数が負の場合:指定した引数に対して常に同じ値を返す。 2.引数が0の場合:直前に発生した乱数の値を返す。 3.引数が正の場合:乱数系列の次の乱数の値を返す。 引数は括弧(パーレン)を含めて省略する事が出来、此の場合は、上記3と同じに成る。 システムタイマーから取得した新しいシード値(乱数の種)を使用して乱数系列を初期化するには、事 前にRndomize ステートメントを実行して置く。 任意範囲の整数の乱数を発生させる書式は、下記の通りで有る。 Int(Rnd(上限値 – 下限値 + 1) + 下限値) Loadステートメントに依るコントロールの実行時追加 フォームやコントロールをロードするステートメント Load 引数 Form オブジェクト、MDIForm オブジェクト、又は、コントロール配列をメモリにロード する。 引数には、ロードするオブジェクト名を指定し、省略する事は出来ない。 此のステートメントは、実行時にコントロール配列を追加する場合にも利用される。此の場合、既にコ ントロール配列がデザイン時に作成されて居る必要が有り、コントロール配列の要素番号で指定した要 素が追加される事に成る。 猶、コントロールがロードされた後、其のコントロールのVisible プロパティは偽(False)に設定され て居る為、表示するには、真(True)に設定し直す必要が有る。 機 能 書 式 解 説 機 能 書 式 解 説 機 能 書 式 解 説

(9)

PaintPictureメソッドに依る画像の描画 グラフィックを描画するメソッド Object.PaintPicture 引数1, 引数2, 引数3, 引数4, …, 引数8, 引数9, 引数10 フォーム、ピクチャーボックス、プリンターの各オブジェクトの任意の場所にグラフィック スを描く。 引数1には、オブジェクトに描画する画像のソースを指定し、必ず指定する。 引数2には、画像が描画されるオブジェクト内のX座標を指定し、必ず指定する。 引数3には、画像が描画されるオブジェクト内のY座標を指定し、必ず指定する。 引数4には、画像が描画される横幅を指定し、省略する事が出来る(省略時は原寸)。 引数5には、画像が描画される縦幅を指定し、省略する事が出来る(省略時は原寸)。 引数6には、描画される画像のクリッピング領域のX座標を指定し、省略する事が出来る(省略時は0) 引数7には、描画される画像のクリッピング領域のY座標を指定し、省略する事が出来る(省略時は0) 引数8には、描画される画像のクリッピング領域の横幅を指定し、省略する事が出来る(省略時は原寸) 引数9には、描画される画像のクリッピング領域の縦幅を指定し、省略する事が出来る(省略時は原寸) 引数10には、ラスタオペレーションを指定し、省略する事が出来る(ビットマップ以外指定不可)。 引数4、又は、5に負の値を指定すると、ビットマップを垂直方向、又は、水平方向に反転表示する事 が出来る。 引数6~9を指定する事に依り、1枚の画像から必要な部分だけを切り出して表示する事が出来る。猶 ソースの画像を表示して居るオブジェクト(ピクチャーボックス等)のWidth と Height プロパティの 範囲を超えた指定を行うと、画像は正しくクリッピングされない。 Lineメソッドに依る直線の描画 直線、又は,矩形を描画するメソッド

Line Step(引数1, 引数2)- Step(引数3, 引数4), 引数5, 引数6

フォーム,ピクチャーボックス,プリンタの各オブジェクトに対して,指定した2点間を結 ぶ直線、又は,矩形(四角形)を描く。 引数1には、直線/矩形が描画されるオブジェクト内の始点のX座標を指定し、省略する事が出来る。 引数2には、直線/矩形が描画されるオブジェクト内の始点のY座標を指定し、省略する事が出来る。 引数3には、直線/矩形が描画されるオブジェクト内の終点のX座標を指定し、必ず指定する。 引数4には、直線/矩形が描画されるオブジェクト内の終点のY座標を指定し、必ず指定する。 引数6には、描画色を指定し、省略する事が出来る。 引数7には、オプション(矩形:B、塗り潰し矩形:BF)を指定し、省略する事が出来る。 Step は、描画位置を相対位置で指定する場合に使用し、省略する事が出来る。

始点を省略した場合は、CurrentX 及び CurrentY に依り示される位置が描画の開始点に成る。Line メ ソッドが実行されると、CurrentX 及び CurrentY プロパティは、引数に依り指定された終点に設定さ れる。此れを利用して、始点を省略し、連続線を描く事が出来る。 機 能 書 式 解 説 機 能 書 式 解 説

(10)

Printメソッドに依る数値・文字列の出力 イミディエイトペイン内に数値、文字列等を出力するメソッド Object.Print 引数 テキストをフォーム、ピクチャーボックス、プリンタ、イミディエイトウィンドウ等に出力 する。 引数には、出力リストを指定し、省略する事が出来る。 引数は、出力するテキストで、複数のテキストを指定するには、夫々れをカンマ(,)、セミコロン(;) 又は、其の両方で区切る必要が有る。セミコロンで区切られた項目は、各項目の間にスペースを入れず に続けて表示され、カンマで区切られた項目は、一定の間隔を空けて表示される。亦、引数を省略した 場合には、空白行が出力される。 Print メソッドに依り表示されるテキストの位置を任意に設定するには、CurrentX プロパティと CurrentY プロパティを用いて描画座標を設定する。 ¥演算子に依る整数除算 2つの数値の商を計算し、結果を整数で返す演算子 数式1 ¥ 数式2 数式1を数式2で除算し、小数部を切り捨てゝ、其の商を返す。 除算を実行する前に、数式はバイト型、整数型、又は、長整数型の式に丸められる。 Mod演算子に依る剰余 2つの数値の除算を行い、其の剰余を返す演算子 数式1 Mod 数式2 数式1を数式2で除算し、其の剰余(余り)を返す。 除算を実行する前に、浮動小数点数は、整数に丸められる。 Xor演算子に依る排他的論理和 2つの数値の排他的論理和を返す演算子 数式1 Xor 数式2 数式1と数式2の排他的論理和(互いが異なる時だけ真に成る)を返す。 Xor 演算子は、論理演算子、及び、ビット演算子と仕て機能する。 機 能 書 式 解 説 機 能 書 式 解 説 機 能 書 式 解 説 機 能 書 式 解 説

参照

関連したドキュメント

2.2.2.2.2 瓦礫類一時保管エリア 瓦礫類の線量評価は,次に示す条件で MCNP コードにより評価する。

瓦礫類の線量評価は,次に示す条件で MCNP コードにより評価する。 なお,保管エリアが満杯となった際には,実際の線源形状に近い形で

2.2.2.2.2 瓦礫類一時保管エリア 瓦礫類の線量評価は,次に示す条件で MCNP コードにより評価する。

関係会社の投融資の評価の際には、会社は業績が悪化

環境影響評価の項目及び調査等の手法を選定するに当たっては、条例第 47

「普通株式対価取得請求日における時価」は、各普通株式対価取得請求日の直前の 5

第2章 環境影響評価の実施手順等 第1

項目 評価条件 最確条件 評価設定の考え方 運転員等操作時間に与える影響 評価項目パラメータに与える影響. 原子炉初期温度