ミニゲーム:スーパーポーカー



いろいろとオカしなポーカーハンドの多い噂のスーパーポーカースクリプトです。

$scene = Scene_S_porkar.new
にてゲーム開始。

※以下のモジュール/スクリプトが別途導入必要です。
 縁取り文字
 ミニゲーム用共通処理モジュール
 貪藻矢射妥←ダイヤモンドベースモジュール
 ボトムキーヘルプ
 VXA風SE
 Window VXA

変更点
2008:11:12
・共通部分をモジュール化
・判定がおかしかったバグを修正(ところで =~ って何に使うの?)

2008:11:16
・モジュール変更に伴う修正

2008:11:23
・モジュール変更に伴う修正2

2009:01:19
・連続して遊ぶと正常に判定されないバグを修正

2010:03:13
・ソート部分をバブルソートからソート関数に変更

2010:03:20
・トランプの描画部分を修正

2011:06:04
・画像を統一
・判定直後カードの表示が消えて最終的にどんなカードだったのか分からないバグを修正

2012:01:21
・エラーメッセージを共通処理モジュールへ移動

2012:03:03
・一部の共通モジュールのクラス化

2013:06:01
・カードの配列をひとまとめに
・一部の共通モジュールのクラス化 part2
・オーディオファイルの設定を変更

2015:10:01
・VXA風Sound対応

2020:09:03
・Window VXA対応

#==============================================================================
# ミニゲーム:スーパーポーカー By 貪藻矢射妥←
#------------------------------------------------------------------------------
# 貪藻矢射妥←ルール満載のポーカーです。
# 
# $scene = Scene_S_porkar.new
# にてゲームを開始できます。
# 
# ポーカーハンドはカスタマイズポイントで増やすことができます。
# 
# EX)
# PH_XXX = [1, ← ポーカーハンドの獲得金額の倍率
#           [[DC, 14], [DC, 14], [DC, 14], [DC, 14], [DC, 14]],
#           ...                                               ,
#           ...                                                ]
# 
# [スート, 数字]の配列を5つ、そのポーカーハンドのパターン数分配列でもつ
# というなんともややこしいことになっております。
# 
# スートには数字かDCかFSを設定、数字には数時かDC、N1〜4、B1〜2を設定します。
# それぞれの意味は・・・
# DC:何でもいい場合の設定
# FS:スートが同じ場合の設定(フラッシュの処理)
# Nn:n番目のカードから数字を全て固定したい場合の設定
# Bn:前のカードの数時よりもn多い場合の設定(ストレートの処理)
# 
# ※ぢつは面倒なことにAとジョーカーが連番ということになっていますので、
#  ストレート系で何かポーカーハンドを増やしたい場合は気をつけてください。
# 
# ※現状A 2 3 4 5といったストレートは実現できません。すみません。
# 
# ※ちなみに、判定部分とかも変更する必要があります。
# 
#==============================================================================
# 変更履歴
# 
# 2008:11:12
# ・共通部分をモジュール化
# ・判定がおかしかったバグを修正(ところで =~ って何に使うの?)
# 
# 2008:11:16
# ・モジュール変更に伴う修正
# 
# 2008:11:23
# ・モジュール変更に伴う修正2
# 
# 2009:01:19
# ・連続して遊ぶと正常に判定されないバグを修正
# 
# 2010:03:13
# ・ソート部分をバブルソートからソート関数に変更
# 
# 2010:03:20
# ・トランプの描画部分を修正
# 
# 2011:06:04
# ・画像を統一
# ・判定直後カードの表示が消えて最終的にどんなカードだったのか分からないバグを修正
# 
# 2012:01:21
# ・エラーメッセージを共通処理モジュールへ移動
# 
# 2012:03:03
# ・一部の共通モジュールのクラス化
# 
# 2013:06:01
# ・カードの配列をひとまとめに
# ・一部の共通モジュールのクラス化 part2
# ・オーディオファイルの設定を変更
#
# 2015:10:01
# ・VXA風Sound対応
# 
# 2020:09:03
# ・Window VXA対応

