ハルhal
デジタル コンテンツ

pc2

作って学ぶ
ハードとソフト

アルゴリズム
電子回路

 






このサイトはHPです
ブログではありません
要望・意見は
下記の掲示場を利用して
下さいまたブログも見て下さい

 

ロボット・DOSV掲示板兼Blog

懐かしのコンピュータ
Apple II Apple2
PC9801 PC9821

roboto

Topに戻る

ララ Lara
アナログ コンテンツ

Lara座れ
動画で学ぶ
躾と訓練
動画メニュー


工作


集団練習メニュー


しつけ 訓練コラム




最後にララについて

このサイトはHPです
ブログではありません
要望・意見は
下記の掲示場を利用して
下さいまたブログも見て下さい

Laraララの
ブログ

犬のしつけと訓練
掲示板


掲示板の利用規則

 

 

 

 

Lara伏せ
Topに戻る
松本 ワンワンクラブ
わんわんクラブ

 


Excel に付属する Visual Basic Editer
8日目
トランプゲームを作る
��  ポーカーゲーム
ゲーム説明 
簡単なプログラムを作れるように解説します
ここではミニプログラムの作成過程を体験してください。

アルゴリズムの説明

Dim card(52), keta(10), yaku(5), z, tokuten, start_flag
Private Sub CommandButton1_Click()

start_flag = 0
TextBox1 = "カードを切っています"

y = 1
Do While y < 10
Rem y<52

x = Int(Rnd() * 52 + 1)



flag = 0
For z = 1 To 10
Rem z<52

If card(z) = x Then flag = 1


Next z
If flag = 0 Then


card(y) = x
y = y + 1
End If
Loop

For y = 1 To 52
Cells(y, 1) = card(y)
Next y

For y = 1 To 52

If card(y) > 13 And card(y) <= 26 Then card(y) = card(y) + 100 - 13

If card(y) > 26 And card(y) <= 39 Then card(y) = card(y) + 200 - 26

If card(y) > 39 And card(y) <= 52 Then card(y) = card(y) + 300 - 39


Cells(y, 2) = card(y)
Next y

 

Image54.Picture = Image53.Picture
Image55.Picture = Image53.Picture
Image56.Picture = Image53.Picture
Image57.Picture = Image53.Picture
Image58.Picture = Image53.Picture

TextBox1 = "ゲームができます"
start_flag = 1



End Sub




Private Sub card_hai()


If z = 1 Then Image59.Picture = Image1.Picture
If z = 2 Then Image59.Picture = Image2.Picture
If z = 3 Then Image59.Picture = Image3.Picture
If z = 4 Then Image59.Picture = Image4.Picture
If z = 5 Then Image59.Picture = Image5.Picture
If z = 6 Then Image59.Picture = Image6.Picture
If z = 7 Then Image59.Picture = Image7.Picture
If z = 8 Then Image59.Picture = Image8.Picture
If z = 9 Then Image59.Picture = Image9.Picture
If z = 10 Then Image59.Picture = Image10.Picture
If z = 11 Then Image59.Picture = Image11.Picture
If z = 12 Then Image59.Picture = Image12.Picture
If z = 13 Then Image59.Picture = Image13.Picture
If z = 101 Then Image59.Picture = Image14.Picture
If z = 102 Then Image59.Picture = Image15.Picture
If z = 103 Then Image59.Picture = Image16.Picture
If z = 104 Then Image59.Picture = Image17.Picture
If z = 105 Then Image59.Picture = Image18.Picture
If z = 106 Then Image59.Picture = Image19.Picture
If z = 107 Then Image59.Picture = Image20.Picture
If z = 108 Then Image59.Picture = Image21.Picture
If z = 109 Then Image59.Picture = Image22.Picture
If z = 110 Then Image59.Picture = Image23.Picture
If z = 111 Then Image59.Picture = Image24.Picture
If z = 112 Then Image59.Picture = Image25.Picture
If z = 113 Then Image59.Picture = Image26.Picture
If z = 201 Then Image59.Picture = Image27.Picture
If z = 202 Then Image59.Picture = Image28.Picture
If z = 203 Then Image59.Picture = Image29.Picture
If z = 204 Then Image59.Picture = Image30.Picture
If z = 205 Then Image59.Picture = Image31.Picture
If z = 206 Then Image59.Picture = Image32.Picture
If z = 207 Then Image59.Picture = Image33.Picture
If z = 208 Then Image59.Picture = Image34.Picture
If z = 209 Then Image59.Picture = Image35.Picture
If z = 210 Then Image59.Picture = Image36.Picture
If z = 211 Then Image59.Picture = Image37.Picture
If z = 212 Then Image59.Picture = Image38.Picture
If z = 213 Then Image59.Picture = Image39.Picture
If z = 301 Then Image59.Picture = Image40.Picture
If z = 302 Then Image59.Picture = Image41.Picture
If z = 303 Then Image59.Picture = Image42.Picture
If z = 304 Then Image59.Picture = Image43.Picture
If z = 305 Then Image59.Picture = Image44.Picture
If z = 306 Then Image59.Picture = Image45.Picture
If z = 307 Then Image59.Picture = Image46.Picture
If z = 308 Then Image59.Picture = Image47.Picture
If z = 309 Then Image59.Picture = Image48.Picture
If z = 310 Then Image59.Picture = Image49.Picture
If z = 311 Then Image59.Picture = Image50.Picture
If z = 312 Then Image59.Picture = Image51.Picture
If z = 313 Then Image59.Picture = Image52.Picture

