[英]How do you shuffle a non-standard deck of cards?
我正在編寫一個程序來玩UNO游戲。 在UNO牌組中,有些牌是重復的,因此我不能僅列出整數。 我必須使用對象。 我計划在平台上使用LinkedList,但我知道LinkedList上的隨機播放速度非常慢。
我的問題是,我應該...
這不是為了功課; 這是為了幫助玩得開心:)
您可以用普通整數表示卡。 如果整數代表一張卡的類型,並且Uno有多張相同類型的卡,則請多次使用與該卡對應的整數。
洗牌和交易很容易。
要開始游戲,請設置一個固定大小的,整數類型的啞數組(不需要應用任何奇特的鏈表或Arraylist),該數組可以容納整個套牌(大小= N)。 用代表Uno牌組的整數(包括代表重復卡的重復整數)填充此數組。 將UNDEALT設置為N。
要隨機播放,請在適當的時間(100分鍾)內執行以下代碼:
1) Pick a random number from 1 to UNDEALT, R.
2) Exchange the the first array slot with the Rth slot.
交易,處理:
1) Give out the card in the UNDEALT slot.
2) Decrement UNDEALT.
您也可以使用更高級的數據結構來完成所有這些操作,但是沒有任何意義。 鑒於涉及的信息總數為100個數據項,除非您做一些愚蠢的愚蠢的工作,否則它將比人們更快。 但是我的座右銘是:如果簡單可行,那就堅持簡單。
一些想法:
為此,沒有理由堅持使用LinkedList。 您也可以使用ArrayList輕松獲得第一張和最后一張卡片。 實際上,看來ArrayList的性能對於刪除單個元素更好 。
您也可以將具有相同整數的元素數組改組。 與之類似,沒有理由不能對這樣的數組使用混洗算法 :
cards[] = {1, 1, 1, 1, 2, 3, 4, 5, 6, 6}
,其中1 =“ Wild”,2 =“ Draw Four”或您擁有什么。
我認為,使用Array(List)將使其最容易做到。 這里的區別是使用數組的值作為游戲玩法,而不是使用它們的鍵來確定卡的種類。
如果願意,您可以對對象執行相同的操作; 您可以根據數組索引對數組進行混洗,但是可以使用數組中的值(代表卡的對象)來了解卡的實際含義。
編輯:顯然Java會為您洗牌! http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle(java.util.List)
如果您不經常洗牌,那就不會那么慢。
隨機播放的一種方法是用另一張隨機地排列第一張卡。 使用LinkedList並不是那么慢。 另一方面,將其復制到ArrayList或從ArrayList復制將需要一些時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.