Sign in to follow this  
Followers 0
Fegarur

Ruleta

2 posts in this topic

Descripción:
Este script crea un minijuego que simula el funcionamiento de una ruleta de casino.
Muy fácil de instalar.

Screen:
[SPOILER]user posted image[/SPOILER]
Recursos Necesarios:
[SPOILER]Ruleta: user posted image
CursorRuleta: user posted image[/SPOILER]
Script:[SPOILER]
CODE
#==============================================================================
# Script de Ruleta
# Creado por: misty_rain (http://page.freett.com/misty_rain/)
#
# 2006/09/27~09/29
#==============================================================================
# Traducido al inglés por Renvaar
# Traducción al español por Fegarur
#==============================================================================
#
#==============================================================================
# ▲ Ruleta
#------------------------------------------------------------------------------
#  霧雨式簡易ルーレットの本体です。
#==============================================================================
class Roulette
 #--------------------------------------------------------------------------
 # ★ファイル名
 #--------------------------------------------------------------------------
 # ルーレット画像の名前
 RouletteIMGFile = "Graphics/Pictures/Ruleta"
 # 数字を指す画像の名前
 Cursor = "Graphics/Pictures/CursorRuleta"
 #背景画像の名前
 RoulBackFile = "Graphics/Titles/001-Title01"
 #敗北時SE
 Lse = "Audio/SE/057-Wrong01"
 #勝利時SE
 Wse = "Audio/SE/056-Right02"
 #--------------------------------------------------------------------------
 # ★ オブジェクト初期化
 #     menu_index : コマンドのカーソル初期位置
 #--------------------------------------------------------------------------
 def initialize(menu_index = 0)
   #乱数初期化しちゃう
   srand
   
 end
 #--------------------------------------------------------------------------
 # ★ メイン処理
 #--------------------------------------------------------------------------
 def main
   # 背景
   @RoulBack = Sprite.new
   @RoulBack.bitmap = Bitmap.new(RoulBackFile)
   
   # ルーレット本体
   @RouletteIMG = Sprite.new
   @RouletteIMG.bitmap = Bitmap.new(RouletteIMGFile)
   @RouletteIMG.visible = false
   
   # 回る数字,本体から一数字ずつ
   @Line = []
   for k in 0..36
     @Line[k] = Sprite.new
     @Line[k].bitmap = Bitmap.new(54,54)
     @Line[k].bitmap.blt(0, 0, @RouletteIMG.bitmap, Rect.new( (k % 6) * 54,(k / 6)*54,54 ,54))
     @Line[k].x = @Line[k].bitmap.width * k
     @Line[k].y = 240 - (@Line[k].bitmap.height / 2)
   end
   
   #数字を指す画像
   @CursorIMG = Sprite.new
   @CursorIMG.bitmap = Bitmap.new(Cursor)
   @CursorIMG.x = @Line[5].bitmap.width * 5
   @CursorIMG.y = 240 - (@CursorIMG.bitmap.height / 2) -54
   
   
   #回転速度配列
   @KaitenHairetsu = [1,2,3,6,9,18,27,54]
   @nowSpeed = 0
   
   #ゲームのフェイズを零にする。
   @RoulPhase = 0
   
   #賭け金配列
   @Bet = []
   
   #数字配列 この並びが回ります。画像に対応させてください。
   @Num = [
     0,32,15,19, 4,21,
     2,25,17,34, 6,27,
    13,36,11,30, 8,23,
    10, 5,24,16,33, 1,
    20,14,31, 9,22,18,
    29, 7,28,12,35, 3,
    26
   ]
   #色 "無"だと止まったときに色を言わない
   @Color = [
    " Ninguno "," Rojo "," Negro "," Rojo " ," Negro "," Rojo ",
    " Negro "," Rojo "," Negro "," Rojo "," Negro "," Rojo ",
    " Negro "," Rojo "," Negro "," Rojo "," Negro "," Rojo ",
    " Negro "," Rojo "," Negro "," Rojo "," Negro "," Rojo ",
    " Negro "," Rojo "," Negro "," Rojo "," Negro "," Rojo ",
    " Negro "," Rojo "," Negro "," Rojo "," Negro "," Rojo ",
    " Negro ",
   ]
   #賭け方配列
   @Kake = [
     "1 Número  (×10.6)",
     "2 Números (× 8.5)",
     "3 Números (× 6.4)",
     "4 Números (× 4.3)",
     "1-12       (× 2.2)",
     "13-24     (× 2.2)",
     "25-36     (× 2.2)",
     "Rojo       (× 1.1)",
     "Negro    (× 1.1)",
     "Par        (× 1.1)",
     "Impar     (× 1.1)",
   ]
   
   #配当倍率配列
   @Odds = [
    10.6,
     8.5,
     6.4,
     4.3,
     2.2,
     2.2,
     2.2,
     1.1,
     1.1,
     1.1,
     1.1,
   ]
   
   # コマンドウィンドウを作成
   s1 = "Sí"
   s2 = "No"
   @command_window = Window_Command.new(100, [s1,s2])
   @command_window.index = 0
   @command_window.x = 320 - (@command_window.width  / 2)
   @command_window.y = 240 - (@command_window.height / 2)
   @command_window.active = TRUE
   @command_window.opacity = 160
   
   #ヘルプウィンドウを作成
   @Help_window = Window_Help.new
   @Help_window.opacity = 160
   
   # ゴールドウィンドウを作成
   @gold_window = Window_Gold.new
   @gold_window.x = 640 - @gold_window.width
   @gold_window.y = @Help_window.height
   @gold_window.opacity = 160
   
 #賭け金を決めるウィンドウ
   @Bet_windowPare = Window_Base.new(640-128,480-64,128,64)
   @Bet_windowPare.opacity = 160
   
   @Bet_window = Window_InputNumber.new(4)
   @Bet_window.visible = FALSE
   @Bet_window.active = FALSE
   @Bet_window.x = 640 - @Bet_window.width
   @Bet_window.y = 480 - @Bet_window.height
   
   #賭け方を決めるウィンドウ
   @kakekata_window = Window_Command.new(200, @Kake)
   @kakekata_window.index = 0
   @kakekata_window.x = 0
   @kakekata_window.y = 480 - (@gold_window.height * 2)
   @kakekata_window.height = @gold_window.height * 2
   @kakekata_window.active = false
   @kakekata_window.opacity = 160
   
   #賭け方の詳細を決めるウィンドウ
   @suji = [
   " 0"," 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9",
   "10","11","12","13","14","15","16","17","18","19",
   "20","21","22","23","24","25","26","27","28","29",
   "30","31","32","33","34","35","36"
   ]
   #数字選択ウィンドウ
   @suji_window = []
   @sujisw = []
   @i = 0
   for @i in 0..3
     @suji_window[@i] = Window_Command.new(70,@suji)
     @suji_window[@i].active = false
     @suji_window[@i].visible = false
     @suji_window[@i].index = 0
     @suji_window[@i].x = (@i * 70) + @kakekata_window.width
     @suji_window[@i].y = 480 - (@gold_window.height * 2)
     @suji_window[@i].height = @gold_window.height * 2
     @suji_window[@i].opacity = 160
     @sujisw[@i] = 0
   end
   
   #初期回転速度
   @kaitenSPD = 1
   
   @Help_window.set_text("¿Quieres jugar a la ruleta?")
   
   
   # トランジション実行
   Graphics.transition
   # メインループ
   loop do
     case @RoulPhase
       when 0 #やるか、やらないか・・・?
         
         
       when 1
            @Help_window.set_text("Escoge tu apuesta.")
            @Bet_window.visible = TRUE
            @Bet_window.active = TRUE
            @RoulPhase = 2
       when 2 #BET・フェイズ
         #何もしません。
         #賭け金の入力を待ちます。
         
       when 3 #賭け方選択
         #何もしません。
         ##賭け方の選択を待ちます。
         
       when 4 #賭け方詳細選択
         #何もしません。
         #賭け方詳細の選択を待ちます。
         
       when 5 #回転開始
         @Line[0].x = @Line[0].x - @KaitenHairetsu[@kaitenSPD/8]
         for k in 1..36
           if (@Line[k].x < 0 && @Line[k].x >= -108)
             @Line[k].x = @Line[k].x - @KaitenHairetsu[@kaitenSPD/8]
           else
             @Line[k].x = @Line[k-1].x + 54
           end
         end
         if (@Line[0].x <= -108)
           @Line[0].x = @Line[36].x + 54
         end
         
         @kaitenSPD = @kaitenSPD + 1
         if(@kaitenSPD == 64)
              @Help_window.set_text("Usa la tecla C para detener la ruleta.")
              @RoulPhase = 6
         end
       when 6 #回転中・ストップ入力受付
         @Line[0].x = @Line[0].x - @KaitenHairetsu[7]
         for k in 1..36
           if (@Line[k].x < 0 && @Line[k].x >= -108)
             @Line[k].x = @Line[k].x - @KaitenHairetsu[7]
           else
             @Line[k].x = @Line[k-1].x + 54
           end
         end
         if (@Line[0].x <= -108)
           @Line[0].x = @Line[36].x + 54
         end
         if Input.trigger?(Input::C)
            @Help_window.set_text("Deteniendo...")
            @RoulPhase = 7
            @kaitenSPD = 54
            @StopSW = 0
            @StopNumber = -1
         end
         
       when 7 #停止中
         @Line[0].x = @Line[0].x - @KaitenHairetsu[@kaitenSPD/8]
         for k in 1..36
           if (@Line[k].x < 0 && @Line[k].x >= -108)
             @Line[k].x = @Line[k].x - @KaitenHairetsu[@kaitenSPD/8]
           else
             @Line[k].x = @Line[k-1].x + 54
           end
         end
         if (@Line[0].x <= -108)
           @Line[0].x = @Line[36].x + 54
         end
         if(@kaitenSPD == 0 )
            @RoulPhase = 8
         else
           @kaitenSPD = @kaitenSPD - 1
         end
       when 8 #完全停止
         if(@Line[0].x % 54 == 0)
           @StopNumber = 0
           for k in 0..36
             if ( @Line[k].x == (54 * 5) )
               @StopNumber = k
               break
             end
           end
           if (@Color[@StopNumber] == "Ninguno")
             @Help_window.set_text("#{@Num[@StopNumber]}")
           else
             @Help_window.set_text("#{@Num[@StopNumber]}の#{@Color[@StopNumber]}")
           end
           @RoulPhase = 9
           @Roulwait = 100
         else
           @Line[0].x = @Line[0].x - @KaitenHairetsu[0]
           for k in 1..36
             if (@Line[k].x < 0 && @Line[k].x >= -108)
               @Line[k].x = @Line[k].x - @KaitenHairetsu[0]
             else
               @Line[k].x = @Line[k-1].x + 54
             end
           end
           if (@Line[0].x <= -108)
             @Line[0].x = @Line[36].x + 54
           end
         end
         
       when 9 #停止&判定&支払い
         if (@Roulwait > 0)
           @Roulwait = @Roulwait -1
         else
           #判定
           @Atari = 0
           case @kakekata_window.index
             when 0 # 一数字
               if (@Num[@StopNumber] == @suji_window[0].index)
                 @Atari = 1
               end
             when 1 # 二数字
               if (@Num[@StopNumber] == @suji_window[0].index || @Num[@StopNumber] == @suji_window[1].index )
                 @Atari = 1
               end
             when 2 # 三数字
               if (@Num[@StopNumber] == @suji_window[0].index || @Num[@StopNumber] == @suji_window[1].index || @Num[@StopNumber] == @suji_window[2].index )
                 @Atari = 1
               end
             when 3 # 四数字
               if (@Num[@StopNumber] == @suji_window[0].index || @Num[@StopNumber] == @suji_window[1].index || @Num[@StopNumber] == @suji_window[2].index || @Num[@StopNumber] == @suji_window[3].index)
                 @Atari = 1
               end
             when 4 # 1-12
               if (@Num[@StopNumber] >= 1 && @Num[@StopNumber] <=12 )
                 @Atari = 1
               end
             when 5 # 13-24
               if (@Num[@StopNumber] >= 13 && @Num[@StopNumber] <=24 )
                 @Atari = 1
               end
             when 6 # 25-36
               if (@Num[@StopNumber] >= 25 && @Num[@StopNumber] <=36 )
                 @Atari = 1
               end
             when 7 # Rojo
               if (@Color[@StopNumber] == " Rojo ")
                 @Atari = 1
               end
             when 8 # Negro
               if (@Color[@StopNumber] == " Negro ")
                 @Atari = 1
               end
             when 9 # 偶数
               if (@Num[@StopNumber] % 2 == 0)
                 @Atari = 1
               end
             when 10 # 奇数
               if (@Num[@StopNumber] % 2 == 1)
                 @Atari = 1
               end
           end
           if(@Atari == 1)
           #当り
             Audio.se_play(Wse, 80, 100)
             $game_party.gain_gold((@Bet * @Odds[@kakekata_window.index]).truncate)
             @gold_window.refresh
           # 支払い
           else
           # 外れ
             Audio.se_play(Lse, 80, 100)
           end
           @RoulPhase = 10
           @Help_window.set_text("¿Quieres continuar?")
           @command_window.active = TRUE
           @command_window.visible = TRUE
         end
         
       when 10 # 続けるか?
         
       when 11 # 続けます
         @suji_window[0].visible = FALSE
         @suji_window[1].visible = FALSE
         @suji_window[2].visible = FALSE
         @suji_window[3].visible = FALSE
         @command_window.active = FALSE
         @command_window.visible = FALSE
         @RoulPhase = 1
         
       when 12 # 終了する
         # マップ画面に切り替え
         $scene = Scene_Map.new
      end
       
     # ゲーム画面を更新
     Graphics.update
     # 入力情報を更新
     Input.update
     # フレーム更新
     update
     # 画面が切り替わったらループを中断
     if $scene != self
       break
     end
   end
   # トランジション準備
   Graphics.freeze
   #開放します
   
   @command_window.dispose
   @gold_window.dispose
   @Help_window.dispose
   @Bet_window.dispose
   @Bet_windowPare.dispose
   @kakekata_window.dispose
   
   @CursorIMG.bitmap.dispose
   @CursorIMG.dispose
   for @i in 0..3
     @suji_window[@i].dispose
   end
   for k in 0..36
     @Line[k].bitmap.dispose
     @Line[k].dispose
   end
   @RoulBack.bitmap.dispose
   @RoulBack.dispose
   
   @RouletteIMG.bitmap.dispose
   @RouletteIMG.dispose
   
 end
 #--------------------------------------------------------------------------
 # ★ フレーム更新
 #--------------------------------------------------------------------------
 def update
   # ウィンドウを更新
   @gold_window.update
   
   #ベットウィンドウの更新
   if @Bet_window.active
     @Bet_window.update
     @Bet_windowPare.update
     update_Bet
   end
   
   #コマンドウィンドウの更新
   if @command_window.active
     @command_window.update
     update_command
   end
   
   if @kakekata_window.active
     @kakekata_window.update
     update_kakekata
   end
   
   if @suji_window[0].active
     @suji_window[0].update
     update_suji1
   end
   if @suji_window[1].active
     @suji_window[1].update
     update_suji2
   end
   if @suji_window[2].active
     @suji_window[2].update
     update_suji3
   end
   if @suji_window[3].active
     @suji_window[3].update
     update_suji4
   end
   
 end
 #---------------------- ----------------------------------------------------
 # ★ フレーム更新(賭け金入力ウィンドウがアクティブの場合)
 #--------------------------------------------------------------------------
 def update_Bet
   if Input.trigger?(Input::B)
     # キャンセル SE を演奏
     $game_system.se_play($data_system.cancel_se)
     @RoulPhase = 12
   end
   # C ボタンが押された場合
   if Input.trigger?(Input::C)
     #所持金以下か?
     if @Bet_window.number <= $game_party.gold
       if @Bet_window.number > 0
         # 決定 SE を演奏
         $game_system.se_play($data_system.decision_se)
         @Bet_window.active = FALSE
         @Bet = @Bet_window.number
         $game_party.lose_gold(@Bet)
         @gold_window.refresh
         toKakekataSentaku
       else
         #ブザー
         $game_system.se_play($data_system.buzzer_se )
         @Help_window.set_text("Apuesta mínima 1#{$data_system.words.gold}.")
       end
     else
       #ブザー
       $game_system.se_play($data_system.buzzer_se )
       @Help_window.set_text("No tienes suficiente dinero.")
     end
     return
   end
 end
 #--------------------------------------------------------------------------
 # ● 賭け方選択へ
 #--------------------------------------------------------------------------
 def toKakekataSentaku
         @Help_window.set_text(" ")
         @RoulPhase = 3
         @sujisw[0] = 0
         @sujisw[1] = 0
         @sujisw[2] = 0
         @sujisw[3] = 0
         @kakekata_window.active = true
         @Help_window.set_text("¿A qué vas a apostar?")
 end
 #--------------------------------------------------------------------------
 # ● 回す!
 #--------------------------------------------------------------------------
 def toKaiten
   @Help_window.set_text("Girando...")
   @RoulPhase = 5
   @nowSpeed = 0
   @kaitenSPD = 1
 end
 #--------------------------------------------------------------------------
 # ● フレーム更新 (賭け方ウィンドウがアクティブの場合)
 #--------------------------------------------------------------------------
 def update_kakekata
   
   # B ボタンが押された場合
   if Input.trigger?(Input::B)
     # キャンセル SE を演奏
     $game_system.se_play($data_system.cancel_se)
     @Help_window.set_text("Decide la cantidad a apostar.")
     @Bet_window.active = true
     $game_party.gain_gold(@Bet)
     @gold_window.refresh
     @kakekata_window.active = false
     @RoulPhase = 2
     return
   end
   if Input.trigger?(Input::C)
       $game_system.se_play($data_system.decision_se)
       #@Help_window.set_text("賭け金:#{@Bet},賭け方:#{@Odds[@kakekata_window.index]}")
       if(@kakekata_window.index > 3 && @sujisw[0] != 0)
         @sujisw[0] = 0
         @kakekata_window.active = false
         toKaiten
       elsif( @sujisw[0] != 0)
         @sujisw[0] = 0
         @kakekata_window.active = false
         @Help_window.set_text("¿A qué número quieres apostar?")
         @suji_window[0].active = true
         @suji_window[0].visible= true
         @RoulPhase = 4
         return
       end
       @sujisw[0] = 1
   end
 end
 #--------------------------------------------------------------------------
 # ● フレーム更新 (数字選択ウィンドウ1がアクティブの場合)
 #--------------------------------------------------------------------------
 def update_suji1
   if Input.trigger?(Input::B)
     # キャンセル SE を演奏
     $game_system.se_play($data_system.cancel_se)
     @suji_window[0].active = false
     @suji_window[0].visible= false
     toKakekataSentaku
     @sujisw[0] = 1
     return
   end
   if Input.trigger?(Input::C)
       $game_system.se_play($data_system.decision_se)
       if(@kakekata_window.index > 0 && @sujisw[0] != 0)
         @sujisw[0] = 0
         @suji_window[0].active = false
         @suji_window[1].active = true
         @suji_window[1].visible= true
         return
       elsif( @sujisw[0] != 0)
         @suji_window[0].active = false
         toKaiten
         return
       end
       @sujisw[0] = 1
   end
 end
 #--------------------------------------------------------------------------
 # ● フレーム更新 (数字選択ウィンドウ2がアクティブの場合)
 #--------------------------------------------------------------------------
 def update_suji2
   if Input.trigger?(Input::B)
     # キャンセル SE を演奏
     $game_system.se_play($data_system.cancel_se)
     @suji_window[1].active = false
     @suji_window[1].visible= false
     @suji_window[0].active = true
     @suji_window[0].visible= true
     @sujisw[0] = 1
     return
   end
   if Input.trigger?(Input::C)
       $game_system.se_play($data_system.decision_se)
       if(@kakekata_window.index > 1 && @sujisw[0] != 0)
         @sujisw[0] = 0
         @suji_window[1].active = false
         @suji_window[2].active = true
         @suji_window[2].visible= true
         return
       elsif( @sujisw[0] != 0)
         @sujisw[0] = 0
         @suji_window[1].active = false
         toKaiten
         return
       end
       @sujisw[0] = 1
   end
 end
 #--------------------------------------------------------------------------
 # ● フレーム更新 (数字選択ウィンドウ3がアクティブの場合)
 #--------------------------------------------------------------------------
 def update_suji3
   if Input.trigger?(Input::B)
     # キャンセル SE を演奏
     $game_system.se_play($data_system.cancel_se)
     @suji_window[2].active = false
     @suji_window[2].visible= false
     @suji_window[1].active = true
     @suji_window[1].visible= true
     @sujisw[0] = 1
     return
   end
   if Input.trigger?(Input::C)
       $game_system.se_play($data_system.decision_se)
       if(@kakekata_window.index > 2 && @sujisw[0] != 0)
         @sujisw[0] = 0
         @suji_window[2].active = false
         @suji_window[3].active = true
         @suji_window[3].visible= true
         return
       elsif( @sujisw[0] != 0)
         @sujisw[0] = 0
         @suji_window[2].active = false
         toKaiten
         return
       end
       @sujisw[0] = 1
   end
 end
 #--------------------------------------------------------------------------
 # ● フレーム更新 (数字選択ウィンドウ4がアクティブの場合)
 #--------------------------------------------------------------------------
 def update_suji4
   if Input.trigger?(Input::B)
     # キャンセル SE を演奏
     $game_system.se_play($data_system.cancel_se)
     @suji_window[3].active = false
     @suji_window[3].visible= false
     @suji_window[2].active = true
     @suji_window[2].visible= true
     @sujisw[0] = 1
     return
   end
   if Input.trigger?(Input::C)
       $game_system.se_play($data_system.decision_se)
       if(@sujisw[0] != 0)
         @sujisw[0] = 0
         @suji_window[3].active = false
         toKaiten
         return
       end
       @sujisw[0] = 1
   end
 end
 
 #--------------------------------------------------------------------------
 # ● フレーム更新 (コマンドウィンドウがアクティブの場合)
 #--------------------------------------------------------------------------
 def update_command
   # B ボタンが押された場合
   if Input.trigger?(Input::B)
     # キャンセル SE を演奏
     $game_system.se_play($data_system.cancel_se)
     # マップ画面に切り替え
     $scene = Scene_Map.new
     return
   end
   # C ボタンが押された場合
   if Input.trigger?(Input::C)
     if @RoulPhase == 10
       # 決定 SE を演奏
       $game_system.se_play($data_system.decision_se)
       case @command_window.index
       when 0  # 続けます
         @RoulPhase = 11
       when 1 # やめます。(賞金支払いフェイズへ)
         @RoulPhase = 12
       end
     else
       # コマンドウィンドウのカーソル位置で分岐
       case @command_window.index
       when 0  # やります
         #一文無しならダメです。
         if $game_party.gold == 0
           #ブザー
           $game_system.se_play($data_system.buzzer_se )
           @Help_window.set_text("No tienes suficiente dinero.")
         else
           # 決定 SE を演奏
           $game_system.se_play($data_system.decision_se)
           @Help_window.set_text(" ")
           @command_window.active = FALSE
           @command_window.visible = FALSE
           @RoulPhase = 1
         end
       when 1  # やりません
         # 決定 SE を演奏
         $game_system.se_play($data_system.decision_se)
         # マップ画面に切り替え
         $scene = Scene_Map.new
       end
     end
     return
   end
 end
end
[/SPOILER]
Instrucciones:
- Las dos imágenes de 'Recursos Necesarios' van en la carpeta Pictures del proyecto.
- Pega el script sobre Main.
- Para llamarlo en el mapa, utiliza el siguiente código:
QUOTE
$scene = Roulette.new


Créditos:
Script creado por misty_rain.
0

Share this post


Link to post
Share on other sites
La verdad fegarur que esta muy bueno el script, mejor que el anterior... Sobre todo porque esta animado....
Te pasaste esta vez(y claro misty_rain tambien jeje)
0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0