End Sub

Private Sub disp()
z = card(1)
Call card_hai


Image54.Picture = Image59.Picture
z = card(2)

Call card_hai


Image55.Picture = Image59.Picture

z = card(3)
Call card_hai


Image56.Picture = Image59.Picture

z = card(4)
Call card_hai


Image57.Picture = Image59.Picture

z = card(5)
Call card_hai


Image58.Picture = Image59.Picture

End Sub


Private Sub CommandButton2_Click()

If start_flag = 1 Then



TextBox1 = ""

Call disp
start_flag = 2

End If
End Sub


Private Sub CommandButton3_Click()


If start_flag = 2 Then


TextBox1 = "ブタです"



x = 6
If CheckBox1 = False Then

card(1) = card(x)

x = x + 1
End If
If CheckBox2 = False Then

card(2) = card(x)

x = x + 1
End If
If CheckBox3 = False Then


card(3) = card(x)

x = x + 1
End If
If CheckBox4 = False Then
card(4) = card(x)


x = x + 1
End If

If CheckBox5 = False Then

card(5) = card(x)

End If






Call disp

Rem 役解析

Rem フラッシュ
clab = 0
daiya = 0
harto = 0
supedo = 0
flash = 0
For x = 1 To 5
If card(x) > 0 And card(x) <= 13 Then clab = clab + 1



If card(x) > 100 And card(x) <= 113 Then daiya = daiya + 1

If card(x) > 200 And card(x) <= 213 Then harto = harto + 1

If card(x) > 300 And card(x) <= 313 Then supedo = supedo + 1

Next x
If clab = 5 Then


TextBox1 = "クラブのフラッシュ"

flash = 1
tokuten = tokuten + 509

End If
If daiya = 5 Then



TextBox1 = "ダイヤのフラッシュ"

flash = 1


tokuten = tokuten + 509
End If
If hart = 5 Then


TextBox1 = "ハートのフラッシュ"

flash = 1


tokuten = tokuten + 509

End If
If supedo = 5 Then


TextBox1 = "スペードのフラッシュ"

flash = 1


tokuten = tokuten + 509

End If

Rem ペアー
For x = 6 To 10
keta(x) = 0
Next x

For x = 1 To 5
y = card(x)


Cells(x, 3) = y


If card(x) > 100 Then y = card(x) - 100

If card(x) > 200 Then y = card(x) - 200

If card(x) > 300 Then y = card(x) - 300

Cells(x, 4) = y
keta(x) = y

Next x

For x = 1 To 5
yaku(x) = 0
For w = 1 To 5
If keta(x) = keta(w) Then yaku(x) = yaku(x) + 1


Next w
Cells(x, 5) = yaku(x)
Next x

 

twopai = 0
threepai = 0

For x = 1 To 5
If yaku(x) = 2 Then twopai = twopai + 1


If yaku(x) = 3 Then threepai = 1


If yaku(x) = 4 Then
TextBox1 = "フォーカード"

tokuten = tokuten + 4165