module S_PORKAR
  # トランプの図柄セット
  CARD_ROOT="tr_set"
  # トランプ一枚のサイズ
  TR_WIDTH  = 72
  TR_HEIGHT = 100
  #--------------------------------------------------------------------------
  # トランプセッティング
  #--------------------------------------------------------------------------
  def set_tranp
    $card = [[], [], [], []]
    for i in 0...4
      for j in 0...15
        # 0の場合、カードの裏を設定(未使用)
        if j == 0
          $card[i][j] = Rect.new(13 * TR_WIDTH, 0, TR_WIDTH, TR_HEIGHT)
        # 14の場合、ジョーカーを設定
        elsif j == 14
          if i / 2 == 0
            $card[i][j] = Rect.new(13 * TR_WIDTH, 1 * TR_HEIGHT, 
                                   TR_WIDTH, TR_HEIGHT)
          else
            $card[i][j] = Rect.new(13 * TR_WIDTH, 2 * TR_HEIGHT, 
                                   TR_WIDTH, TR_HEIGHT)
          end
        # 13の場合、エースを設定
        elsif j == 13
          $card[i][j] = Rect.new(0, i * TR_HEIGHT, TR_WIDTH, TR_HEIGHT)
        # それ以外の場合
        else
          $card[i][j] = Rect.new(j * TR_WIDTH, i * TR_HEIGHT, 
                                 TR_WIDTH, TR_HEIGHT)
        end
      end
    end
  end
  
  # 最大交換回数
  CHANGE_MAX = 15
end

