Project1

标题: 如何实现一个类似【炉石传说】获得手牌的流程 [打印本页]

作者: tottoyea    时间: 2015-8-4 17:19
标题: 如何实现一个类似【炉石传说】获得手牌的流程
因为脚本无能,组卡方面就通过仓库系统或者库存商店来实现……
但手牌方面就实在没办法了,请大触们指教,谢谢!

我的渣思路是这样的:
a.        战斗开始前,将所有物品栏内物品(全部为物品,无需考虑武器,防具)的id和数量复制到另一个数组(A)里;(通过事件呼叫脚本实现)
b.        0回合时,失去所有物品栏物品,从数组A中随机获得4件物品加入物品栏,同时更新数组A(去掉这4件);(通过战斗事件+脚本实现)
c.        每个回合开始:从数组A中随机获得1件物品加入物品栏,同时更新数组A(去掉这1件);(通过战斗事件+脚本实现)
d.        战斗过程中可通过技能手动获得x件物品(方法同c); (通过技能设置+脚本实现)
e.        当数组A中没有数组元素时,主角获得状态Y并-y生命(y为虚弱持续的回合数) (通过战斗事件+脚本实现)

之前在这里找到的【随机获取物品】脚本如下,但我不知道怎么在“随机奖品列表”那里修改……请参考,谢谢!

=begin

  說明:
  
  事件中執行腳本呼叫來獲取隨機物品
  
    random_gift(group, number)
    例:隨機獲得組:A中的三件物品:  random_gift(:A, 3)
   
=end

class Game_Interpreter
  Random_Gifts = { #隨機獎品列表
    :A => [:i1, :i2, :i3, :w1, :w2, :a1, :a3], #i物品,w武器,每個組用逗號隔開
    :B => [:i1_10, :w1_12, :a5_9], #這樣代表物品1~10,武器1~12,護甲5~9
    :C => [:w1_60]
      }
  # 設置開關號碼,當開關開啟時一定會獲取到不同的幾件物品
  # 設置為 nil 的話則總是有可能獲取到相同的物品
  Diff_Gift_Swth = 1
  def display_gift_text(name)
    $game_message.add("獲得:" + name)
  end
  #
  def random_gift(group, num)
    gifts = []
    Random_Gifts[group].each {|g|
      g = g.to_s
      type = g[0]=="i" ? 0 : g[0]=="w" ? 1 : 2
      if g.include?("_")
        a, b = g.scan(/\d+/)
        for i in a.to_i..b.to_i
          gift = which_random_gift(type)[i]
          gift ? gifts.push(gift) : (return report_random_gifts_crash(group, g))
        end
      else
        g =~ /(\d+)/
        gift = which_random_gift(type)[$1.to_i]
        gift ? gifts.push(gift) : (return report_random_gifts_crash(group, g))
      end
    }
    wait_for_message
    if Diff_Gift_Swth && $game_switches[Diff_Gift_Swth]
      gifts.sample(num).each {|g|
        $game_party.gain_item(g, 1)
        display_gift_text(g.name)
      }
    else
      num.times {
        g = gifts[rand(gifts.size)]
        $game_party.gain_item(g, 1)
        display_gift_text(g.name)
      }
    end
    $game_message.face_name = ''
    $game_message.face_index = 0
    $game_message.background = 0
    $game_message.position = 2
    wait_for_message
  end
  #
  def which_random_gift(type)
    case type
    when 0; $data_items
    when 1; $data_weapons
    when 2; $data_armors
    end
  end
  #
  def report_random_gifts_crash(group, g)
    msgbox("隨機禮物發生錯誤:Group :#{group}  Element :#{g}") if $TEST
  end
end

作者: tottoyea    时间: 2015-8-5 19:00
补充一下,所有事件的部分我应该都能搞定,只有脚本的部分实现不了……请帮忙,谢谢!
作者: Silentever    时间: 2015-8-8 03:45
如果技术允许的话,比起用道具栏做出“手牌”,还是直接新建立一个窗口更方便吧。

另外没太懂上面脚本是拿来做什么的,不过如果只是单纯的想从牌堆随机获取1个对象可以用下面的方法。
  1. card = deck(rand(deck.size))
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1