End If
Next x
If twopai = 2 Then
TextBox1 = "ワンペーア"
tokuten = tokuten + 3
End If
If twopai = 4 Then
TextBox1 = "ツーペーア"
tokuten = tokuten + 21
End If
If threepai = 1 Then
TextBox1 = "スリーカード"
tokuten = tokuten + 47
End If
If twopai = 2 And threepai = 1 Then

TextBox1 = "フルハウス"
tokuten = tokuten + 694
End If


Rem ストレート

For x = 1 To 5
For y = 1 To 5
If keta(x) < keta(y) Then
oitoku = keta(x)
keta(x) = keta(y)
keta(y) = oitoku

End If
Next y
Next x

For x = 1 To 5
Cells(x, 6) = keta(x)
Next x

If keta(1) = 1 Then
For x = 1 To 5
If keta(x) = x Then
keta(x + 5) = keta(x) + 13
Cells(x + 5, 7) = keta(x) + 13
End If
Next x
End If

flag = 0
For x = 1 To 9
If keta(x) = keta(x + 1) - 1 Then flag = flag + 1
Next x




If flag >= 4 Then

TextBox1 = " ストレート"
tokuten = tokuten + 255
If flash = 1 Then
tokuten = tokuten + 72193 - 255
TextBox1 = " ストレート"

End if
End If

If flash = 1 And flag >= 4 And keta(1) = 1 And keta(5) = 13 Then
TextBox1 = "ローヤルストレートフラッシュ"
tokuten = tokuten + 649740
End If
TextBox2 = tokuten
start_flag = 3

End If

End Sub

Private Sub CommandButton4_Click()
card(1) = 1
card(2) = 11
card(3) = 12
card(4) = 13

card(5) = 2

End Sub

配列宣言

コマンドボタン1を押した場合のプログラム【ゲーム開始】
カード配布の秩序を制御する変数0
テキストボックス1に表示
52枚をだぶらないように配布
y = 1
y < 52に成るまでLOOPの間を繰り返す 本来は52であるが
トラブルを起こすため10とした
Rnd() 0から0.999の乱数
Rnd() * 52 0から51.99の乱数
Int(Rnd() * 52 + 1)
1から52までの乱数
旗変数を0とする
zを1から52まで繰り返す
トラブルを起こすため10とした

card(z)の中に発生させた乱数と同じ数が含まれていたら旗を1とする
52回繰り返す【今は10】
旗が0の場合、すなわち発生した乱数と配列52card(z)の中に保存されている数と異なっている場合
配列card(z)に乱数を保存する
loop数yを1増加させる
If flag = 0 Thenの終了
Do While y < 52の終了

結果をセルA列に表示
1から52まで繰り返す
セルA列にカードを入れる
繰り返し終了


1から52のカードをわかりやすく
1−13 101−113 201−213 301−313に変更
13以下はクラブ
card(y) > 13の場合card(y)に100を足し13を引く たとえば 14の場合101となる。ダイヤとする

card(y) > 26の場合card(y)に200を足し26を引く たとえば 27の場合202となる。ハートとする
card(y) > 39の場合card(y)に300を足し39を引く たとえば 41の場合303となる。スペードとする
セルB列に表示し確認する
52の繰り返し終了
テキストボックス1を消す

5枚のトランプをイメージ53裏のカードとする



テキストボックス1に表示
ここが通過したトランプを切ったことになるその準備が完了したのでstart_flag = 1とした

コマンドボタン1を押した場合プログラム
終了


カード補助表示ルーチン
5枚のカードをうまく表示するため一旦、イメージ59に保存する

z=1の時、Image59.Pictureにクラブの1を置く
z=2の時、Image59.Pictureにクラブの2を置く










z=13の時、Image59.Pictureにクラブのキングを置く
z=101の時、Image59.Pictureにダイヤの1を置く






















z=113の時、Image59.Pictureにダイヤのキングを置く
z=201の時、Image59.Pictureにハートの1を置く




















z=212の時、Image59.Pictureにハートのクイーンを置く







z=303の時、Image59.Pictureにスペードの3を置く













z=311の時、Image59.Pictureにスペードのジャックを置く





トランプ補助表示ルーチン終わり