module PH_SET
  # ポーカーハンド設定集
  
  # スート、数時を気にしない〜カード
  DC = "Don't_Care"
  # スートを固定するカード
  FS = "FixSurt"
  # 数字を固定するカード(1枚目)
  N1 = "FixNum_1"
  # 数字を固定するカード(2枚目)
  N2 = "FixNum_2"
  # 数字を固定するカード(3枚目)
  N3 = "FixNum_3"
  # 数字を固定するカード(4枚目)
  N4 = "FixNum_4"
  # ストレート用のアレ
  B1 = "Before_1"
  B2 = "Before_2"
  
  # オールマイティ
  PH_ALL = [200,
            [[DC, 14], [DC, 14], [DC, 14], [DC, 14], [DC, 14]]]
  # シャッフル同盟
  PH_SUF = [150,
            [[ 3, 10], [ 0, 11], [ 2, 12], [ 1, 13], [DC, 14]]]
  # ロイヤルストレートフラッシュ
  PH_RSF = [105,
            [[FS,  9], [FS, 10], [FS, 11], [FS, 12], [FS, 13]],
            [[FS,  9], [FS, 10], [FS, 11], [FS, 12], [DC, 14]],
            [[FS,  9], [FS, 10], [FS, 11], [FS, 13], [DC, 14]],
            [[FS,  9], [FS, 10], [FS, 12], [FS, 13], [DC, 14]],
            [[FS, 10], [FS, 11], [FS, 12], [FS, 13], [DC, 14]],
            [[FS,  9], [FS, 10], [FS, 11], [DC, 14], [DC, 14]],
            [[FS,  9], [FS, 10], [FS, 12], [DC, 14], [DC, 14]],
            [[FS,  9], [FS, 11], [FS, 12], [DC, 14], [DC, 14]],
            [[FS, 10], [FS, 11], [FS, 12], [DC, 14], [DC, 14]],
            [[FS,  9], [FS, 10], [FS, 13], [DC, 14], [DC, 14]],
            [[FS,  9], [FS, 11], [FS, 13], [DC, 14], [DC, 14]],
            [[FS, 10], [FS, 11], [FS, 13], [DC, 14], [DC, 14]],
            [[FS,  9], [FS, 12], [FS, 13], [DC, 14], [DC, 14]],
            [[FS, 10], [FS, 12], [FS, 13], [DC, 14], [DC, 14]],
            [[FS, 11], [FS, 12], [FS, 13], [DC, 14], [DC, 14]]]
  # ブラックジャック・ダブル
  PH_BJW = [75,
            [[ 0,  5], [ 0,  6], [ 0,  7], [ 0, 10], [ 0, 13]],
            [[ 1,  5], [ 1,  6], [ 1,  7], [ 1, 10], [ 1, 13]]]
  # ファイブカードフラッシュ
  PH_5CF = [55,
            [[FS, N1], [FS, N1], [FS, N1], [FS, N1], [FS, N1]],
            [[FS, N1], [FS, N1], [FS, N1], [FS, N1], [DC, 14]],
            [[FS, N1], [FS, N1], [FS, N1], [DC, 14], [DC, 14]],
            [[FS, N1], [FS, N1], [DC, 14], [DC, 14], [DC, 14]],
            [[DC, DC], [DC, 14], [DC, 14], [DC, 14], [DC, 14]]]
  # スペシャル・ハンズ
  PH_SPH = [40,
            [[FS,  4], [FS,  6], [FS,  7], [FS,  9], [FS, 10]]]
  # ストレートフラッシュ
  PH_STF = [28,
            [[FS, DC], [FS, B1], [FS, B1], [FS, B1], [FS, B1]],
            [[FS, DC], [FS, B1], [FS, B1], [FS, B1], [DC, 14]],
            [[FS, DC], [FS, B2], [FS, B1], [FS, B1], [DC, 14]],
            [[FS, DC], [FS, B1], [FS, B2], [FS, B1], [DC, 14]],
            [[FS, DC], [FS, B1], [FS, B1], [FS, B2], [DC, 14]],
            [[FS, DC], [FS, B1], [FS, B1], [DC, 14], [DC, 14]],
            [[FS, DC], [FS, B2], [FS, B1], [DC, 14], [DC, 14]],
            [[FS, DC], [FS, B1], [FS, B2], [DC, 14], [DC, 14]],
            [[FS, DC], [FS, B2], [FS, B2], [DC, 14], [DC, 14]]]
  # フォアカードフラッシュ
  PH_4CF = [20,
            [[FS, DC], [FS, N2], [FS, N2], [FS, N2], [FS, N2]],
            [[FS, N1], [FS, N1], [FS, N1], [FS, N1], [FS, DC]],
            [[FS, DC], [FS, N2], [FS, N2], [FS, N2], [DC, 14]],
            [[FS, N1], [FS, N1], [FS, N1], [FS, DC], [DC, 14]],
            [[FS, DC], [FS, N2], [FS, N2], [DC, 14], [DC, 14]],
            [[FS, N1], [FS, N1], [FS, DC], [DC, 14], [DC, 14]],
            [[FS, DC], [FS, DC], [DC, 14], [DC, 14], [DC, 14]]]
  # ファイブカード
  PH_5CD = [15,
            [[DC, N1], [DC, N1], [DC, N1], [DC, N1], [DC, N1]],
            [[DC, N1], [DC, N1], [DC, N1], [DC, N1], [DC, 14]],
            [[DC, N1], [DC, N1], [DC, N1], [DC, 14], [DC, 14]],
            [[DC, N1], [DC, N1], [DC, 14], [DC, 14], [DC, 14]]]
  # フルハウスフラッシュ
  PH_FHF = [12,
            [[FS, N1], [FS, N1], [FS, N3], [FS, N3], [FS, N3]],
            [[FS, N1], [FS, N1], [FS, N1], [FS, N4], [FS, N4]],
            [[FS, N1], [FS, N1], [FS, N3], [FS, N3], [DC, 14]]]
  # フォアカード
  PH_4CD = [10,
            [[DC, DC], [DC, N2], [DC, N2], [DC, N2], [DC, N2]],
            [[DC, N1], [DC, N1], [DC, N1], [DC, N1], [DC, DC]],
            [[DC, DC], [DC, N2], [DC, N2], [DC, N2], [DC, 14]],
            [[DC, N1], [DC, N1], [DC, N1], [DC, DC], [DC, 14]],
            [[DC, DC], [DC, N2], [DC, N2], [DC, 14], [DC, 14]],
            [[DC, N1], [DC, N1], [DC, DC], [DC, 14], [DC, 14]],
            [[DC, DC], [DC, DC], [DC, 14], [DC, 14], [DC, 14]]]
  # フルハウス
  PH_FHS = [8.5,
            [[DC, N1], [DC, N1], [DC, N3], [DC, N3], [DC, N3]],
            [[DC, N1], [DC, N1], [DC, N1], [DC, N4], [DC, N4]]]
  # スリーカードフラッシュ
  PH_3CF = [7,
            [[FS, DC], [FS, DC], [FS, N3], [FS, N3], [FS, N3]],
            [[FS, DC], [FS, N2], [FS, N2], [FS, N2], [FS, DC]],
            [[FS, N1], [FS, N1], [FS, N1], [FS, DC], [FS, DC]],
            [[FS, DC], [FS, DC], [FS, N3], [FS, N3], [DC, 14]],
            [[FS, DC], [FS, N2], [FS, N2], [FS, DC], [DC, 14]],
            [[FS, N1], [FS, N1], [FS, DC], [FS, DC], [DC, 14]],
            [[FS, DC], [FS, DC], [FS, DC], [DC, 14], [DC, 14]]]
  # ツーペアフラッシュ
  PH_2PF = [5,
            [[FS, DC], [FS, N2], [FS, N2], [FS, N4], [FS, N4]],
            [[FS, N1], [FS, N1], [FS, DC], [FS, N4], [FS, N4]],
            [[FS, N1], [FS, N1], [FS, N3], [FS, N3], [FS, DC]]]
  # ワンペアフラッシュ
  PH_1PF = [4,
            [[FS, DC], [FS, DC], [FS, DC], [FS, N4], [FS, N4]],
            [[FS, DC], [FS, DC], [FS, N3], [FS, N3], [FS, DC]],
            [[FS, DC], [FS, N2], [FS, N2], [FS, DC], [FS, DC]],
            [[FS, N1], [FS, N1], [FS, DC], [FS, DC], [FS, DC]],
            [[FS, DC], [FS, DC], [FS, DC], [FS, DC], [DC, 14]]]
  # フラッシュ
  PH_FLS = [3,
            [[FS, DC], [FS, DC], [FS, DC], [FS, DC], [FS, DC]]]
  # ストレート
  PH_STT = [2.5,
            [[DC, DC], [DC, B1], [DC, B1], [DC, B1], [DC, B1]],
            [[DC, DC], [DC, B1], [DC, B1], [DC, B1], [DC, 14]],
            [[DC, DC], [DC, B2], [DC, B1], [DC, B1], [DC, 14]],
            [[DC, DC], [DC, B1], [DC, B2], [DC, B1], [DC, 14]],
            [[DC, DC], [DC, B1], [DC, B1], [DC, B2], [DC, 14]],
            [[DC, DC], [DC, B1], [DC, B1], [DC, 14], [DC, 14]],
            [[DC, DC], [DC, B2], [DC, B1], [DC, 14], [DC, 14]],
            [[DC, DC], [DC, B1], [DC, B2], [DC, 14], [DC, 14]]]
  # スリーカード
  PH_3CD = [2,
            [[DC, DC], [DC, DC], [DC, N3], [DC, N3], [DC, N3]],
            [[DC, DC], [DC, N2], [DC, N2], [DC, N2], [DC, DC]],
            [[DC, N1], [DC, N1], [DC, N1], [DC, DC], [DC, DC]],
            [[DC, DC], [DC, DC], [DC, N3], [DC, N3], [DC, 14]],
            [[DC, DC], [DC, N2], [DC, N2], [DC, DC], [DC, 14]],
            [[DC, N1], [DC, N1], [DC, DC], [DC, DC], [DC, 14]],
            [[DC, DC], [DC, DC], [DC, DC], [DC, 14], [DC, 14]]]
  # ツーペア
  PH_2PC = [1.5,
            [[DC, DC], [DC, N2], [DC, N2], [DC, N4], [DC, N4]],
            [[DC, N1], [DC, N1], [DC, DC], [DC, N4], [DC, N4]],
            [[DC, N1], [DC, N1], [DC, N3], [DC, N3], [DC, DC]]]
  # ワンペア
  PH_1PC = [0,
            [[DC, DC], [DC, DC], [DC, DC], [DC, N4], [DC, N4]],
            [[DC, DC], [DC, DC], [DC, N3], [DC, N3], [DC, DC]],
            [[DC, DC], [DC, N2], [DC, N2], [DC, DC], [DC, DC]],
            [[DC, N1], [DC, N1], [DC, DC], [DC, DC], [DC, DC]],
            [[DC, DC], [DC, DC], [DC, DC], [DC, DC], [DC, 14]]]
  
  # 判定用配列
  JUDG_LIST = [nil,    PH_ALL, PH_SUF, PH_RSF, PH_BJW, PH_5CF, PH_SPH, 
               PH_STF, PH_4CF, PH_5CD, PH_FHF, PH_4CD, PH_FHS, PH_3CF, 
               PH_2PF, PH_1PF, PH_FLS, PH_STT, PH_3CD, PH_2PC, PH_1PC]
