Oct 24 2009
實作Lua Closure二合一洗牌發牌機

(圖片來源:maniacworld.com)
亂數 (Randomness),是每一位程式設計者們熟悉又親切的好朋友,無論我們開發製作的是哪一種類型的遊戲,亂數機制總是在遊戲設計程序與撰寫程式碼的過程中,扮演著不可或缺的重要角色。亂數最重要的用途,就是提供遊戲世界中必要的「不確定性」,只要能夠將這份「不確定性」的設計機制運用得宜,就可以為玩家們帶來許多驚喜感與樂趣元素。
然而,有許多時候,亂數的產生並不只是使用 rand() 函式般單純容易而已。在某些遊戲機制裡,無邊無際的亂數數值,並不能滿足程式設計者或企畫設計者所想達到的目標——我們需要的是「亂中有序」——能夠在某個限定範圍之內產生亂數。
何謂「亂中有序」?撲克牌遊戲就是一個最好的實例。撲克牌由 4 種花色與 13 種數字,組合成 52 張「牌組」。而「洗牌」(Shuffle) 動作可以定義為:在一組有限的集合元素內,進行亂數排列的程序。只要將牌組洗完之後,就可以按照牌堆的排列順序,開始一張張地進行「發牌」動作了。
對於程式設計者來說,不論是使用哪一種程式語言,要實作出洗牌與發牌的功能都不是件太困難的事情。假設,我們可以使用 Lua 語言來實作洗牌發牌機,是否能夠創造出什麼樣有趣的變化?
