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

Project1

 找回密码
 注册会员
搜索
查看: 898|回复: 6
打印 上一主题 下一主题

物品自动排列系统

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

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-4-6
帖子
39
跳转到指定楼层
1
发表于 2009-6-12 08:00:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv1.梦旅人

梦·贤者

梦石
0
星屑
50
在线时间
1141 小时
注册时间
2007-12-15
帖子
4100
2
发表于 2009-4-12 08:05:14 | 只看该作者
-屏蔽-
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-4-6
帖子
39
3
 楼主| 发表于 2009-4-12 08:17:19 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
4
发表于 2009-4-12 13:36:17 | 只看该作者
能做出 #2 的话就肯定能做出 #1 了~
我想问下你具体想要如何排序呢?按价钱?拼音首字母?还是不同的标准针对不同的物品类型(比如物品按可使用、不可使用排,武器按攻击力排)?

#3 很简单,直接在 draw_text 的时候居中就行了,等你答复了我一起发上来吧
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-4-6
帖子
39
5
 楼主| 发表于 2009-4-12 20:13:16 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
6
发表于 2009-4-13 13:20:33 | 只看该作者
自动排序,现在加了按 ID、名称和价格三种排序方式
进入物品列表按 F5 就能看到效果了~
下面是脚本,插到物品分类系统的下面
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================
  4. # 复杂物品分类作者:柳柳
  5. #
  6. # 修改 by 紫苏
  7. # 新增内容:
  8. # 自动排序物品(按ID、名称或价格)
  9. #==============================================================================

  10. #==============================================================================
  11. # ■ 排序算法
  12. #==============================================================================
  13. def insertionSortA(arr, offset = 0, len = arr.length)  
  14.   for i in offset + 1...len
  15.     j, temp = i - 1, arr[i]
  16.     while j >= offset && (arr[j] <=> temp) > 0
  17.       arr[j + 1] = arr[j]
  18.       j -= 1
  19.     end
  20.     arr[j + 1] = temp
  21.   end
  22. end

  23. def insertionSortD(arr, offset = 0, len = arr.length)  
  24.   for i in offset + 1...len
  25.     j, temp = i - 1, arr[i]
  26.     while j >= offset && (arr[j] <=> temp) < 0
  27.       arr[j + 1] = arr[j]
  28.       j -= 1
  29.     end
  30.     arr[j + 1] = temp
  31.   end
  32. end

  33. def quickSortA(arr, left = 0, right = arr.length - 1)
  34.   return  if left >= right
  35.   if right - left < 10
  36.     insertionSortA(arr, left, right + 1)
  37.     return
  38.   end
  39.   
  40.   pivot, i, j = arr[left], left, right
  41.   while i < j
  42.     while i < j && (arr[j] <=> pivot) >= 0
  43.       j -= 1
  44.     end
  45.     if i < j
  46.       arr[i] = arr[j]
  47.       i += 1
  48.     end
  49.     while i < j && (arr[i] <=> pivot) <= 0
  50.       i += 1
  51.     end
  52.     if i < j
  53.       arr[j] = arr[i]
  54.       j -= 1
  55.     end
  56.   end
  57.   arr[i] = pivot
  58.   quickSortA(arr, left, i - 1)
  59.   quickSortA(arr, i + 1, right)
  60. end

  61. def quickSortD(arr, left = 0, right = arr.length - 1)
  62.   return  if left >= right
  63.   if right - left < 10
  64.     insertionSortD(arr, left, right + 1)
  65.     return
  66.   end
  67.   
  68.   pivot, i, j = arr[left], left, right
  69.   while i < j
  70.     while i < j && (arr[j] <=> pivot) <= 0
  71.       j -= 1
  72.     end
  73.     if i < j
  74.       arr[i] = arr[j]
  75.       i += 1
  76.     end
  77.     while i < j && (arr[i] <=> pivot) >= 0
  78.       i += 1
  79.     end
  80.     if i < j
  81.       arr[j] = arr[i]
  82.       j -= 1
  83.     end
  84.   end
  85.   arr[i] = pivot
  86.   quickSortD(arr, left, i - 1)
  87.   quickSortD(arr, i + 1, right)
  88. end

  89. #==============================================================================
  90. # ■ module RPG
  91. #------------------------------------------------------------------------------
  92. #     追加物品之间的比较方式。
  93. #     sort_mode  : 排序方式(0 = ID, 1 = 名称, 2 = 价格)
  94. #==============================================================================
  95. $sort_mode = 0 if $sort_mode == nil
  96. $descending = 0 if $descending == nil

  97. module RPG
  98.   class Item
  99.     def <=>(item)
  100.       return case $sort_mode
  101.       when 0
  102.         self.id <=> item.id
  103.       when 1
  104.         self.name <=> item.name
  105.       when 2
  106.         self.price <=> item.price
  107.       end
  108.     end
  109.   end
  110.   class Weapon
  111.     def <=>(wep)
  112.       return case $sort_mode
  113.       when 0
  114.         self.id <=> wep.id
  115.       when 1
  116.         self.name <=> wep.name
  117.       when 2
  118.         self.price <=> wep.price
  119.       end
  120.     end
  121.   end
  122.   class Armor
  123.     def <=>(armor)
  124.       return case $sort_mode
  125.       when 0
  126.         self.id <=> armor.id
  127.       when 1
  128.         self.name <=> armor.name
  129.       when 2
  130.         self.price <=> armor.price
  131.       end
  132.     end
  133.   end
  134. end

  135. #==============================================================================
  136. # ■ Harts_Window_ItemTitle
  137. #------------------------------------------------------------------------------
  138. #  显示排序选项的窗口。
  139. #   基于原脚本的修改:让左手边分类选项栏文字居中。
  140. #==============================================================================

  141. class Harts_Window_ItemCommand < Window_Selectable
  142.   def draw_item(index, color)
  143.     self.contents.font.color = color
  144.     y = index * 32
  145.     self.contents.draw_text(4, y, self.contents.width - 8, 32,
  146.       @commands[index], 1)
  147.   end
  148. end

  149. #==============================================================================
  150. # ■ Harts_Window_ItemTitle
  151. #------------------------------------------------------------------------------
  152. #  显示分类物品列表的窗口。
  153. #   基于原脚本的修改:排序。
  154. #==============================================================================

  155. class Harts_Window_ItemList < Window_Selectable
  156.   @ascending = 0
  157.   def set_item(command, sort_mode = -1)
  158.     refresh
  159.     for i in 1...$data_items.size
  160.       if $game_party.item_number(i) > 0 and $data_items[i].desc == command
  161.         @data.push($data_items[i])
  162.       end
  163.     end
  164.     for i in 1...$data_weapons.size
  165.       if $game_party.weapon_number(i) > 0 and $data_weapons[i].desc == command
  166.         @data.push($data_weapons[i])
  167.       end
  168.     end
  169.     for i in 1...$data_armors.size
  170.       if $game_party.armor_number(i) > 0 and $data_armors[i].desc == command
  171.         @data.push($data_armors[i])
  172.       end
  173.     end
  174.     if sort_mode >= 0
  175.       if $sort_mode == sort_mode
  176.         $descending ^= 1
  177.       else
  178.         $sort_mode = sort_mode
  179.       end
  180.     end
  181.     $descending == 0 ? quickSortA(@data) : quickSortD(@data)
  182.     @item_max = @data.size
  183.     if @item_max > 0
  184.       self.contents = Bitmap.new(width - 32, row_max * 32)
  185.       self.contents.clear
  186.       for i in 0...@item_max
  187.         draw_item(i)
  188.       end
  189.     end
  190.   end
  191. end

  192. #==============================================================================
  193. # ■ Window_SortCommand
  194. #------------------------------------------------------------------------------
  195. #  显示排序选项的窗口。
  196. #==============================================================================

  197. class Window_SortCommand < Window_Command
  198.   def draw_item(index, color)
  199.     self.contents.font.color = color
  200.     rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
  201.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  202.     self.contents.draw_text(rect, @commands[index], 1)
  203.   end
  204. end

  205. class Scene_Item
  206.   alias :main_original :main unless method_defined? :main_original
  207.   def main
  208.     @sort_window = Window_SortCommand.new(224, ["按物品 ID 排序", "按名称排序",
  209.       "按价格排序"])
  210.     @sort_window.visible = false
  211.     @sort_window.active = false
  212.     @sort_window.x = (640 - @sort_window.width) >> 1
  213.     @sort_window.y = (480 - @sort_window.height) >> 1
  214.     @sort_window.z = 1000
  215.     main_original
  216.     @sort_window.dispose
  217.   end

  218.   alias :update_original :update unless method_defined? :update_original
  219.   def update
  220.     @sort_window.update
  221.     if @sort_window.active
  222.       update_sort
  223.       return
  224.     end
  225.     update_original
  226.   end
  227.   
  228.   alias :update_itemlist_original :update_itemlist unless
  229.     method_defined? :update_itemlist_original
  230.   def update_itemlist
  231.     if Input.trigger?(Input::F5)
  232.       @itemlist_window.active = false
  233.       @sort_window.visible = true
  234.       @sort_window.active = true
  235.       $game_system.se_play($data_system.decision_se)
  236.       return
  237.     end
  238.     update_itemlist_original
  239.   end

  240.   def update_sort
  241.     if Input.trigger?(Input::B)
  242.       $game_system.se_play($data_system.cancel_se)
  243.       @itemlist_window.active = true
  244.       @sort_window.active = false
  245.       @sort_window.visible = false
  246.       return
  247.     end
  248.     if Input.trigger?(Input::C)
  249.       @itemlist_window.set_item(@itemcommand_window.commands[@command_index],
  250.         @sort_window.index)
  251.       $game_system.se_play($data_system.decision_se)
  252.       @itemlist_window.active = true
  253.       @sort_window.active = false
  254.       @sort_window.visible = false
  255.       return
  256.     end
  257.   end
  258. end
复制代码

效果图:

系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
41 小时
注册时间
2008-3-5
帖子
2072
7
发表于 2009-4-13 16:39:30 | 只看该作者
Window_Item的第57行加

@data.sort!{|a,b| a.name < b.name ? 1 : -1}

这样是按照名字排序,要ID排序就a.id,b.id,别的都自己改了

貌似这个问题我刚提过
你它囧一字母君谁记得……
当时那把剑离我的喉咙只有0.01工分。可是一柱香之后,这个女主人会深深的爱上我,虽然本人平生说了无数的谎话,可是这句最有效:“你应该这么做,我也应该死。
曾经有一取ID的机会放在我面前,我没有珍惜,等我失去的时候我才后悔莫及,人世间最痛苦的事莫过于此。你的剑在我的咽喉上割下去吧!不用再犹豫了!如果上天能够给我一个再来一次的机会,我绝对会取个汉字君。如果非要给这ID加点修饰的话,我希望是……红色加粗……

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-12 05:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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