前几天接触了一下自走棋,发现这游戏有毒= =。 虽然作为新手菜鸡被虐的不要不要的,但是依然乐此不疲....
可惜的是虽然大概的机制玩过Dota 2的同学都懂,但是某些游戏机制是巨鸟多多独创的,而且并未说明过,除了知道有8位玩家共享棋池,攻击/被攻击都能回蓝,每轮会抽牌,每5轮野怪,大家觉得这似乎是一个纯随机游戏,技能释放完全看脸,回蓝也完全看脸.....
作为非酋的我实在不能忍.....这真的是一个概率游戏?正好逛github的时候发现有人上传了代码,于是去瞅了瞅。
虽然我Lua语法不太熟,但是作者写的注释很全而且意外的好懂.......以至于我这种弱鸡也能从代码发现一点东西,拿来和大家分享一下~
棋池大小与棋子总数
首先,需要明确的是自走棋游戏规则中,每轮抽牌是先根据当前人口的概率分布,先随机选择棋子的稀有度,再从这个稀有度的所有棋子中随机抽出一个棋子。
举个例子,比如在一轮抽牌中我抽到了1个2块钱的月骑,那么实际的过程是:
- 我抽到了一个2块钱的棋子
- 我从所有2块钱棋子组成的棋池里抽到了月骑
彩蛋环节
第一步中决定概率的是你的人口(科技等级),不过在这之前,有两个彩蛋,作者称之以为SSR卡........就是ssr_ck和ssr_nec,似乎是特殊版的混沌骑士和特殊版的死灵法师。
function RandomDrawChessNew(team_id)
local h = TeamId2Hero(team_id)
local this_chess = nil
local ran = RandomInt(1,100)
local chess_level = 1
local curr_per = 0
local hero_level = h:GetLevel()
local table_11chess = {}
for _,chess in pairs(GameRules:GetGameModeEntity().mychess[team_id]) do
if string.find(chess.chess,'11') then
table.insert(table_11chess,string.sub(chess.chess,1,-3))
end
end
local ran1 = RandomInt(1,10000) %随机一个1~10000的数1
local ran2 = RandomInt(1,10000) %随机一个1~100000的数2
if h:GetLevel() >= 7 and ran1 <= 1 and ran2 <= 1 then %如果人口在7以上,且两个随机数都是1,随机抽SSR卡池中的卡
this_chess = GameRules:GetGameModeEntity().chess_list_ssr[RandomInt(1,table.maxn(GameRules:GetGameModeEntity().chess_list_ssr))]
else
if GameRules:GetGameModeEntity().chess_gailv[hero_level] ~= nil then
for per,lv in pairs(GameRules:GetGameModeEntity().chess_gailv[hero_level]) do
if ran>per and curr_per<=per then
curr_per = per
chess_level = lv
end
end
end
-- this_chess = GameRules:GetGameModeEntity().chess_list_by_mana[chess_level][RandomInt(1,table.maxn(GameRules:GetGameModeEntity().chess_list_by_mana[chess_level]))]
this_chess = DrawAChessFromChessPool(chess_level, table_11chess)
end
return this_chess
end
转载自原文链接, 如需删除请联系管理员。
原文链接:从自走棋代码分析游戏机制--棋池、回蓝、目标判断、掉落概率与新英雄,转载请注明来源!
相关推荐