Hey I made Scene Poker, but its not completed yet. I hope some one study it then he can find the best way to complete this Scene
Ok to use this script copy all this script whereever above "main"
to activate you are just to call with command $scene = Scene_Poker.new and to modify coin with command $my_variable.casino_coin += 1
[SIZE=7]This Script have many bugs in it, later i will give you, what i found and give you solution that maybe help fix the bugs[SIZE=1]
CODE
#===================================================
class My_Variable
attr_accessor :casino_coin
def initialize
@casino_coin = 0
end
end
#===================================================
#===================================================
class Scene_Title
alias my_variable_command_new_game command_new_game
def command_new_game
my_variable_command_new_game
$my_variable = My_Variable.new
end
end
#===================================================
#===================================================
class Scene_Save < Scene_File
alias my_variable_write_save_data write_save_data
def write_save_data(file)
my_variable_write_save_data(file)
Marshal.dump($my_variable, file)
end
end
#===================================================
#===================================================
class Scene_Load < Scene_File
alias my_variable_read_save_data read_save_data
def read_save_data(file)
my_variable_read_save_data(file)
$my_variable = Marshal.load(file)
end
end
#===================================================
CODE
class Card < Window_Base
def initialize(index)
@show = false
@index = index
super(550, 150, 100, 140)
self.contents = Bitmap.new(width - 32, height - 32)
bitmap = RPG::Cache.picture("Card Game/Card Reverse.png")
cw = bitmap.width
ch = bitmap.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(0, 0, bitmap, src_rect)
self.opacity = 0
self.z = 10 + index
set_value
end
def set_value
case (@index % 13)
when 1
@value = 2
when 2
@value = 3
when 3
@value = 4
when 4
@value = 5
when 5
@value = 6
when 6
@value = 7
when 7
@value = 8
when 8
@value = 9
when 9
@value = 10
when 10
@value = 11
when 11
@value = 12
when 12
@value = 13
when 0
@value = 14
end
if @index < 13
@type = "S"
elsif @index < 26
@type = "H"
elsif @index < 39
@type = "D"
elsif @index < 52
@type = "C"
end
@file_name = "Card Game/Card#{@index+1}"
end
def index
return @index
end
def value
return @value
end
def type
return @type
end
def togle_picture
if @show
@show = false
bitmap = RPG::Cache.picture("Card Game/Card Reverse.png")
cw = bitmap.width
ch = bitmap.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(0, 0, bitmap, src_rect)
else
@show = true
bitmap = RPG::Cache.picture(@file_name)
cw = bitmap.width
ch = bitmap.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(0, 0, bitmap, src_rect)
end
end
def clear_picture
if self.contents != nil
self.contents.clear
end
end
def file_name
return @file_name
end
end
CODE
#===================================================
class Window_Mini_Game_Message < Window_Base
def initialize
super(0, 0, 640, 96)
self.z = 50
self.y = 384
self.opacity = 150
self.back_opacity = 150
self.contents = Bitmap.new(width - 32, height - 32)
end
def rewrite(x, y, text, align)
self.contents.clear
self.contents.draw_text(x, y, 640, 32, text.to_s, align = 0)
end
def add_text(x, y, text, align)
self.contents.draw_text(x, y, 640, 32, text.to_s, align = 0)
end
end
#===================================================
#===================================================
class Window_MiniGame_Status1 < Window_Base
def initialize(bet)
@bet = bet
super(0, 0, 400, 160)
self.z = 75
self.opacity = 150
self.back_opacity = 150
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
def refresh(bet = @bet,win_code = 0)
self.contents.clear
if win_code == 8
self.contents.font.color = crisis_color
else
self.contents.font.color = normal_color
end
self.contents.draw_text(0, 0, 100, 32,"R. St. Flush",2)
self.contents.draw_text(110, 0, 50, 32,(bet + bet*249).to_s,3)
if win_code == 7
self.contents.font.color = crisis_color
else
self.contents.font.color = normal_color
end
self.contents.draw_text(0, 32, 100, 32,"Straight Flush",2)
self.contents.draw_text(110, 32, 50, 32,(bet + bet*49).to_s,3)
if win_code == 6
self.contents.font.color = crisis_color
else
self.contents.font.color = normal_color
end
self.contents.draw_text(0, 64, 100, 32,"Four of a Kind",2)
self.contents.draw_text(110, 64, 50, 32,(bet + bet*19).to_s,3)
if win_code == 5
self.contents.font.color = crisis_color
else
self.contents.font.color = normal_color
end
self.contents.draw_text(0, 96, 100, 32,"Full House",2)
self.contents.draw_text(110, 96, 50, 32,(bet + bet*9).to_s,3)
if win_code == 4
self.contents.font.color = crisis_color
else
self.contents.font.color = normal_color
end
self.contents.draw_text(170, 0, 100, 32,"Flush",2)
self.contents.draw_text(280, 0, 50, 32,(bet + bet*4).to_s,3)
if win_code == 3
self.contents.font.color = crisis_color
else
self.contents.font.color = normal_color
end
self.contents.draw_text(170, 32, 100, 32,"Straight",2)
self.contents.draw_text(280, 32, 50, 32,(bet + bet*3).to_s,3)
if win_code == 2
self.contents.font.color = crisis_color
else
self.contents.font.color = normal_color
end
self.contents.draw_text(170, 64, 100, 32,"Three of a Kind",2)
self.contents.draw_text(280, 64, 50, 32,(bet + bet*1).to_s,3)
if win_code == 1
self.contents.font.color = crisis_color
else
self.contents.font.color = normal_color
end
self.contents.draw_text(170, 96, 100, 32,"Two Pair",2)
self.contents.draw_text(280, 96, 50, 32,(bet + bet*0).to_s,3)
end
end
#===================================================
#===================================================
class Window_MiniGame_Status2 < Window_Base
def initialize(bet)
@bet = bet
super(401, 0, 240, 160)
self.z = 75
self.opacity = 150
self.back_opacity = 150
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
def refresh(bet = @bet, win = 0)
self.contents.clear
self.contents.font.color = normal_color
self.contents.draw_text(0, 0, 100, 32,"Coin",1)
self.contents.draw_text(0, 64, 100, 32,"Bet",1)
self.contents.draw_text(0, 96, 100, 32,"Win",1)
self.contents.draw_text(100, 32, 100, 32,($my_variable.casino_coin - @bet).to_s,3)
self.contents.draw_text(100, 64, 100, 32,bet.to_s,3)
self.contents.draw_text(100, 96, 100, 32,win.to_s,3)
end
end
#===================================================
CODE
class Scene_Poker
def initialize(last_bet = 0)
@bet = last_bet
if @bet < $my_variable.casino_coin
$my_variable.casino_coin -= @bet
else
@bet = $my_variable.casino_coin
end
end
def main
@phase = 0
@interupt = 0
@win = 0
@back = Sprite.new
@back.bitmap = RPG::Cache.picture("Card Game/Poker Table.png")
@back.z = 0
@cards = []
@cards_in_hand = []
for i in 0..51
@cards.push(Card.new(i+1))
end
#@cards = shuffle
@message = Window_Mini_Game_Message.new
@status1 = Window_MiniGame_Status1.new(@bet)
@status2 = Window_MiniGame_Status2.new(@bet)
@decide_card = Window_Base.new(0,0,100,140)
@decide_card.opacity = 100
@decide_card.z = 100
@decide_card.y = 200
@decide_card.x = 20
@decide_card.active = false
@decide_card.visible = false
@reserve_card = []
@index_option = 0
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@message.dispose
@back.dispose
@status1.dispose
@status2.dispose
@decide_card.dispose
for i in 0..@cards_in_hand.size - 1
if @cards_in_hand[i] != nil
@cards_in_hand[i].dispose
end
end
end
def update
@message.update
@status1.update
@status2.update
@decide_card.update
if @decide_card.active
update_decide_card
return
elsif @interupt != 0
interupt(@interupt)
else
case @phase
when 0
update_phase_0
return
when 1
update_phase_1
return
when 2
update_phase_2
return
when 3
update_phase_3
return
when 4
update_phase_4
return
when 5
update_phase_5
return
when 6
update_phase_6
return
when 7
update_phase_7
return
when 8
update_phase_8
return
when 9
update_phase_9
return
when 10
update_phase_10
return
when 11
update_phase_11
return
when 12
update_phase_12
return
end
end
if Input.trigger?(Input::B)
@message.rewrite(0,0,@cards.size.to_s, 0)
end
if Input.trigger?(Input::C)
for i in 0..18
@message.add_text(i * 32, 0, ",#{@cards[i].index}",0)
end
for i in 19..36
@message.add_text((i-19) * 32, 32, ",#{@cards[i].index}",0)
end
end
end
def update_phase_0
if $my_variable.casino_coin < 1
@message.rewrite(0, 0, "Minimal anda harus punya 1 Coin", 0)
@phase = 12
else
@phase = 1
end
end
def update_phase_1
@message.rewrite(0, 0, "Masukan Bet Dengan Up /Down Lalu Tekan C", 0)
if Input.trigger?(Input::UP)
$game_system.se_play($data_system.decision_se)
@bet += 1
$my_variable.casino_coin -= 1
@status1.refresh(@bet)
@status2.refresh(@bet)
if (@bet == 10) or ($my_variable.casino_coin < 1)
@phase = 2
return
end
end
if Input.trigger?(Input::DOWN) and @bet > 0
$game_system.se_play($data_system.cancel_se)
$my_variable.casino_coin += 1
@bet -= 1
@status1.refresh(@bet)
@status2.refresh(@bet)
end
if Input.trigger?(Input::C) and @bet > 0
@phase = 2
return
end
end
def update_phase_2
@cards_in_hand.push(@cards[1])
@cards_in_hand.push(@cards[2])
@cards_in_hand.push(@cards[3])
@cards_in_hand.push(@cards[4])
@cards_in_hand.push(@cards[5])
for i in 0..4
#@cards_in_hand.push(@cards[i])
@cards_in_hand[i].y = 200
@cards_in_hand[i].x = i * 80 + 20
@cards_in_hand[i].togle_picture
end
@message.rewrite(0, 0, "Pilih Kartu yang tetap dipegang", 0)
@message.add_text(0, 32, "Sisanya Akan Ditukar Setelah itu Tekan B", 0)
@decide_card.active = true
@decide_card.visible = true
@index_option = 0
return
end
def update_decide_card
if Input.trigger?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
@index_option -= 1
if @index_option < 0
@index_option = 4
end
end
if Input.trigger?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
@index_option += 1
if @index_option > 4
@index_option = 0
end
end
@decide_card.x = @index_option * 80 + 20
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
if @reserve_card.include?(@index_option)
@reserve_card.delete(@index_option)
else
@reserve_card.push(@index_option)
end
@cards_in_hand[@index_option].togle_picture
end
if Input.trigger?(Input::B)
$game_system.se_play($data_system.save_se)
@message.rewrite(0,0,"",0)
for i in 0..@reserve_card.size - 1
@message.add_text(i *32, 0, @reserve_card[i].to_s, 0)
end
@decide_card.active = false
@decide_card.visible = false
@phase = 3
return
end
end
def update_phase_3
for i in 0..@reserve_card.size - 1
@cards_in_hand[@reserve_card[i]].clear_picture
@cards_in_hand[@reserve_card[i]] = @cards[i+5]
@cards_in_hand[@reserve_card[i]].y = 200
@cards_in_hand[@reserve_card[i]].z = @reserve_card[i] + 10
@cards_in_hand[@reserve_card[i]].x = @reserve_card[i] * 80 + 20
@cards_in_hand[@reserve_card[i]].togle_picture
end
@phase = 4
return
end
def shuffle
new_array = []
array = []
for i in 0..(@cards.size - 1)
array.push(@cards[i].index)
end
long = (array.size - 1)
for i in 0..long
randomizer = rand(array.size)
new_array.push(Card.new(array[randomizer]))
array.delete_at(randomizer)
end
return new_array
end
def update_phase_12
if Input.trigger?(Input::B) or Input.trigger?(Input::C)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
end
end
end
CODE
class Scene_Poker
def update_phase_4
@win_type = scan_win
@status1.refresh(@bet,@win_type)
#flush = scan_flush
#straight = scan_straight
#@message.rewrite(0, 0, "Win : " + @win_type.to_s, 0)
#@message.add_text(100, 0, "Flush ? " + flush.to_s, 0)
#@message.add_text(200, 0, "Straight ? " + straight.to_s, 0)
#@message.add_text(0, 32, @cards_in_hand[0].type, 0)
#@message.add_text(32, 32, @cards_in_hand[1].type, 0)
#@message.add_text(64, 32, @cards_in_hand[2].type, 0)
#@message.add_text(96, 32, @cards_in_hand[3].type, 0)
#@message.add_text(128, 32, @cards_in_hand[4].type, 0)
if @win_type != 0
case @win_type
when 1
@win = @bet + (@bet * 0)
when 2
@win = @bet + (@bet * 1)
when 3
@win = @bet + (@bet * 2)
when 4
@win = @bet + (@bet * 4)
when 5
@win = @bet + (@bet * 9)
when 6
@win = @bet + (@bet * 19)
when 7
@win = @bet + (@bet * 49)
when 8
@win = @bet + (@bet * 249)
end
@status2.refresh(@bet,@win)
@message.rewrite(0, 0, "Do You want Double Up it to "+(@win * 2).to_s + " ?", 0)
@message.add_text(0, 32, "[B] to No/ [C] to Yes", 0)
#---------------------[Even you say No it will Prepare The Cards]-------------------------------
@cards = []
for i in 0..51
@cards.push(Card.new(i+1))
end
@cards = shuffle
@key = 0
#------------------------------------------------------------------------------------------------------
@phase = 5
return
else
if $my_variable.casino_coin > 0
@message.rewrite(0, 0, "Do You want Play Another Game ? ", 0)
@message.add_text(0, 32, "[B] to No/ [C] to Yes", 0)
@phase = 6
return
else
@message.rewrite(0, 0, "At Last You Need 1 Coin", 0)
@phase = 0
return
end
end
end
def scan_same_card
last_search = nil
same_card = 1
array_result = []
array_temp = []
for i in 0..(@cards_in_hand.size - 1)
array_temp.push(@cards_in_hand[i].value)
end
array_temp.sort!
for i in 0..(array_temp.size - 1)
if array_temp[i] != last_search
same_card = 1
for j in (i+1)..(array_temp.size - 1)
if array_temp[j] == array_temp[i]
same_card += 1
end
end
last_search = array_temp[i]
if same_card != 1
array_result.push(same_card)
end
end
end
return array_result
end
def scan_straight
flag = true
array_temp = []
for i in 0..@cards_in_hand.size - 1
array_temp.push(@cards_in_hand[i].value)
end
array_temp.sort!
pointer = array_temp[0]
for i in 1..(array_temp.size - 1)
if array_temp[i] != (pointer + 1)
flag = false
else
pointer= array_temp[i]
end
end
if flag == false
result = false
else
result = true
end
return result
end
def scan_flush
flag = true
array_temp = []
for i in 0..@cards_in_hand.size - 1
array_temp.push(@cards_in_hand[i].type)
end
pointer = array_temp[0]
for i in 1..array_temp.size - 1
if array_temp[i] != pointer
flag = false
else
pointer= array_temp[i]
end
end
if flag == false
result = false
else
result = true
end
return result
end
def scan_royal
result = false
flush = scan_flush
straight = scan_straight
if flush and straight
array_temp = []
for i in 0..(@cards_in_hand.size - 1)
array_temp.push(@cards_in_hand[i].value)
end
array_temp.sort!
array_temp.reverse!
pointer = array_temp[0]
if pointer == 14
flag = true
for i in 1..(array_temp.size - 1)
if array_temp[i] != (pointer - 1)
flag = false
else
pointer = array_temp[i]
end
end
end
end
if flag
result = true
end
return result
end
def scan_win
result = 0 #Lose
same_card = []
same_card = scan_same_card
if same_card.size == 1
case same_card[0]
when 3
result = 2 #Three Kind
when 4
result = 6 #Four Kind
end
end
if same_card.size == 2
total = same_card[0] + same_card[1]
case total
when 4
result = 1 #Two Pair
when 5
result = 5 #Full Hose
end
end
if same_card.size == 0
royal = scan_royal
flush = scan_flush
straight = scan_straight
if royal
result = 8 #Royal Straight Flush
elsif (flush) and (straight)
result = 7
elsif flush
result = 4
elsif straight
result = 3
end
end
return result
end
def update_phase_5
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
if $my_variable.casino_coin > 0
@message.rewrite(0, 0, "Do You Want Play Another Game ?", 0)
@message.add_text(0, 32, "[B] to No/ [C] to Yes", 0)
$my_variable.casino_coin += @win
@phase = 6
else
@phase = 0
end
return
end
if Input.trigger?(Input::C)
if @cards_in_hand.size != 0
for i in 0..@cards_in_hand.size - 1
if @cards_in_hand[i] != nil
@cards_in_hand[i].clear_picture
@cards_in_hand[i].dispose
end
end
end
$game_system.se_play($data_system.decision_se)
@phase = 7
return
end
end
def update_phase_6
if Input.trigger?(Input::B)
for i in 0..@cards.size - 1
if @cards[i] != nil
@cards[i].dispose
end
end
$game_system.se_play($data_system.cancel_se)
Graphics.transition(40)
$scene = Scene_Map.new
return
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
$scene = Scene_Poker.new(@bet)
return
end
end
end
CODE
class Scene_Poker
def update_phase_7
@card_now = @cards[@key]
@card_now.x = @key * 20
@card_now.y = 250
@card_now.z = @key + 10
@card_now.togle_picture
@key += 1
@card_next = @cards[@key]
@card_next.x = @key * 20
@card_next.y = 250
@card_now.z = @key + 10
@message.rewrite(0, 0, "Prediksikan Kartu Berikutnya Lebih Tinggi Atau Lebih Rendah ?", 0)
@message.add_text(0, 32, "[B] to Lower/ [C] to Higher", 0)
@judge = 0
@phase = 8
return
end
def update_phase_8
if Input.trigger?(Input::B)
@card_next.togle_picture
$game_system.se_play($data_system.decision_se)
if @card_now.value > @card_next.value
@judge = 1
elsif @card_now.value < @card_next.value
@judge = 0
elsif @card_now.value == @card_next.value
@judge = 2
end
@phase = 10
return
end
if Input.trigger?(Input::C)
@card_next.togle_picture
$game_system.se_play($data_system.decision_se)
if @card_now.value < @card_next.value
@judge = 1
elsif @card_now.value > @card_next.value
@judge = 0
elsif @card_now.value == @card_next.value
@judge = 2
end
@phase = 10
return
end
end
def update_phase_9
if $my_variable.casino_coin > 0
@message.rewrite(0, 0, "Do You Want Play Another Game ?", 0)
@message.add_text(0, 32, "[B] to No/ [C] to Yes", 0)
@phase = 6
else
@phase = 0
end
end
def update_phase_10
case @judge
when 0
@win = 0
@status2.refresh(@bet, @win)
@message.rewrite(0, 0, "Sorry You Lose", 0)
@message.add_text(0, 32, "[Prees Any Key]", 0)
@interupt = 2
return
when 1
@win *= 2
@status2.refresh(@bet,@win)
@message.rewrite(0, 0, "Great", 0)
@message.add_text(0, 32, "[Prees Any Key]", 0)
@interupt = 1
@judge = -1
return
when 2
@phase = 7
return
end
end
def update_phase_11
if Input.trigger?(Input::C)
@card_next.togle_picture
@phase = 7
return
end
if Input.trigger?(Input::B)
@phase = 6
return
end
end
def interupt(type)
case type
when 1
if Input.trigger?(Input::C) or Input.trigger?(Input::B) or
Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN) or
Input.trigger?(Input::LEFT) or Input.trigger?(Input::RIGHT)
Input.trigger?(Input::X) or Input.trigger?(Input::Y)
@message.rewrite(0, 0, "Mau Mendoublekan Bet Menjadi "+(@win *= 2).to_s + " ?", 0)
@message.add_text(0, 32, "[B] No/ [C] Yes", 0)
@card_next.togle_picture
@phase = 11
@interupt = 0
return
end
when 2
if Input.trigger?(Input::C) or Input.trigger?(Input::B) or
Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN) or
Input.trigger?(Input::LEFT) or Input.trigger?(Input::RIGHT)
Input.trigger?(Input::X) or Input.trigger?(Input::Y)
@card_next.togle_picture
@card_now.dispose
@card_next.dispose
@interupt = 0
@phase = 9
return
end
end
@interupt = 0
end
end
Prety long huh?, Okey this is some bug that might/must be apear
1. somethimg error with disposed xxx :
then you are just to decide the right time to dispose @cards or @cards_in_hand
2. same card, lost,etc :
Maybe the problem is at shuffle def or around phase 2,3
3. the prize is continuosly multiyply :
You shoul delete some part around phase 11 or interupt def
Okey i short, I wait your fixing so we all have a nice Scene_Poker