设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: 禾西
打印 上一主题 下一主题

[原创发布] 我們所處的是個一體兩面的世界!

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

21
发表于 2008-3-17 17:51:01 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
970
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

22
 楼主| 发表于 2008-3-17 18:02:48 | 只看该作者
你的初始化方法似乎比我的好(我是先開闢數組空間并賦值)

我沒有修改hash底層方法,因爲那樣子好像會引發數量超標的問題。
a = {1=>67}
b = {1=>55}
c = a.add(b) #=> 1=>122

轉換世界時候「附加」數量會引起數值錯誤吧?爲甚麼不直接替換?
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

23
发表于 2008-3-17 18:17:12 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
970
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

24
 楼主| 发表于 2008-3-17 18:18:34 | 只看该作者
當初主要寫那麽多是因爲想不到怎麼記錄全部世界加起來的數據
(不想寫hash的相加方法,因爲一直覺得會數量超標)

順手把您的那句return判斷偷了,優化速度
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-2-19
帖子
340
25
发表于 2008-3-18 06:13:37 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
970
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

26
 楼主| 发表于 2008-3-18 08:47:06 | 只看该作者
把以前用過的version移到這裏來
version 0.5
  1. class Game_Party
  2.   attr_accessor :world_id
  3.   VID = 0
  4.   #--------------------------------------------------------------------------
  5.   # ● 初始化对像
  6.   #--------------------------------------------------------------------------
  7.   alias ori_ini initialize
  8.   def initialize
  9.     #------------------------------------------------------------------------
  10.     # ● 世界數量 Array.new(n+1){[0,0,{},{},{}]}
  11.     #------------------------------------------------------------------------
  12.     @worlds = Array.new(99){[0,0,{},{},{}]}
  13.     @contraband = [nil,nil,{},{},{}]
  14.     @world_id = 1
  15.     ori_ini
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 世界之轉換 (n, source)
  19.   #     n        : 世界ID
  20.   #--------------------------------------------------------------------------
  21.   def world_transfer(n, sources = nil)
  22.     return if n == @world_id
  23.     $game_varibles[VID] = n unless VID.zero?
  24.     @worlds[@world_id] = [@gold, @steps, @items, @weapons, @armors]
  25.     @world_id = n
  26.     if sources != nil or n.zero?
  27.       if sources != nil
  28.         a = []
  29.         sources.each {|x| a.push(@worlds[x])}
  30.       elsif n.zero?
  31.         a = @worlds
  32.       end
  33.       a.each do |j|
  34.         break unless @worlds[@world_id][1].zero?
  35.         @worlds[@world_id][0] =[[@worlds[@world_id][0] + j[0], 0].max, 9999999].min
  36.         @worlds[@world_id][1] =[[@worlds[@world_id][1] + j[1], 0].max, 9999999].min
  37.         [2,3,4].each do |i|
  38.           j[i].each do |a,b|
  39.             unless @contraband[i][@world_id].nil?
  40.               next if @contraband[i][@world_id].include?(a)
  41.             end
  42.             next if @worlds[@world_id][i][a] == 99
  43.             @worlds[@world_id][i][a] = @worlds[@world_id][i][a].nil? ? b : [[@worlds[@world_id][i][a] + b, 0].max, 99].min
  44.           end
  45.         end
  46.       end
  47.     end
  48.     record = @worlds[@world_id]
  49.     @gold = record[0]
  50.     @steps = record[1]
  51.     @items = record[2]
  52.     @weapons = record[3]
  53.     @armors = record[4]
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● 世界之轉嫁 (n, fragment)
  57.   #     n        : 轉換的世界ID
  58.   #--------------------------------------------------------------------------
  59.   def world_shift(n, fragment)
  60.     return if n == @world_id
  61.     $game_varibles[VID] = n unless VID.zero?
  62.     bias = fragment[0]
  63.     present = [@gold, @steps, @items, @weapons, @armors]
  64.     past = @worlds[@world_id]
  65.     discrepancy = [0,0,{},{},{}]
  66.     discrepancy[0] = (present[0] - @worlds[@world_id][0])
  67.     discrepancy[1] = (present[1] - @worlds[@world_id][1])
  68.     [2,3,4].each do |i|
  69.       present[i].each do |a, b|
  70.         c = @worlds[@world_id][i][a]
  71.         discrepancy[i] = b - (c.nil? ? 0 : c)
  72.       end
  73.     end
  74.     fragment.each do |j|
  75.       @worlds[j][0] = [[@worlds[j][0] + (discrepancy[0]/fragment.size).to_i, 0].max, 9999999].min
  76.       @worlds[j][0] = [[@worlds[j][0] + (discrepancy[0]%fragment.size), 0].max, 9999999].min if j == bias
  77.       @worlds[j][1] = [[@worlds[j][1] + (discrepancy[1]/fragment.size).to_i, 0].max, 9999999].min
  78.       @worlds[j][1] = [[@worlds[j][1] + (discrepancy[1]%fragment.size), 0].max, 9999999].min if j == bias
  79.       [2,3,4].each do |k|
  80.         discrepancy.each do |d, e|
  81.           next if @worlds[j][k][d] == 99
  82.           @worlds[j][k][d] = @worlds[j][k][d].nil? ? (e/fragment.size).to_i : [[@worlds[j][k][d] + (e/fragment.size).to_i, 0].max, 99].min
  83.           @worlds[j][k][d] = [[@worlds[j][k][d] + (e%fragment.size), 0].max, 99].min if j == bias
  84.         end
  85.       end
  86.     end
  87.     @worlds[@world_id] = [0, 0, {}, {}, {}]
  88.     @world_id = n
  89.     record = @worlds[@world_id]
  90.     @gold = record[0]
  91.     @steps = record[1]
  92.     @items = record[2]
  93.     @weapons = record[3]
  94.     @armors = record[4]
  95.   end
  96. end