カード表示ルーチン
5枚のカードを表示する
zに配列の1番目を入れ
カード補助表示ルーチンを呼ぶ
カード補助表示ルーチンで設定された
Image59.Pictureを右上1枚目のカードとして表示する
zに配列の2番目を入れ
カード補助表示ルーチンを呼ぶ

カード補助表示ルーチンで設定された
Image59.Pictureを右上2枚目のカードとして表示する
zに配列の3番目を入れ
カード補助表示ルーチンを呼ぶ


カード補助表示ルーチンで設定された
Image59.Pictureを右上3枚目のカードとして表示する
zに配列の4番目を入れ
カード補助表示ルーチンを呼ぶ

カード補助表示ルーチンで設定された
Image59.Pictureを右上4枚目のカードとして表示する
zに配列の5番目を入れ
カード補助表示ルーチンを呼ぶ

カード補助表示ルーチンで設定された
Image59.Pictureを最後の5枚目のカードとして表示する
カード表示ルーチン終了

コマンドボタン2を押した場合のプログラム【カード配布】
start_flag = 0のときは実行されないすなわちまだカードが配布されていない

テキストボックス1の表示を消す

カード表示ルーチンを呼ぶ
start_flag = 2としてトランプヲ表示したことを告げる
コマンドボタン2を押した場合の
プログラム【カード配布】終了


コマンドボタン3を押した場合のプログラム【カード交換】

トランプが表示されたならばstart_flag = 2になっているので
次を実行
テキストボックス1にブダを入れておく【下記の実行速度が速いため表示が見えない】役がなかった場合
ブタが最後に見える

x = 6
チェックボク1にチェックが付いていない場合[カード交換となる]
card(6) 配列6番目を1枚目とする

x = 7
If CheckBox1 = False Then終わり
チェックボク2にチェックが付いていない場合[カード交換となる]
card(7) 配列7番目を2枚目とする
x = 8
If CheckBox2 = False Then終わり
チェックボク3にチェックが付いていない場合[カード交換となる]
card(8) 配列8番目を3枚目とする
x = 9
If CheckBox3 = False Then終わり
チェックボク4にチェックが付いていない場合[カード交換となる]
card(9) 配列9番目を4枚目とする

x = 10
If CheckBox4 = False Then終わり
チェックボク4にチェックが付いていない場合[カード交換となる]
card(10) 配列10番目を5枚目とする
If CheckBox4 = False Then終わり

x = x + 1とした理由は 2回以上カードを交換できるように臨機応変にした。今回は1回だけ交換なので特に意味がなくx=9と書いても同じ
カード表示ルーチンを呼び交換したカードを表示する。
Rem 実行しないコメント
役解析
フラッシュの処理
色が同じか判断する
変数クラブ、ダイヤ、ハート、スペードを0とする

変数フラッシュを0とする
xを1から5まで繰り返す
card(x)が0より大きく13以下の場合
クラブなので変数クラブを1増加する。
card(x)が100より大きく113以下の場合ダイヤなので変数ダイヤを1増加する。
card(x)が200より大きく213以下の場合ハートなので変数ハートを1増加する。
card(x)が300より大きく313以下の場合クラブなので変数クラブを1増加する。
xを1から5まで繰り返し終了
もし変数クラブが5になっている場合5枚ともクラブとの判断でフラッシュとなる
テキストボックス1にクラブのフラッシュと表示する
変数フラッシュを1とする。後でストレートとこの変数を比較しストレートフラッシュか判断するため
フラッシュの確率は509のため得点に509を増加させる。

If clab = 5 Thenの終了
もし変数ダイヤが5になっている場合5枚ともダイヤとの判断でフラッシュとなる
テキストボックス1にダイヤのフラッシュと表示する
変数フラッシュを1とする。後でストレートとこの変数を比較しストレートフラッシュか判断するため
フラッシュの確率は509のため得点に509を増加させる。
If daiya = 5 Thenの終了
もし変数ハートが5になっている場合5枚ともハートとの判断でフラッシュとなる
テキストボックス1にハートのフラッシュと表示する
変数フラッシュを1とする。後でストレートとこの変数を比較しストレートフラッシュか判断するため
フラッシュの確率は509のため得点に509を増加させる。
If hart = 5 Then の終了
もし変数スペードが5になっている場合5枚ともクラブとの判断でフラッシュとなる
テキストボックス1にスペードのフラッシュと表示する
変数フラッシュを1とする。後でストレートとこの変数を比較しストレートフラッシュか判断するため
フラッシュの確率は509のため得点に509を増加させる。
If supedo = 5 Thenの終了