end

class Game_System
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :ph_set                   # ポーカーハンド変数セット
end

class Window_Super_Porkar < Window_Selectable
  include PH_SET
  include TITLE_BM
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 64, 480 - 10, 380 - 128)
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(cards)
    clear
    
    @list = []
    for card in cards
      @list.push([card[0].to_i, card[1].to_i])
    end
    
    buble_sort
    draw_sporkar
  end
  #--------------------------------------------------------------------------
  # ● トランプのソート
  #--------------------------------------------------------------------------
  def buble_sort
      @list.sort! {|a, b| a[1] <=> b[1] }
  end
  include S_PORKAR
  #--------------------------------------------------------------------------
  # ● トランプの描画
  #--------------------------------------------------------------------------
  def draw_sporkar
    self.contents.clear
    
    for i in 0..4
      draw_card($card[@list[i][0]][@list[i][1]], 15 + i * 80, 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_HEIGHT), 
                              RPG::Cache.picture(CARD_ROOT), 
                              card, opacity)
  end
  #--------------------------------------------------------------------------
  # ● トランプの交換
  #--------------------------------------------------------------------------
  def card_change(index)
    @list[index] = [rand(4), rand(14) + 1]
    buble_sort
    draw_sporkar
  end
  #--------------------------------------------------------------------------
  # ● カーソルアップデート準備
  #--------------------------------------------------------------------------
  def cu_update(index)
    @index = index
    @cursor_width = @cw - 4
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # ● カーソルの矩形更新
  #--------------------------------------------------------------------------
  def update_cursor_rect
    # カーソル位置が 0 未満の場合
    if @index < 0
      self.cursor_rect.empty
      return
    end
    # カーソルの座標を計算
    x = 10 + @index * 80
    y = 30 - 8
    # カーソルの矩形を更新
    self.cursor_rect.set(x, y, @cursor_width + 16, 100 + 16)
  end
  #--------------------------------------------------------------------------
  # ● 判定用ダミーデータ作成
  #--------------------------------------------------------------------------
  def make_dmy_ary(root)
    # ダミー配列を完全別物としてコピーする。(深いコピー)
    @dummy = Marshal.load(Marshal.dump(root))
    
    for i in 1...@dummy.size
      for j in 0..4
        if @dummy[i][j][0] == FS
          @dummy[i][j][0] = @list[0][0]
        elsif @dummy[i][j][0] == DC
          @dummy[i][j][0] = @list[j][0]
        end
        if @dummy[i][j][1] == N1
          @dummy[i][j][1] = @list[0][1]
        elsif @dummy[i][j][1] == N2
          @dummy[i][j][1] = @list[1][1]
        elsif @dummy[i][j][1] == N3
          @dummy[i][j][1] = @list[2][1]
        elsif @dummy[i][j][1] == N4
          @dummy[i][j][1] = @list[3][1]
        elsif @dummy[i][j][1] == B1
          @dummy[i][j][1] = @dummy[i][j - 1][1] + 1
        elsif @dummy[i][j][1] == B2
          @dummy[i][j][1] = @dummy[i][j - 1][1] + 2
        elsif @dummy[i][j][1] == DC
          @dummy[i][j][1] = @list[j][1]
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● ポーカーハンド判定
  #--------------------------------------------------------------------------
  def sporkar_judg
    judg_list = JUDG_LIST
    
    for i in 1...judg_list.size
      make_dmy_ary(judg_list[i].clone)    
      for j in 1...@dummy.size
        if @list == @dummy[j]
          # A、ジョーカーが続いた場合、ストレートでは無いと判断させる
          if (i == 7 || i == 17) && @list[1][1] != 13
            $game_system.ph_set = [i,judg_list[i][0]]
            return
          else
            $game_system.ph_set = [i,judg_list[i][0]]
            return
          end
        end
      end
    end
  end
end

class Scene_S_porkar
  include BM
  include S_PORKAR
  include MINI_GAME
  #--------------------------------------------------------------------------
  # ● スーパーポーカー初期化
  #--------------------------------------------------------------------------
  def sporkar_init(flg = true)
    $game_system.ph_set = [0, 0]
    @start_flg = false
    @set_flg = false
    @bet_gold = 0
    @index = 0
    @change = 0
    set_tranp
    @sp_cards = [[0, 0], [1, 0], [2, 0], [3, 0], [0, 0]]
    if flg == true
      @sporkar_window.refresh(@sp_cards)
    end
  end
  #--------------------------------------------------------------------------
  # ● スーパーポーカー 清算
  #--------------------------------------------------------------------------
  def get_gold
    get = Integer(@bet_gold * $game_system.ph_set[1])
    if get > MAX_GOLD
      get = MAX_GOLD
    end
    if get > 0
      $game_party.gain_gold(get)
      text = GET_GOLD + get.to_s
      @info_window.refresh(text)
    else
      $game_party.lose_gold(@bet_gold)
      text = LOST_GOLD + @bet_gold.to_s
      @info_window.refresh(text)
    end
    
    text_flash = "フラッシュ"
    
    case $game_system.ph_set[0]
    when 0
      text2 = "役無し"
      se = LOOSE_ME
    when 1
      text2 = "オールマイティ"
      se = JACK_POT_ME1
    when 2
      text2 = "シャッフル同盟"
      se = JACK_POT_ME2
    when 3
      text2 = "ロイヤルストレート" + text_flash
      se = JACK_POT_ME2
    when 4
      text2 = "ブラックジャック・ダブル"
      se = JACK_POT_ME2
    when 5
      text2 = "ファイブカード" + text_flash
      se = JACK_POT_ME3
    when 6
      text2 = "スペシャル・ハンズ"
      se = JACK_POT_ME3
    when 7
      text2 = "ストレート" + text_flash
      se = JACK_POT_ME3
    when 8
      text2 = "フォアカード" + text_flash
      se = JACK_POT_ME4
    when 9
      text2 = "ファイブカード"
      se = JACK_POT_ME4
    when 10
      text2 = "フルハウス" + text_flash
      se = JACK_POT_ME4
    when 11
      text2 = "フォアカード"
      se = JACK_POT_ME4
    when 12
      text2 = "フルハウス"
      se = JACK_POT_ME5
    when 13
      text2 = "スリーカード" + text_flash
      se = JACK_POT_ME5
    when 14
      text2 = "ツーペア" + text_flash
      se = JACK_POT_ME5
    when 15
      text2 = "ワンペア" + text_flash
      se = JACK_POT_ME6
    when 16
      text2 = text_flash
      se = JACK_POT_ME6
    when 17
      text2 = "ストレート"
      se = JACK_POT_ME6
    when 18
      text2 = "スリーカード"
      se = JACK_POT_ME6
    when 19
      text2 = "ツーペア"
      se = JACK_POT_ME6
    when 20
      text2 = "ワンペア"
      se = LOOSE_ME
    end
    
    @change_info_window.refresh(text2, nil)
    
    if se == LOOSE_ME
      $game_system.se_play(se)
    else
      $game_system.me_play(se)
    end
    
  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
  
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  def initialize
    @bottomkeyhelp_window = Window_BottomKeyHelp.new
    set_keyhelp1
  end
  
  def main
    # ウィンドウを作成
    @title_window = Window_Title_Root.new
    
    @sporkar_window = Window_Super_Porkar.new
    
    @change_info_window = Window_Info_Space2.new
    
    @info_window = Window_Info_Space.new
    
    @gold_info_window = Window_Info_Gold.new
    
    @gold_window = Window_Gold.new
    @gold_window.x = 480 - 10
    @gold_window.y = 128
  
    @bet_info_window = Window_Info_Bet.new  
    
    @bet_window = Window_Bet_Gold.new
    
    @value_window2 = Window_Base.new(200, 200, 240, 64)
    @value_window2.z = 1000
    @value_window = Window_InputNumber.new(MAX_DIG)
    @value_window.x = 200
    @value_window.y = 200
    
    @value_window2.hide
    @value_window.hide
    @value_window.deactivate
    
    sporkar_init
    
    @title_window.refresh("スーパーポーカー")
    @bet_window.refresh(@bet_gold)
    
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      
      if @start_flg == true
        if @set_flg == false
          @sp_cards = [[rand(4), rand(14) + 1], [rand(4), rand(14) + 1], 
                       [rand(4), rand(14) + 1], [rand(4), rand(14) + 1], 
                       [rand(4), rand(14) + 1]]
          @sporkar_window.refresh(@sp_cards)
          @set_flg = true
        end
      end
      
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end

    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @title_window.dispose
    @sporkar_window.dispose
    @gold_window.dispose
    @bet_window.dispose
    @value_window.dispose
    @value_window2.dispose
    @info_window.dispose
    @gold_info_window.dispose
    @bet_info_window.dispose
    @change_info_window.dispose
    @bottomkeyhelp_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    if @sporkar_window.active
      update_main
      return
    end
    if @value_window.active
      @value_window.number = @bet_gold
      update_value
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_main
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      Sound.play_cancel
      if @start_flg == true
        @sporkar_window.cu_update(-1)
        set_keyhelp1
        @start_flg = false
      else
        $game_system.windowskin_name = WINDOW_SKIN_ROOT
        $scene = Scene_Map.new
      end
      return
    end
    if @start_flg == false
      # A ボタンが押された場合
      if Input.trigger?(Input::A)
        # 決定 SE を演奏
        Sound.play_ok
        # 念の為
        @sporkar_window.refresh(@sp_cards)
        @value_window.show
        @value_window.activate
        @value_window2.show
        @sporkar_window.deactivate
        set_keyhelp3
        return
      end
    end
    if @start_flg == true
      # X ボタンが押された場合
      if Input.trigger?(Input::X)
        # 決定 SE を演奏
        Sound.play_ok
        @sporkar_window.sporkar_judg
        get_gold
        sporkar_init(false)
        @bet_window.refresh(@bet_gold)
        @gold_window.refresh
        @sporkar_window.cu_update(-1)
        set_keyhelp1
        return
      end
      # 方向ボタンの右が押された場合
      if Input.repeat?(Input::RIGHT)
        Sound.play_cursor
        if @index == 4
          @index = 0
        else
          @index += 1
        end
        @sporkar_window.cu_update(@index)
      end
      # 方向ボタンの左が押された場合
      if Input.repeat?(Input::LEFT)
        Sound.play_cursor
        if @index == 0
          @index = 4
        else
          @index -= 1
        end
        @sporkar_window.cu_update(@index)
      end
    end
    
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      if @bet_gold == 0
        # エラー SE を演奏
        $game_system.se_play(ERROR_SE)
        text =  "まずは" + MG_ERR_BET_ZERO
        @info_window.refresh(text)
      else
        # 決定 SE を演奏
        Sound.play_ok
        @info_window.refresh("")
        @change_info_window.refresh(@change, CHANGE_MAX)
        if @start_flg == false
          @start_flg = true
          @sporkar_window.cu_update(@index)
          set_keyhelp2
        elsif @start_flg == true
          @change += 1
          @change_info_window.refresh(@change, CHANGE_MAX)
          @sporkar_window.card_change(@index)
          @sporkar_window.cu_update(@index)
        end
        if @change == CHANGE_MAX
          @sporkar_window.sporkar_judg
          get_gold
          sporkar_init(false)
          @bet_window.refresh(@bet_gold)
          @gold_window.refresh
          @sporkar_window.cu_update(-1)
          set_keyhelp1
        end
        return
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (バリューウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_value
    #refresh
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      if @bet_gold > $game_party.gold
        # エラー SE を演奏
        $game_system.se_play(ERROR_SE)
        @info_window.refresh(MG_ERR_BET_UPPER)
      elsif @bet_gold == 0
        # エラー SE を演奏
        $game_system.se_play(ERROR_SE)
        @info_window.refresh(MG_ERR_BET_ZERO)
      else
        # 決定 SE を演奏
        Sound.play_ok
        @info_window.refresh("")
        @value_window.hide
        @value_window.deactivate
        @value_window2.hide
        @sporkar_window.activate
        @bet_window.refresh(@bet_gold)
        set_keyhelp1
      return
      end
    end
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      Sound.play_cancel
      @value_window.hide
      @value_window.deactivate
      @value_window2.hide
      @sporkar_window.activate
      set_keyhelp1
      return
    end
    # Window_InputNumberに処理を移す
    @value_window.update
    @bet_gold = @value_window.number
  end
end
こぉんな感じになります。 使用画像はこちら カスタマイズポイントの設定
変数 設定例 説明
CHANGE_MAX 15 トランプを交換できる最大枚数
MAX_DIG 7 入力金額最高桁数

戻る