トランプゲームが作りたくていろいろ悩んだすえ、これを作りました。 #本当は大富豪とか作りたいんですけど、 やっぱり思考ルーチンの事を考えると難しいかなと・・(^_^;)
スプリットの処理が複雑で、思考錯誤しましたが、 まだ時間がかかりそうなのでとりあえずver.0.5で公開としました。 がんばってスプリットを実現してVer1.0にしたいと思います。
ご意見・ご感想等ありましたらお願いします。
{---プログラム掲示板投稿フォーム--- 【ソフト名】ブラックジャック (バージョン 0.50) 【作 成 者】やましー (連絡先:yamasy@nifty.com) 【種 別】フリーソフトウェア 【ひまわりのバージョン】ver.1.49 【転 載】可(転載条件:作者にメールで連絡すると作者がこっそり小躍りします) 【改変運用】可(こんなのでよければ) 【ひまわり本体への梱包】可 【実行時に利用作成するファイル】有(トランプマーク作成.hmw必須) 【コメント】一般的なブラックジャックです。 これと同じフォルダに「トランプマーク作成.hmw」(必須)を置いてください。 別のフォルダに置く場合は、54行目のパスを書き換えてください。 ルールは説明を省きますので、皆さんで調べてください。 ちなみに下記のサイトが参考になると思います。 http://www.lvtaizen.com/casino/index.html ---投稿フォームここまで---}
'============================================================================== ' 初期設定 '============================================================================== 『カード非表示』を、『?の、?から、?まで』で、関数定義。 『メインボタンオフ』を、『?から、?まで』で、関数定義。
母艦の、サイズは、(0,0,500,350)。 母艦の、タイトルは、「ブラックジャック」。 母艦を、中央へ移動。 32768で、画面クリア。
'■盤面飾り ペン色=白色。 (0,105)から、(500,105)へ、線。 (0,150)から、(500,150)へ、線。 センタリング。 文字色=白色。 文字サイズ=17。 (0,115)へ、移動して、「B L A C K J A C K」を、表示。 文字色=黒色。 文字サイズ=10。 センタリング解除。
'■メッセージ欄 ペン色=黒色。 塗り色=黒色。 (0,330)から、(500,350)へ、四角形。 文字サイズ=10。 文字色=白色。 (5,333)に、メッセージ欄を、ラベルとして、作成。 その、幅は、490。その、高さは、12。 その、テキストは、「準備中です。しばらくお待ちください」。 0.01秒、待つ。
'■トランプマーク読み込み 母艦のパス&『トランプマーク作成.hmw』を、取り込む。
'■コイン残り、BET数表示 ペン色=黒色。 塗り色=黒色。 文字色=黒色。 (117,297)から、(245,320)へ、四角形。 (257,297)から、(385,320)へ、四角形。 塗り色=白色。 (115,295)から、(243,317)へ、四角形。 (255,295)から、(383,317)へ、四角形。 (117,298)へ、移動して、「コイン残 :」を、表示。 (257,298)へ、移動して、「BET数 :」を、表示。 コイン=100。 (195,298)に、コイン欄を、ラベルとして、作成。 その、幅は、45。その、高さは、19。 その、テキストは、コイン。 (335,298)に、BET欄を、ラベルとして、作成。 その、幅は、45。その、高さは、19。 その、テキストは、「0」。
'■ダミーカード作成 (0,0)に、ダミーカードを、イメージとして、作成。 その、幅は、80。その、高さは、100。 その、可視は、オフ。
'■基本カード作成 カウンタを、1から、2まで、繰り返す( 「(20,10)に、親カード{カウンタ}を、イメージとして、作成。」を、ひまわりする。 その、幅は、80。その、高さは、100。 その、可視は、オフ。 もし、カウンタ=2ならば、その、位置は、(80,10)。 もし、カウンタ=1 ならば( '■カード裏面作成 (20,10)に、カード裏面を、イメージとして、作成。 その、幅は、80。その、高さは、100。 その、可視は、オフ。 カード裏面の、(0,0)から、(80,100)へ、四角形描画。 ペン太さ=2。 3回( もし、回数=1ならば、ペン色=赤色。 もし、回数=2ならば、ペン色=オレンジ色。 もし、回数=3ならば、ペン色=肌色。 i=5*回数。 5回( カード裏面の、(2,i)から、(77,i)へ、線描画。 カード裏面の、(i,2)から、(i,97)へ、線描画。 i=i+20。 )。 )。 )。 「(20,145)に、自カード{カウンタ}を、イメージとして、作成。」を、ひまわりする。 その、幅は、80。その、高さは、100。 その、可視は、オフ。 もし、カウンタ=2ならば、その、位置は、(80,145)。 )。 親カード数=2。 自カード数=2。
'■BETボタン配置 (50,260)に、BETパネルを、パネルとして、作成。 その、幅は、400。その、高さは、30。 その、可視は、オフ。 「1BET\n10BET\n100BET\nOK」を、反復( 「(100*{回数}-100,0)に、{それ}ボタンを、ボタンとして、作成。」を、ひまわりする。 その、幅は、100。その、高さは、30。 その、イベントは、イベント★BET。 「{それ}ボタンを、BETパネルへ、乗せる。」を、ひまわりする。 )。 OKボタンの、有効は、オフ。
'■メインボタン配置 (100,250)に、メインボタンパネルを、パネルとして、作成。 その、幅は、300。その、高さは、40。 その、可視は、オフ。 「Hit\nDoubleDown\nStand\nInsurance\nEvenMoney」を、反復( 「(100*{回数}-100,0)に、メインボタン{回数}を、ボタンとして、作成。」を、ひまわりする。 もし、回数<4 ならば( その、幅は、100。その、高さは、20。 )違えば( その、位置は、((回数-4)*150,20)。 その、幅は、150。その、高さは、20。 その、有効は、オフ。 )。 「その、テキストは、{それ}。 その、イベントは、イベント★{それ}。 メインボタン{回数}を、メインボタンパネルへ、乗せる。」を、ひまわりする。 )。
'■終了ボタン配置 (150,260)に、終了ボタンパネルを、パネルとして、作成。 その、幅は、200。その、高さは、30。 その、可視は、オフ。 「もう一回\n終了」を、反復( 「(100*{回数}-100,0)に、{それ}ボタンを、ボタンとして、作成。」を、ひまわりする。 その、幅は、100。その、高さは、30。 「{それ}ボタンを、終了ボタンパネルへ、乗せる。」を、ひまわりする。 )。 もう一回ボタンの、イベントは、イベント★もう一回。 終了ボタンの、イベントは、終わり。
サブ★トランプ配列作成を、呼ぶ。
'============================================================================== ' メイン '============================================================================== *スタート '■変数初期化 親札=「」。 自札=「」。 '「ブラックジャック 計 計2 エース 枚数」 親ステータス=「いいえ\n0\n22\n0\n0」。 '「ブラックジャック 計 計2 エース 枚数 DOUBLEDOWN INSURANCE EVENMONEY」 自ステータス=「いいえ\n0\n22\n0\n0\nいいえ\nいいえ\nいいえ」。
'■BETボタン表示 BETパネルの、可視は、オン。 文字色=白色。 メッセージ欄の、テキストは、「BETして、[OK]を押してください。」。 文字色=黒色。 待機。
*初期配置 '■メインボタン表示 メインボタンパネルの、可視は、オン。 メインボタン2の、有効は、オン。 4から、5まで、メインボタンオフ。
'■トランプ配布 カード裏面の、可視は、オン。 2回( 親自=「親」。 サブ★カード配置を、呼ぶ。 親自=「自」。 サブ★カード配置を、呼ぶ。 )。
'■INSURANCEチェック もし、親札#1#2=1ならば、メインボタン4の、有効は、オン。 '■EVEN MONEYチェック 親自=「自」。 サブ★札計算を、呼ぶ。 もし、(自ステータス#0=はい)かつ(親札#1#2=1)ならば、メインボタン5の、有効は、オン。
*途中経過表示 サブ★札計算を、呼ぶ。 文字色=白色。 もし、自ステータス#1<=21 ならば( もし、自ステータス#2<=21 ならば、メッセージ欄の、テキストは、「現在のカード合計は {自ステータス#1} または {自ステータス#2} です。」。 違えば、メッセージ欄の、テキストは、「現在のカード合計は {自ステータス#1} です。」。 )違えば、イベント★Standへ、飛ぶ。 文字色=黒色。 待機。
*結果処理 メインボタンパネルの、可視は、オフ。 カード裏面の、可視は、オフ。 もし、(自ステータス#7=はい)かつ(親ステータス#0=はい)かつ(自ステータス#0=はい) ならば、EvenMoney成功へ、飛ぶ。 もし、(親ステータス#0=はい)かつ(自ステータス#0=はい)かつ(自ステータス#4=2) ならば( メッセージ=「両方ブラックジャック」。 引き分けへ、飛ぶ。 )。 もし、親ステータス#0=はい ならば( メッセージ=「ディーラーがブラックジャック」。 もし、自ステータス#6=はい ならば、Insurance成功へ、飛ぶ。 負けへ、飛ぶ。 )。 もし、(自ステータス#0=はい)かつ(自ステータス#4=2) ならば( 報酬=CEIL(BET数*1.5)。 メッセージ=「ブラックジャック」。 勝ちへ、飛ぶ。 )。 メッセージ=「あなた={自ステータス#1}、ディーラー={親ステータス#1} 」。 もし、自ステータス#1>=22ならば、負けへ、飛ぶ。 もし、(親ステータス#1>自ステータス#1)かつ(親ステータス#1<=21)ならば、負けへ、飛ぶ。 もし、親ステータス#1=自ステータス#1ならば、引き分けへ、飛ぶ。
'通常の勝ち 報酬=BET数。 もし、自ステータス#5=はい ならば、報酬=CEIL(BET数*1.5)。 勝ちへ、飛ぶ。
*EvenMoney成功 メッセージ欄の、テキストは、「EvenMoneyで引き分けです。BETしたコインは戻ってきます。」 コイン=コイン+BET数+保険料。 コイン欄の、テキストは、コイン。 ゲーム終了へ、飛ぶ。 *Insurance成功 メッセージ欄の、テキストは、「{メッセージ}でした。Insuranceをしたのでコインは減りません。」 コイン=コイン+BET数+保険料。 コイン欄の、テキストは、コイン。 ゲーム終了へ、飛ぶ。 *引き分け メッセージ欄の、テキストは、「{メッセージ}で引き分けです。」 コイン=コイン+BET数。 コイン欄の、テキストは、コイン。 ゲーム終了へ、飛ぶ。 *負け メッセージ欄の、テキストは、「{メッセージ}であなたの負けです。」 ゲーム終了へ、飛ぶ。 *勝ち メッセージ欄の、テキストは、「{メッセージ}であなたの勝ちです。コイン{報酬}枚を獲得しました。」 コイン=コイン+BET数+報酬。 コイン欄の、テキストは、コイン。 ゲーム終了へ、飛ぶ。
*ゲーム終了 終了ボタンパネルの、可視は、オン。 待機。
'============================================================================== ' イベント '============================================================================== *イベント★BET イベントオブジェクトの、テキストを、それに、得る。 もし、それ=「OK」 ならば( BETパネルの、可視は、オフ。 OKボタンの、有効は、オフ。 初期配置へ、飛ぶ。 )。 もし、コイン-それ<0 ならば( 「コインが足りません...(T-T)」と、言う。 待機。 )。 コイン=コイン-それ。 BET数=BET数+それ。 コイン欄の、テキストは、コイン。 BET欄の、テキストは、BET数。 OKボタンの、有効は、オン。 待機。
*イベント★Hit メインボタン2の、有効は、オフ。 4から、5まで、メインボタンオフ。 親自=「自」。 サブ★カード配置を、呼ぶ。 途中経過表示へ、飛ぶ。
*イベント★DoubleDown 自ステータス#5=はい。 親自=「自」。 サブ★カード配置を、呼ぶ。 サブ★札計算を、呼ぶ。
*イベント★Stand もし、(自ステータス#1<自ステータス#2)かつ(自ステータス#2<=21) ならば、自ステータス#1=自ステータス#2。 メインボタンパネルの、可視は、オフ。 カード裏面の、可視は、オフ。 0.5秒、待つ。 *親札配置 親自=「親」。 サブ★札計算を、呼ぶ。 もし、(親ステータス#1<親ステータス#2)かつ(親ステータス#2<=21) ならば、親ステータス#1=親ステータス#2。 もし、親ステータス#1<=16 ならば、サブ★カード配置を、呼ぶ。 違えば、結果処理へ、飛ぶ。 0.5秒、待つ。 親札配置へ、飛ぶ。
*イベント★Insurance 自ステータス#6=はい。 保険料=CEIL(BET数/2)。 コイン=コイン-保険料。 コイン欄の、テキストは、コイン。 親自=「親」。 サブ★札計算を、呼ぶ。 もし、親ステータス#0=はい ならば、結果処理へ、飛ぶ。 4から、5まで、メインボタンオフ。 「Insuranceの結果、\nディーラーはブラックジャックではありませんでした。\nこのままゲームを続行します。」と、言う。 待機。
*イベント★EvenMoney 自ステータス#7=はい。 保険料=CEIL(BET数/2)。 コイン=コイン-保険料。 コイン欄の、テキストは、コイン。 親自=「親」。 サブ★札計算を、呼ぶ。 結果処理へ、飛ぶ。
*イベント★もう一回 もし、コイン=0 ならば( 「コインがなくなってしまいました...\nコイン100枚からやりなおしますか?」と、二択。 もし、それ=はい ならば、コイン=100。 違えば、おわり。 )。 もし、要素数(トランプの)<=15 ならば( 「トランプの残りが15枚以下になったので、\n新しいトランプを使います。」と、言う。 サブ★トランプ配列作成を、呼ぶ。 )。 親の、1から、親ステータス#4まで、カード非表示。 自の、1から、自ステータス#4まで、カード非表示。 終了ボタンパネルの、可視は、オフ。 コイン欄の、テキストは、コイン。 BET数=0。 BET欄の、テキストは、「0」。 スタートへ、飛ぶ。
'============================================================================== ' サブルーチン '============================================================================== *サブ★トランプ配列作成 カウンタ=0。 「H\nD\nS\nC」を、反復( iを、1から、13まで、繰り返す( トランプ#0#カウンタ=それ。 トランプ#1#カウンタ=i。 カウンタ=カウンタ+1。 )。 )。 トランプを、配列シャッフル。 トランプ=それ。 戻る。
*サブ★カード配置 「{親自}ステータス#4={親自}ステータス#4+1。 枚数={親自}ステータス#4。」を、ひまわりする。 カード=トランプ#0。 トランプ=行削除(トランプの、0行目を)。 「{親自}札#{枚数}=カード。」を、ひまわりする。 「i={親自}カード数。」を、ひまわりする。 もし、i<枚数 ならば( 「{親自}カード{枚数}を、イメージとして、作成。」を、ひまわりする。 「{親自}」で、条件分岐。 「親」の時(その、サイズは、(枚数*60-40,10,枚数*60+40,110)。)。 「自」の時(その、サイズは、(枚数*60-40,145,枚数*60+40,245)。)。 「{親自}カード数={親自}カード数+1。」を、ひまわりする。 )。 サブ★カード描画を、呼ぶ。 「{親自}ステータス#3={親自}ステータス#3+エース。」を、ひまわりする。 戻る。
*サブ★カード描画 ペン色=黒色。 塗り色=白色。 ダミーカードの、(0,0)から、(80,100)へ、四角形描画。 「{カード#0#0}」で、条件分岐。 「H」の時(ハートイメージを、ダミーカードの、(20,50,60,90)に、イメージコピー。)。 「D」の時(ダイアイメージを、ダミーカードの、(20,50,60,90)に、イメージコピー。)。 「S」の時(スペードイメージを、ダミーカードの、(20,50,60,90)に、イメージコピー。)。 「C」の時(クローバイメージを、ダミーカードの、(20,50,60,90)に、イメージコピー。)。 文字色=黒色。 文字サイズ=30。 エース=0。 もし、(カード#1#0=1)または(カード#1#0>=10) ならば( 「{カード#1#0}」で、条件分岐。 1の時( エース=1。 カード#1#0=「A」。 )。 11の時(カード#1#0=「J」。)。 12の時(カード#1#0=「Q」。)。 13の時(カード#1#0=「K」。)。 ダミーカードの、(19,10)へ、「{カード#1#0}」と、文字描画。 )違えば、ダミーカードの、(29,10)へ、「{カード#1#0}」と、文字描画。 文字サイズ=10。 「ダミーカードを、{親自}カード{枚数}の、(0,0)に、イメージコピー。 {親自}カード{枚数}の、可視は、オン。」を、ひまわりする。 戻る。
*サブ★札計算 「{親自}札の、1列目の、表合計。 {親自}ステータス#1=それ。 カウンタを、1から、{親自}ステータス#4まで、繰り返す( もし、{親自}札#1#カウンタ>10 ならば、{親自}ステータス#1={親自}ステータス#1-({親自}札#1#カウンタ-10)。 )。 もし、({親自}ステータス#1=11)かつ({親自}ステータス#3=1)かつ({親自}ステータス#4=2) ならば、{親自}ステータス#0=はい。 もし、{親自}ステータス#3>=1 ならば、{親自}ステータス#2={親自}ステータス#1+10。」を、ひまわりする。 戻る。
'============================================================================== ' 関数 '============================================================================== *カード非表示 引数取得。 カウンタを、それ#1から、それ#2まで、繰り返す( 「{それ#0}カード{カウンタ}の、可視は、オフ。」を、ひまわりする。 )。 戻る。
*メインボタンオフ 引数取得。 カウンタを、それ#0から、それ#1まで、繰り返す( 「メインボタン{カウンタ}の、有効は、オフ。」を、ひまわりする。 )。 戻る。
|