mirror of
https://github.com/Smaug123/hanabi-server
synced 2025-10-07 09:38:40 +00:00
Prepare for upload to Github
This commit is contained in:
@@ -1,20 +1,58 @@
|
||||
import enum
|
||||
import random
|
||||
|
||||
|
||||
@enum.unique()
|
||||
@enum.unique
|
||||
class HanabiColour(enum.Enum):
|
||||
Red = enum.auto()
|
||||
Green = enum.auto()
|
||||
White = enum.auto()
|
||||
Yellow = enum.auto()
|
||||
Blue = enum.auto()
|
||||
Red = 1
|
||||
Green = 2
|
||||
White = 3
|
||||
Yellow = 4
|
||||
Blue = 5
|
||||
|
||||
|
||||
class HanabiCard:
|
||||
class HanabiCard(dict):
|
||||
def __str__(self):
|
||||
return "{} {}".format(self.rank, self.colour)
|
||||
|
||||
def __init__(self):
|
||||
self.colour = None
|
||||
self.rank = None
|
||||
def __repr__(self):
|
||||
return "HanabiCard({}, {})".format(self.get('colour'), self.get('rank'))
|
||||
|
||||
def __init__(self, colour=None, rank=None):
|
||||
dict.__init__(self)
|
||||
self['colour'] = colour
|
||||
self['rank'] = rank
|
||||
|
||||
|
||||
def _random_derangement(n):
|
||||
"""
|
||||
Return a tuple random derangement of (0, 1, 2, ..., n-1).
|
||||
"""
|
||||
while True:
|
||||
v = list(range(n))
|
||||
for j in range(n - 1, -1, -1):
|
||||
p = random.randint(0, j)
|
||||
if v[p] == j:
|
||||
break
|
||||
else:
|
||||
v[j], v[p] = v[p], v[j]
|
||||
else:
|
||||
if v[0] != 0:
|
||||
return tuple(v)
|
||||
|
||||
|
||||
def get_deck_arrangement():
|
||||
"""
|
||||
Return a derangement of the cards in the deck.
|
||||
"""
|
||||
deck_length = (3 + 2 * 3 + 1) * 5
|
||||
all_cards = [HanabiCard(colour=c, rank=r)
|
||||
for c in HanabiColour.__members__
|
||||
for r in range(1, 6)]
|
||||
all_cards.extend([HanabiCard(colour=c, rank=r)
|
||||
for c in HanabiColour.__members__
|
||||
for r in range(1, 5)])
|
||||
all_cards.extend([HanabiCard(colour=c, rank=1)
|
||||
for c in HanabiColour.__members__])
|
||||
derangement = _random_derangement(deck_length)
|
||||
return [all_cards[i] for i in derangement]
|
Reference in New Issue
Block a user