コメント  ペアー
keta(x)のxは1から5までは毎回代入されるが6から10は前のものが残るので0に初期化する

5枚のカードを順次読む
xが1から5まで繰り返す
yに順次5枚のカードを入れていく
確認すすためセルC列に表示する
ペアーの確認をするため
下一桁にする

100より大きい場合100を引く
200より大きい場合200を引く
300より大きい場合300を引く
確認すすためセルD列に表示する
この5枚を配列keta(x)に代入し
解析に使う

 

For x = 1 To 5繰り返しの終了
解析開始
同じカードがないか判断する
xが1から5まで繰り返す
5個の配列yaku(x)を0にする
wが1から5まで繰り返す
同じカードが有ればyaku(x)を1増加する
※ア欄外に解説あり
For w = 1 To 5繰り返しの終了
確認すすためセルE列に表示する
For x = 1 To 5繰り返しの終了

ツーペアー変数を0に
スリカード変数を0に

For x = 1 To 5繰り返し
yaku(x)が2の場合同じカードが2枚有ったのでツーペアー変数を1増加
yaku(x)が3の場合同じカードが3枚有ったのでスリカード変数を1にして通知
yaku(x)が4の場合同じカードが4枚有ったのでテキストボックス1にフォーカードを表示
フォーカードなので得点に4165点を足す
If yaku(x) = 4 Then終了
For x = 1 To 5繰り返し終了
ツーペアー変数が2の場合
テキストボックス1にワンペーアを表示
ワンペーアなので得点に3点を足す
If twopai = 2 Thenの終了
ツーペアー変数が4の場合
テキストボックス1にツーペーアを表示
ツーペーアなので得点に21点を足す
If twopai =4 Thenの終了
スリカード変数が1の場合
テキストボックス1にスリーカードを表示
スリーカードなので得点に47点を足す
If threepai = 1 Thenの終了
ツーペアー変数が2でかつスリカード変数が1の場合
テキストボックス1にフルハウスを表示
フルハウスなので得点に694点を足す
If twopai = 2 And threepai = 1 Then終了

コメント ストレート
小さい順に並び替えをする
For x = 1 To 5繰り返し
For y = 1 To 5繰り返し
小さいか比較
オイトク変数に小さいカードを入れる
大き方に小さいものを代入
小さい方にオイトク変数を代入
比較終了
For y = 1 To 5繰り返し
For x = 1 To 5繰り返し

結果をセルで確認
For x = 1 To 5繰り返し
セルF列に並び替えたものを表示
For x = 1 To 5繰り返し終了

ストレート1がある場合の処理
最初に1がある場合
セル6行目に14として収納
繰り返すことにより
次の2はセル7行目に15として収納




旗変数を0とする

1がある場合5枚ではなく追加された4枚も見るため9回繰り返す
今のカードと次のカードが連番になっている場合旗変数を1増加する
繰り返し終了
旗変数が4以上の場合はストレートとなる

テキストボックス1に表示する
得点を255点増加させる
役としてすでにフラッシュがある場合
得点に72193−255を増加させる
ストレートフラッシュ処理終了


ストレートフラッシュで最初1になっていて5番目が13の時
テキストボックス1にローヤルストレートフラッシュと表示する
得点に649740点を増加する
得点をテキストボックス2に表示
ここが通過したらstart_flag = 3にして証拠を残す
ローヤルストレートフラッシュ終了
コマンドボタン3の終了
カード交換および役の解析終了
確認ルーチン 好きな数を入れる



4枚目のカードをクラブの12にしてみる
5枚目のカードをスペードのキングにしてみる
終




































































































































































































 

 

Formのみ ダウンロード

Ecxel 2007サンプル

 

 
動画が旨くご覧いただけない場合は最新のFlash Playerをインストールしてください
web ブラウザがインターネットエクスプローラ6(IE6)以下の場合メニューが崩れてしまうことがあります。
インターネットエクスプローラ7、Sleipnir、Mozilla Firefoxをご使用ください。