嘎姆遊刊是嘎姆擂台(gamelet.com)提供給玩家們發表論文、分享心得的園地。歡迎玩家們自由投稿,在嗄姆的歷史上留下自己的足跡。

2016年6月12日 星期日

【同人製作技術分享】給予多個角色固定數量且隨機的人物代碼

《文/筱依

標題是哪個星球的語言?
到底什麼叫做【給予多個角色隨機固定數量的人物代碼】?

在解釋以前,請各位先看看五月初的這則討論,一名玩家發現,在同陣營、同名字和玩家、進入房間順序沒有改變的情況下,系統對於人物代碼的儲存有一定順序。

有管理員更進一步提出,戰鬥結束後直接按再玩一次,這兩場戰鬥中,首次設定的隨機變數會保持一樣。

不久之後,又有玩家發現,在同陣營、同名字以及玩家、進入房間順序沒有改變的情況下,設定多個人物出生點,他們的重生位置也會有一定的順序。

於是作者我就發想了一個問題,既然人物出生點不會隨機,那是否有其他方法可以將不同的能力隨機分配到不同的玩家身上呢?沒錯,我們終於將主題帶回到【給予多個角色固定數量且隨機的人物代碼】了。

首先要處理的是玩家,因為我沒有朋友,所以如下圖中新增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

※ 遊刊文章內容不代表嘎姆擂台官方立場 分享:

2 則留言:

  1. 簡單説明一下:
    筆者隨機生成了6個變數,範圍是1~6,
    為了確保不重覆,
    6個變數必須符合以下條件,
    一:6個變數的積是6!=720
    二:6個變數之和是21


    當符合以上全部條件就可以確保不重覆,
    反之,
    就代表有重覆了。

    回覆刪除
    回覆
    1. 可是這樣還是有可能生成重複的排列組合
      像是[1,6,5,3,2,4]重複出現,重複檢查
      生成時間就會變長
      運氣不好的話wwww

      刪除

好文就是要分享

贊助廣告