#============================================================================== # ミニゲーム:こいこい風ポーカー in VX Ace By 貪藻矢射妥← #------------------------------------------------------------------------------ # こいこい風ポーカー # # SceneManager.call(Scene_F_card) # にてゲームを開始できます。 # # スーパーポーカーと違って何デッキも使用した場合、役がめちゃくちゃになるので # 今回は1デッキのみを使用します。 # # ちなみに、以下は分かりやすいんだか分かりにくいんだかわからない花札カード一覧 # # | 松| 梅| 桜| 藤| 殺| 釦| 萩| 芒| 菊| 椛| 柳| 桐| # ----+---+---+---+---+---+---+---+---+---+---+---+---+ # 20点| 0 | - | 0 | - | - | - | - | 0 | - | - | 0 | 0 | <- 光 # ----+---+---+---+---+---+---+---+---+---+---+---+---+ # 10点| - | 0 | - | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | - | <- たね # ----+---+---+---+---+---+---+---+---+---+---+---+---+ # 5点| 1 | 1 | 1 | 1 | 1 | 1 | 1 | - | 1 | 1 | 2 | - | <- 短冊 # ----+---+---+---+---+---+---+---+---+---+---+---+---+ # 1点|2,3|2,3|2,3|2,3|2,3|2,3|2,3|2,3|2,3|2,3| 3 |1-3| <- カス # ----+---+---+---+---+---+---+---+---+---+---+---+---+ # ※菖蒲を殺(あや・め)、牡丹を釦(ぼたん)と表記しています。 # # ※役の追加はちょっと面倒なので、必要あれば連絡してください。 # # ※対戦形式にするのはコンピュータ側の戦略を考えるのが面倒なので、あくまで # しつz・・・じゃなかった一人遊び用です。 # #============================================================================== # 変更履歴 # 2013:06:16 # ・所持金ベット方式と変数ベット方式を選択可能に module HANAFUDA include BM # 花札の図柄セット CARD_ROOT="fc_set" # 花札一枚のサイズ TR_WIDTH = 64 TR_HEIGHT = 100 # 花札一枚の描画倍率 TR_DRAW_RATE = 0.8 # ベット方式 FC_BET_TYPE = MINI_GAME::MG_BET_TYPE_COIN #-------------------------------------------------------------------------- # 花札セッティング #-------------------------------------------------------------------------- def set_hanafuda $card = [[], [], [], []] for i in 0...4 for j in 0...13 # 0の場合、カードの裏を設定(未使用) if j == 0 $card[i][j] = Rect.new(12 * TR_WIDTH, 0, TR_WIDTH, TR_HEIGHT) # それ以外の場合 else $card[i][j] = Rect.new((j - 1) * TR_WIDTH, i * TR_HEIGHT, TR_WIDTH, TR_HEIGHT) end end end end #-------------------------------------------------------------------------- # 重複しない乱数を造る。 # ・・・実は今まで、乱数を無限に発生させ、それを配列に格納していって、 # 次に作成する乱数が格納した配列に無い乱数だったら・・・ってのを繰り返して # 造ろうとして大挫折。 # ・・・はじめに連続する数値の配列を作成して、ランダムにシャッフルすれば # よかったのね・・・orz・・・ #-------------------------------------------------------------------------- def change_make_rnd $rand_list = [] cnt1 = 0 cnt2 = 1 for i in 0...48 $rand_list[i] = [cnt1, cnt2] cnt2 += 1 if cnt2 == 13 cnt2 = 1 cnt1 += 1 end end for j in 0...50 rnd1 = rand(48) rnd2 = rand(48) if rnd1 != rnd2 tmp = $rand_list[rnd1] $rand_list[rnd1] = $rand_list[rnd2] $rand_list[rnd2] = tmp end end end # 最大交換回数 CHANGE_MAX = 15 end module LL_SET # こいこい役設定集? # 四光 FIL_LIST = [[ 0, 1], [ 0, 3], [ 0, 8], [ 0, 12]] # 猪鹿蝶 ISC_LIST = [[ 0, 6], [ 0, 7], [ 0, 10]] # 赤短 RED_LIST = [[ 1, 1], [ 1, 2], [ 1, 3]] # 青短 BLUE_LIST = [[ 1, 6], [ 1, 9], [ 1, 10]] # 草短 WEED_LIST = [[ 1, 4], [ 1, 5], [ 1, 7]] # たね SEED_LIST = [[ 0, 2], [ 0, 4], [ 0, 5], [ 0, 6], [ 0, 7], [ 1, 8], [ 0, 9], [ 0, 10], [ 1, 11]] end class Game_System #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :fc_set # ポーカーハンド変数セット end class Window_Flower_Card < Window_Selectable include LL_SET include TITLE_BM #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 48, 384, 272 + 8 - 48) end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(cards) contents.clear @list = [] for card in cards @list.push([card[0].to_i, card[1].to_i]) end draw_fcard end include HANAFUDA #-------------------------------------------------------------------------- # ● 花札の描画 #-------------------------------------------------------------------------- def draw_fcard self.contents.clear for i in 0..4 draw_card($card[@list[i][0]][@list[i][1]], 15 + i * 80 * TR_DRAW_RATE, 30) end end #-------------------------------------------------------------------------- # ● グラフィックの描画 #-------------------------------------------------------------------------- def draw_card(card, x, y, opacity = MAX8BIT) @cw = card.width self.contents.stretch_blt(Rect.new(x, y, TR_WIDTH * TR_DRAW_RATE, TR_HEIGHT * TR_DRAW_RATE), Cache.picture(CARD_ROOT), card, opacity) end #-------------------------------------------------------------------------- # ● 花札の交換 #-------------------------------------------------------------------------- def card_change(index) if @add == nil @add = 0 end @list[index] = $rand_list[5 + @add] @add += 1 if @add > CHANGE_MAX @add = 0 end draw_fcard end #-------------------------------------------------------------------------- # ● カーソルアップデート準備 #-------------------------------------------------------------------------- def cu_update(index) @index = index @cursor_width = @cw update_cursor_rect end #-------------------------------------------------------------------------- # ● カーソルの矩形更新 #-------------------------------------------------------------------------- def update_cursor_rect # カーソル位置が 0 未満の場合 if @index < 0 cursor_rect.empty return end # カーソルの座標を計算 x = 10 + @index * 80 * TR_DRAW_RATE y = 30 - 8 # カーソルの矩形を更新 cursor_rect.set(x, y, @cursor_width * TR_DRAW_RATE + 16, 100 * TR_DRAW_RATE + 16) end #-------------------------------------------------------------------------- # ● こいこい役判定 #-------------------------------------------------------------------------- def fcard_judg @tmp_set = { "pt_20" => 0, "rain_20" => 0, "alcl" => 0, "red_sht" => 0, "blue_sht" => 0, "weed_sht" => 0, "isc" => 0, "seed" => 0, "moon" => 0, "flower" => 0, "crane" => 0, "plum" => 0 } for i in 0...@list.size if FIL_LIST.include?(@list[i]) @tmp_set["pt_20"] += 1 end if ISC_LIST.include?(@list[i]) @tmp_set["isc"] += 1 end if RED_LIST.include?(@list[i]) @tmp_set["red_sht"] += 1 end if BLUE_LIST.include?(@list[i]) @tmp_set["blue_sht"] += 1 end if WEED_LIST.include?(@list[i]) @tmp_set["weed_sht"] += 1 end if SEED_LIST.include?(@list[i]) @tmp_set["seed"] += 1 end if @list[i] == [ 0, 1] @tmp_set["crane"] += 1 end if @list[i] == [ 0, 2] @tmp_set["plum"] += 1 end if @list[i] == [ 0, 3] @tmp_set["flower"] += 1 end if @list[i] == [ 0, 8] @tmp_set["moon"] += 1 end if @list[i] == [ 0, 9] @tmp_set["alcl"] += 1 end if @list[i] == [ 0, 11] @tmp_set["rain_20"] += 1 end end $game_system.fc_set[1] = 0 $game_system.fc_set[0] = "役無し" if @tmp_set["pt_20"] == 4 if @tmp_set["rain_20"] == 1 $game_system.fc_set = ["五光", 200] else $game_system.fc_set = ["四光", 150] end end if @tmp_set["pt_20"] == 3 if @tmp_set["rain_20"] == 1 $game_system.fc_set = ["雨四光", 125] else $game_system.fc_set = ["三光", 105] end end if @tmp_set["red_sht"] + @tmp_set["blue_sht"] + @tmp_set["weed_sht"] == 5 $game_system.fc_set = ["五短", 60] end if @tmp_set["seed"] == 5 $game_system.fc_set = ["たね", 0] end # 追加、組み合わせ役 if @tmp_set["crane"] == 1 && @tmp_set["plum"] == 1 && @tmp_set["flower"] == 1 $game_system.fc_set[1] += 80 if $game_system.fc_set[0] == "役無し" $game_system.fc_set[0] = "表菅原" else $game_system.fc_set[0] += "・表菅原" end end if @tmp_set["flower"] == 1 && @tmp_set["moon"] == 1 && @tmp_set["alcl"] == 1 $game_system.fc_set[1] += 80 if $game_system.fc_set[0] == "役無し" $game_system.fc_set[0] = "月花酒" else $game_system.fc_set[0] += "・月花酒" end end if @tmp_set["isc"] == 3 $game_system.fc_set[1] += 75 if $game_system.fc_set[0] == "役無し" $game_system.fc_set[0] = "猪鹿蝶" else $game_system.fc_set[0] += "・猪鹿蝶" end end if @tmp_set["red_sht"] == 3 $game_system.fc_set[1] += 70 if $game_system.fc_set[0] == "役無し" $game_system.fc_set[0] = "赤短" else $game_system.fc_set[0] += "・赤短" end end if @tmp_set["blue_sht"] == 3 $game_system.fc_set[1] += 70 if $game_system.fc_set[0] == "役無し" $game_system.fc_set[0] = "青短" else $game_system.fc_set[0] += "・青短" end end if @tmp_set["weed_sht"] == 3 $game_system.fc_set[1] += 55 if $game_system.fc_set[0] == "役無し" $game_system.fc_set[0] = "草短" else $game_system.fc_set[0] += "・草短" end end if @tmp_set["flower"] == 1 && @tmp_set["alcl"] == 1 && @tmp_set["moon"] == 0 $game_system.fc_set[1] += 55 if $game_system.fc_set[0] == "役無し" $game_system.fc_set[0] = "花見酒" else $game_system.fc_set[0] += "・花見酒" end end if @tmp_set["moon"] == 1 && @tmp_set["alcl"] == 1 && @tmp_set["flower"] == 0 $game_system.fc_set[1] += 55 if $game_system.fc_set[0] == "役無し" $game_system.fc_set[0] = "月見酒" else $game_system.fc_set[0] += "・月見酒" end end if @tmp_set["plum"] == 1 && @tmp_set["alcl"] == 1 $game_system.fc_set[1] += 50 if $game_system.fc_set[0] == "役無し" $game_system.fc_set[0] = "梅見酒" else $game_system.fc_set[0] += "・梅見酒" end end end end class Scene_F_card < Scene_Minigame_Base include BM include HANAFUDA include MINI_GAME #-------------------------------------------------------------------------- # ● 花札初期化 #-------------------------------------------------------------------------- def fcard_init(flg = true) $game_system.fc_set = [0, 0] @start_flg = false @set_flg = false @bet_gold = 0 @index = 0 @change = 0 @sp_cards = [[0, 0], [1, 0], [2, 0], [3, 0], [0, 0]] change_make_rnd set_hanafuda if flg == true @fcard_window.refresh(@sp_cards) end end #-------------------------------------------------------------------------- # ● 花札 清算 #-------------------------------------------------------------------------- def get_gold get = Integer(@bet_gold * $game_system.fc_set[1]) if get > MAX_GOLD get = MAX_GOLD end if get > 0 get_lost_gold_coin(get, MG_GOLDCOIN_GET, FC_BET_TYPE) text = GET_GOLD[FC_BET_TYPE] + get.to_s @info_window.refresh(text) else get_lost_gold_coin(@bet_gold, MG_GOLDCOIN_LOST, FC_BET_TYPE) text = LOST_GOLD[FC_BET_TYPE] + @bet_gold.to_s @info_window.refresh(text) end if $game_system.fc_set[1] >= 200 se = JACK_POT_ME6 elsif $game_system.fc_set[1] >= 150 se = JACK_POT_ME4 elsif $game_system.fc_set[1] >= 100 se = JACK_POT_ME2 elsif $game_system.fc_set[1] >= 50 se = JACK_POT_ME1 else se = LOOSE_ME end @change_info_window.refresh($game_system.fc_set[0], nil) se.play end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_minigame_window(FC_BET_TYPE) # インフォウィンドウ その2 @change_info_window = Window_Info_Space2.new # 花札メインウィンドウ @fcard_window = Window_Flower_Card.new @fcard_window.activate set_keyhelp1 fcard_init @bet_window.refresh(@bet_gold) @title_window.refresh("こいこい風ポーカー") end #-------------------------------------------------------------------------- # ● フレーム更新(基本) #-------------------------------------------------------------------------- def update_basic super if @start_flg == true if @set_flg == false @sp_cards = [$rand_list[0], $rand_list[1], $rand_list[2], $rand_list[3], $rand_list[4]] @fcard_window.refresh(@sp_cards) @set_flg = true end end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super if @fcard_window.active update_main end if @value_window.active update_value end end #-------------------------------------------------------------------------- # ● フレーム更新 (メインウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_main # B ボタンが押された場合 if Input.trigger?(:B) # キャンセル SE を演奏 Sound.play_cancel if @start_flg == true @fcard_window.cu_update(-1) set_keyhelp1 @start_flg = false else #$game_system.windowskin_name = WINDOW_SKIN_ROOT return_scene end return end if !@start_flg # A ボタンが押された場合 if Input.trigger?(:A) # 決定 SE を演奏 Sound.play_ok # 念の為 @fcard_window.refresh(@sp_cards) value_window_activate @value_window.number = @bet_gold @fcard_window.deactivate set_keyhelp3 return end end if @start_flg # X ボタンが押された場合 if Input.trigger?(:X) # 決定 SE を演奏 Sound.play_ok @fcard_window.fcard_judg get_gold fcard_init(false) @bet_window.refresh(@bet_gold) @gold_window.refresh @fcard_window.cu_update(-1) set_keyhelp1 return end # 方向ボタンの右が押された場合 if Input.repeat?(:RIGHT) Sound.play_cursor if @index == 4 @index = 0 else @index += 1 end @fcard_window.cu_update(@index) end # 方向ボタンの左が押された場合 if Input.repeat?(:LEFT) Sound.play_cursor if @index == 0 @index = 4 else @index -= 1 end @fcard_window.cu_update(@index) end end # C ボタンが押された場合 if Input.trigger?(:C) if @bet_gold == 0 # エラー SE を演奏 ERROR_SE.play text = "まずは" + MG_ERR_BET_ZERO[FC_BET_TYPE] @info_window.refresh(text) else # 決定 SE を演奏 Sound.play_ok @info_window.refresh("") @change_info_window.refresh(@change, CHANGE_MAX) if !@start_flg @start_flg = true @fcard_window.cu_update(@index) set_keyhelp2 elsif @start_flg @change += 1 @change_info_window.refresh(@change, CHANGE_MAX) @fcard_window.card_change(@index) @fcard_window.cu_update(@index) end if @change == CHANGE_MAX @fcard_window.fcard_judg get_gold fcard_init(false) @bet_window.refresh(@bet_gold) @gold_window.refresh @fcard_window.cu_update(-1) set_keyhelp1 end return end end end #-------------------------------------------------------------------------- # ● フレーム更新 (バリューウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_value # C ボタンが押された場合 if Input.trigger?(:C) if (MG_BET_TYPE_GOLD == FC_BET_TYPE && @bet_gold > $game_party.gold) || (MG_BET_TYPE_COIN == FC_BET_TYPE && @bet_gold > $game_variables[MG_COIN_INDEX]) # エラー SE を演奏 ERROR_SE.play @info_window.refresh(MG_ERR_BET_UPPER[FC_BET_TYPE]) elsif @bet_gold == 0 # エラー SE を演奏 ERROR_SE.play @info_window.refresh(MG_ERR_BET_ZERO[FC_BET_TYPE]) else # 決定 SE を演奏 Sound.play_ok @info_window.refresh("") value_window_deactivate @fcard_window.activate @bet_window.refresh(@bet_gold) set_keyhelp1 return end end # B ボタンが押された場合 if Input.trigger?(:B) # キャンセル SE を演奏 Sound.play_cancel value_window_deactivate @fcard_window.activate set_keyhelp1 return end @bet_gold = @value_window.number end #-------------------------------------------------------------------------- # ○ キーヘルプを設定 #-------------------------------------------------------------------------- def set_keyhelp1 @bottomkeyhelp_window.clear @bottomkeyhelp_window.set_bottom_help({"B"=>"キャンセル", "A"=>"コインベット", "C"=>"ゲーム開始"}) end #-------------------------------------------------------------------------- # ○ キーヘルプを設定 2 #-------------------------------------------------------------------------- def set_keyhelp2 @bottomkeyhelp_window.clear @bottomkeyhelp_window.set_bottom_help({"←→"=>"交換選択", "C" =>"カード交換", "X" =>"勝負", "B" =>"キャンセル"}) end #-------------------------------------------------------------------------- # ○ キーヘルプを設定 3 #-------------------------------------------------------------------------- def set_keyhelp3 @bottomkeyhelp_window.clear @bottomkeyhelp_window.set_bottom_help({"矢印"=>"ベット", "C" =>"決定", "B" =>"キャンセル"}) end end |
鷹屋さん ハルヒちゃん |
トリィ ガンダムSEED |
黒桜(どこが?) Fate |
クァバーゼ クロボン |
菖蒲と生八橋 | 月光蝶 ∀ガンダム |
ボニーちゃん ブリーチ |
ガンダムX ガンダムX |
菊一文字則宗 | 鹿キョン ハルヒ |
レイン Gガンダム |
- |
- | - | - | - | - | - | - | コルニグス クロボン・鋼鉄の七人 |
- | - | セラと燕返し これゾン |
- |
- | - | - | - | - | - | - | - | - | - | - | - |
- | - | - | - | - | - | - | - | - | - | - | - |
変数 | 設定例 | 説明 |
CHANGE_MAX | 15 | カードを交換できる最大枚数 |
MAX_DIG | 7 | 入力金額最高桁数 |