复制代码

version 0.3
  1. class Game_Party
  2.   attr_accessor :world_id
  3.   VID = 0
  4.   #--------------------------------------------------------------------------
  5.   # ● 初始化对像
  6.   #--------------------------------------------------------------------------
  7.   alias ori_ini initialize
  8.   def initialize
  9.     @worlds = Array.new(2){[0,0,{},{},{}]}
  10.     @contraband = [nil,nil,{},{},{}]
  11.     @world_id = 1
  12.     ori_ini
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 世界之轉換 (n, source)
  16.   #     n        : 世界ID
  17.   #--------------------------------------------------------------------------
  18.   def world_transfer(n, sources = nil)
  19.     return if n == @world_id
  20.     $game_varibles[VID] = n unless VID.zero?
  21.     @worlds[@world_id] = [@gold, @steps, @items, @weapons, @armors]
  22.     @world_id = n
  23.     if @worlds[@world_id].nil?
  24.       (n - @worlds.size + 1).times do
  25.         @worlds << [0,0,{},{},{}]
  26.       end
  27.     end
  28.     if sources != nil or n.zero?
  29.       if sources != nil
  30.         a = []
  31.         sources.each {|x| a.push(@worlds[x])}
  32.       elsif n.zero?
  33.         a = @worlds
  34.       end
  35.       a.each do |j|
  36.         break unless @worlds[@world_id][1].zero?
  37.         @worlds[@world_id][0] =[[@worlds[@world_id][0] + j[0], 0].max, 9999999].min
  38.         @worlds[@world_id][1] =[[@worlds[@world_id][1] + j[1], 0].max, 9999999].min
  39.         [2,3,4].each do |i|
  40.           j[i].each do |a,b|
  41.             unless @contraband[i][@world_id].nil?
  42.               next if @contraband[i][@world_id].include?(a)
  43.             end
  44.             next if @worlds[@world_id][i][a] == 99
  45.             @worlds[@world_id][i][a] = @worlds[@world_id][i][a].nil? ? b : [[@worlds[@world_id][i][a] + b, 0].max, 99].min
  46.           end
  47.         end
  48.       end
  49.     end
  50.     record = @worlds[@world_id]
  51.     @gold = record[0]
  52.     @steps = record[1]
  53.     @items = record[2]
  54.     @weapons = record[3]
  55.     @armors = record[4]
  56.   end
复制代码

不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-2-19
帖子
340
27
发表于 2008-3-18 17:31:50 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
970
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

28
 楼主| 发表于 2008-3-18 17:44:21 | 只看该作者
1.我不想打破RM的默認系統。突破數量非我所願,因爲會出現很多問題。不過你可以修改裏面的數字從而突破物品數量限制。

其他,按要求更新了 world_partition 方法
不過……有沒有錯誤就不知道了 囧rz
(邏輯完全壞掉……這個腳本自己快看不懂了)

至於separate打錯就不理了。
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-2-19
帖子
340
29
发表于 2008-3-18 20:00:11 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
970
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

30
 楼主| 发表于 2008-3-18 20:19:24 | 只看该作者
1.
主要是大量[[?,0].max].min語句弄到亂七八糟……囧rz
如果允許數量超標的話,當然語句會容易很多。
2.
原本與現在其實值的是用來分割的世界

原来:值得是最初建立時候記錄的數據
现在:就是現在的數據

兩者的差决定量物品與金錢的消耗與增加量。這些「量」分別由分割後的世界各自承擔。
也就是回答你這個問題:
多个世界合并后物品使用了一些,然后又回到某个世界,物品消耗算哪个世界的?!

禾西不擅長中文,表達意思大概有時會一塌糊塗……
(當然在英語也大概差不多……==|||)

$game_varibles[VID]其實就是記錄了你「現在」所處的世界Id,只有一個而已。

3.因爲原本很簡單……所以範例就免了。現在的話我會嘗試做一個範例(但是貌似很無聊很無聊)

4.吞噬太多創意(神思的,沉影的……)
所以……就這樣了|||
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-29 15:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表