Tabletop-Simulator

Deck.split() 怪異

  • August 28, 2020

所以,我試著拿一副牌,把它分成幾堆,然後把另一堆牌中的每一個洗牌。split() 函式是完美的,因為我希望這些樁最終彼此達到 90*。所以腳本到目前為止是這樣工作的:

  1. 從他們所在的區域(套牌和棄牌區)中取出兩個套牌
  2. 數數“棄牌”牌組中的牌
  3. 按該數量拆分主甲板
  4. 將每張“丟棄”卡移動到每一堆中
  5. 洗牌

到目前為止,一切都很好。遊戲本身期望“小”層位於底部。不過,使用 split() 函式時,它的行為有點奇怪 - 計數有點奇怪。在我的測試設置中(以及遊戲將如何開始),我在主牌組中有 48 張牌,其中 5 張牌從“棄牌”牌組中分離出來。這導致將主甲板分成 5 堆,分別為 10、10、10、9、9。

我得到了那個大小的堆,但是如果我使用 for 循環來獲取結果表的哪個索引具有哪個計數,我會得到以下結果 - 索引 1、2 和 5 有 10 張卡片,而 3 和 4 有 9 張卡片。甚至更多令人抓狂的是,經過大量測試,我發現索引 1 是倒數第二堆,而索引 5 是最底部的一堆!樁從底部倒數第二個向上計數,然後從頂部(即索引 4)繞回到底部!

複雜的事實是,任何一副牌中的牌張數量在遊戲中可能會有所不同(更多的“牌組”牌要分裂,或者更多的“丟棄”牌迫使更多的牌堆成堆),所以我想嘗試避免某種駭人聽聞的解決方案。

有人知道發生了什麼嗎?關於如何以我想要的方式獲得東西的任何建議?使用程式碼粘貼bin:https ://pastebin.com/Q7V0y1ET

為此,我想出了兩種解決方案——一種聰明,一種實用。

聰明第一:

獲取將使拆分不均勻的餘數(因此剩餘=deck1.getQuantity() % 拆分)。如果餘數不為 0,則取那麼多張牌並將它們放在其他地方(洗牌後,我只是將它們放在甲板 2 的頂部)。拆分甲板一。將卡片放回適當的堆(在 TTS 的奇怪情況下,這將是 i=splits-1, 1, -1 do)。

我遇到的這個問題,它確實按預期工作,是 TTS 的奇怪物理,一堆堆卡在彼此的頂部,想要合併成一個牌組。在載入保存的遊戲時,我總是會得到 2 堆(一個是直的,一個是 90 度的)。我有時也會抽一張牌,然後在兩堆牌之間進行某種牌組合併,否則這兩堆牌之間會以 90 度角隔開。

這導致了實用(且簡單)的解決方案:

製作一個輔助容器(在這種情況下,您可以將其稱為“玩家甲板堆”)適當地拆分甲板 1。將生成的堆載入到容器中,留下底部的堆(因此,我們再次使用 for i=splits-1, 1, -1 do)。

您總是希望有一堆在遊戲中,並且無論出於何種原因,具有更多卡片的一堆最終都在底部(儘管底部的一堆將是最高的索引,而倒數第二個是最低的)。似乎像魅力一樣工作。

我的建議:

在你接受的東西上要自由,在你發出的東西上要保守

換句話說,不要假設堆棧的順序和大小。

  1. 將對堆棧的引用放入數組中,
  2. 按大小對該數組進行排序,
  3. 將排序後的數組的元素按該順序放在彼此的頂部。

可能的原因(未經測試!):

這兩行程式碼突然出現在我身上:

for i=1, splits do
   print(i, " = ", deck1split[i].getQuantity())

電腦通常從零開始計數。桌面模擬器可能試圖通過為您包裝數組索引來“幫助”您。這是有道理的,索引 5 實際上是索引 0,它位於堆的底部,長度為 10。如果你數數會發生什麼for i=0, splits-1

splits-1如果可行,那麼一個更簡單的解決方案是從零倒數。介意測試這是否工作嚴格,具有各種大小的樁,可被分割數整除和不可分割。

引用自:https://gaming.stackexchange.com/questions/374772