到底什麼叫做【給予多個角色隨機固定數量的人物代碼】?
在解釋以前,請各位先看看五月初的這則討論,一名玩家發現,在同陣營、同名字和玩家、進入房間順序沒有改變的情況下,系統對於人物代碼的儲存有一定順序。
有管理員更進一步提出,戰鬥結束後直接按再玩一次,這兩場戰鬥中,首次設定的隨機變數會保持一樣。
不久之後,又有玩家發現,在同陣營、同名字以及玩家、進入房間順序沒有改變的情況下,設定多個人物出生點,他們的重生位置也會有一定的順序。
於是作者我就發想了一個問題,既然人物出生點不會隨機,那是否有其他方法可以將不同的能力隨機分配到不同的玩家身上呢?沒錯,我們終於將主題帶回到【給予多個角色固定數量且隨機的人物代碼】了。
首先要處理的是玩家,因為我沒有朋友,所以如下圖中新增6個電腦人物,利用變數 a 命名為[1,2,3,4,5,6],同時令c=a,再設定6個map.{c},這樣就完成玩家與地圖位置的準備。
從下圖可知,這個動作重覆五次(加上第一次總共會做六次),其中c是一個暫時代表a的變數,動作全部完成後,就會產生以下六個變數:
map.1 => 坐標(20,20)
map.2 => 坐標(21,20)
map.3 => 坐標(22,20)
map.4 => 坐標(23,20)
map.5 => 坐標(24,20)
map.6 => 坐標(25,20)
再來就可以將玩家一一指定到對應的位置上了,這裡一樣使用到了變數命名這個強大的功能,產生random.1、random.2....random.6等6個內容隨機為1~6的變數。
例如:
random.1 => 5
random.2 => 3
random.3 => 2
random.4 => 3
random.5 => 3
random.6 => 1
可是瑞凡,這樣變數內容會重複阿!
不用擔心,圖中的Product & Sum 就是用來解決這個問題的。
Product
Product = 1*Product*random.{a}
Product 也就是 每一個random.{a}的乘積
Sum
Sum = 0+Sum+*random.{a}
Sum 意味著 每一個random.{a}的總和
如果所有的random都不重覆,其總和必定是21(1+2+3+4+5+6)
有了這兩個數據,我們就可以判別隨機跑出的六個random.{a},是否有所重複:
if (Product != 720) or (Sum != 21) then {
a=6
Product =1
Sum =0
}
讓隨機對位可以重新開始執行,直到產生不重複的六個隨機變數為止。
得到六個不重複且隨機排列的random.{a}之後就好辦了,把玩家塞進去!
執行完上面這些有點繁瑣的程序之後,再為被隨機分配到位置上的每個玩家儲存代碼,就可以完成隨機分配職業(或能力)的效果啦!
再也不會有人搶著要當銀狼的情況發生了www
簡單説明一下:
回覆刪除筆者隨機生成了6個變數,範圍是1~6,
為了確保不重覆,
6個變數必須符合以下條件,
一:6個變數的積是6!=720
二:6個變數之和是21
當符合以上全部條件就可以確保不重覆,
反之,
就代表有重覆了。
可是這樣還是有可能生成重複的排列組合
刪除像是[1,6,5,3,2,4]重複出現,重複檢查
生成時間就會變長
運氣不好的話wwww