簡體   English   中英

您如何洗牌非標准牌?

[英]How do you shuffle a non-standard deck of cards?

我正在編寫一個程序來玩UNO游戲。 在UNO牌組中,有些牌是重復的,因此我不能僅列出整數。 我必須使用對象。 我計划在平台上使用LinkedList,但我知道LinkedList上的隨機播放速度非常慢。

我的問題是,我應該...

  1. 完全避免使用LinkedList,而只需使用ArrayList
  2. 使用ArrayList或類似的東西,隨機播放,然后將內容放入LinkedList
  3. 構造一個ArrayList,然后制作我自己的改組例程(也就是不使用Random),將其添加到LinkedList中
  4. 不管怎樣,都隨機播放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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM