Commit aa607677 authored by zh99998's avatar zh99998

replay初步

parent a3afe1d2
......@@ -338,11 +338,7 @@ class Action
super(from_player, from_pos, nil, card, nil, position)
end
end
class Ignored < Action
def initialize(str)
@str = str
end
end
class ViewDeck < Action; end
class Unknown < Action
def initialize(str)
@str = str
......
......@@ -207,7 +207,7 @@ class Action
when "卡组洗切", "切洗卡组"
Shuffle.new from_player
when "查看卡组"
Ignored.new "查看卡组"
ViewDeck.new from_player
when "将顶牌放回卡组底部"
ReturnToDeckBottom.new(from_player, :deck)
when /抽取\((\d+)\)张卡/
......
......@@ -106,7 +106,7 @@ class Game_Event
class NewRoom
def self.parse(info)
id, x, player1, player2 = info.split(",", 4)
room = Room.new(id)
room = Room.new(id.to_i)
room.player1 = User.parse(player1)
room.player2 = User.parse(player2)
self.new room
......
......@@ -33,7 +33,7 @@ class Iduel < Game
send(1, @key, checknum("UPINFOMSG", @session))
end
def host(name, password="", lv=0, color = 0)
send(6, @key, name, password, checknum("JOINROOMMSG", @session + name + password + "0"), 0, color, lv, 0, nil, nil) #TODO:v.ak, v.al
send(6, @key, name, password, checknum("JOINROOMMSG", @session + name + password + "0"), 0, color, lv, 0, 0, 0) #TODO:v.ak, v.al
end
def join(room, password="")
send(6, @key, room.id, password, checknum("JOINROOMMSG", @session + room.id.to_s + password + "1"),1)
......@@ -49,13 +49,15 @@ class Iduel < Game
end
end
def action(action)
send(2, "#{checknum("RMSG", @session)}@#{@key}", "#{action.escape}鈻娾枈鈻�00000") if @room.include? @user#TODO:iduel鏍¢獙瀛椾覆
send(2, "#{checknum("RMSG", @session)}@#{@key}", "#{action.escape}▊▊▊mycard") if @room.include? @user#TODO:iduel校验字串
end
def exit
send(11, @key, checknum("ULO", "#{@session}"))
@recv.exit
@conn.close
@conn = nil
if @conn
send(11, @key, checknum("ULO", "#{@session}"))
@conn.close
@conn = nil
end
end
......
class User
attr_accessor :level, :exp
def self.parse(info)
info =~ /(.+)\((\d+)\)/
new $2.to_i, $1
if info =~ /(.+)\((\d+)\)/
new $2.to_i, $1
else
nil
end
end
def initialize(id, name = "", level = nil, exp = nil)
@id = id
......
......@@ -207,7 +207,7 @@ class Action
when "卡组洗切", "切洗卡组"
Shuffle.new from_player
when "查看卡组"
Ignored.new "查看卡组"
ViewDeck.new "查看卡组"
when "将顶牌放回卡组底部"
ReturnToDeckBottom.new(from_player, :deck)
when /抽取\((\d+)\)张卡/
......
class Replay
ReplayPath = 'replay'
LastReplay = 'lastreplay.txt'
def initialize(filename=LastReplay)
@file = open(File.expand_path(filename, ReplayPath), 'w')
end
def add(action)
action = action.escape if action.is_a? Action
@file.write action + "\n"
end
def save(filename="#{Time.now.strftime("%Y-%m-%d_%H:%M-%S")}_#{$game.room.player1.name}(#{$game.room.player1.id})_#{$game.room.player2.name}(#{$game.room.player2.id}).txt")
close
File.rename(@file.path, File.expand_path(filename, ReplayPath))
end
def close
@file.close
end
end
......@@ -2,7 +2,7 @@ class Room
Color = [[0,0,0], [255,0,0], [0,255,0], [0,0,255], [255, 165, 0]]
extend Cacheable
attr_accessor :id, :name, :player1, :player2, :private, :color, :forbid
def initialize(id, name="", player1=nil, player2=nil, private=false, color=[0,0,0], session = nil, forbid = nil)
def initialize(id, name="等待更新", player1=nil, player2=nil, private=false, color=[0,0,0], session = nil, forbid = nil)
@id = id
@name = name
@player1 = player1
......
......@@ -13,6 +13,7 @@ class Scene_Duel < Scene
require_relative 'card'
require_relative 'deck'
require_relative 'action'
require_relative 'replay'
require_relative 'game_card'
require_relative 'game_field'
require_relative 'window_roomchat'
......@@ -34,6 +35,7 @@ class Scene_Duel < Scene
Surface.blit(@background, 0, 0, 0, 0, $screen, 0, 0)
init_game
init_replay
@player_lp_window = Window_LP.new(0,0, @room.player1, true)
@opponent_lp_window = Window_LP.new(360,0, @room.player2, false)
......@@ -47,11 +49,18 @@ class Scene_Duel < Scene
@chat_window = Window_RoomChat.new(@cardinfo_window.x, @cardinfo_window.height, 1024-@cardinfo_window.x, 768-@cardinfo_window.height)
create_action_window
super
end
def create_action_window
@player_field_window.action_window = Window_Action.new
end
def init_replay
@replay = Replay.new
end
def save_replay
@replay.save if @replay
end
def init_game
$game.player_field = Game_Field.new @deck
$game.opponent_field = Game_Field.new
......@@ -108,6 +117,11 @@ class Scene_Duel < Scene
def handle_game(event)
case event
when Game_Event::Action
if event.action.instance_of?(Action::Reset) and event.action.from_player
save_replay
init_replay
end
@replay.add event.str
str = event.str
if str =~ /^\[\d+\] (?:●|◎)→(.*)$/m
str = $1
......@@ -144,4 +158,8 @@ class Scene_Duel < Scene
yield
$screen.update_rect(x, y, width, height)
end
def terminate
save_replay
super
end
end
\ No newline at end of file
......@@ -40,7 +40,7 @@ class Scene_Hall < Scene
when Key::RETURN
@active_window.clicked
when Key::F2
$game.host
$game.host("test")
@joinroom_msgbox = Widget_Msgbox.new("创建房间", "正在等待对手")
when Key::F3
$game.join '192.168.0.103'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment