implemented more realistic card deck logic
This commit is contained in:
parent
436abc5ccb
commit
e74cf124ce
74
app.py
74
app.py
|
@ -8,7 +8,7 @@ app.secret_key = b'RoboRallyRolling'
|
||||||
|
|
||||||
random.seed(0)
|
random.seed(0)
|
||||||
|
|
||||||
moves = ['forward', 'forward x2', 'forward x3', 'backward', 'turn left', 'turn right', 'turn around']
|
moves = ['forward', 'backward', 'turn left', 'turn right', 'turn around']
|
||||||
|
|
||||||
class Game:
|
class Game:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -16,7 +16,10 @@ class Game:
|
||||||
self.processing_done = False # indicates whether all commands in the current round have been processed
|
self.processing_done = False # indicates whether all commands in the current round have been processed
|
||||||
|
|
||||||
self.comm_socket = socket.socket() # socket for communicating with the program controlling the robots
|
self.comm_socket = socket.socket() # socket for communicating with the program controlling the robots
|
||||||
|
try:
|
||||||
|
self.comm_socket.connect(('192.168.1.213', 1337))
|
||||||
|
except socket.error:
|
||||||
|
print("could not connect to robot control socket!")
|
||||||
|
|
||||||
def ready(self):
|
def ready(self):
|
||||||
# have all players chosen an action?
|
# have all players chosen an action?
|
||||||
|
@ -24,7 +27,9 @@ class Game:
|
||||||
|
|
||||||
def register_actions(self, player_id, actions):
|
def register_actions(self, player_id, actions):
|
||||||
if not player_id in self.action_stack.keys():
|
if not player_id in self.action_stack.keys():
|
||||||
|
print("registered actions: ", [str(a) for a in actions])
|
||||||
self.action_stack[player_id] = actions
|
self.action_stack[player_id] = actions
|
||||||
|
deck.return_cards(actions) # put cards back into the deck
|
||||||
self.processing_done = False
|
self.processing_done = False
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
|
@ -37,8 +42,16 @@ class Game:
|
||||||
current_actions = []
|
current_actions = []
|
||||||
for p in self.action_stack.keys():
|
for p in self.action_stack.keys():
|
||||||
current_actions += [(p, self.action_stack[p][i])]
|
current_actions += [(p, self.action_stack[p][i])]
|
||||||
print("actions in step {}: {}".format(i, ["robot {} action {}".format(c[0], c[1]) for c in current_actions]))
|
for c in current_actions:
|
||||||
time.sleep(1)
|
|
||||||
|
if c[0] == 0:
|
||||||
|
print("{}, {}\n".format(c[1].action, 11))
|
||||||
|
self.comm_socket.sendall("{}, {}\n".format(c[1].action, 11).encode())
|
||||||
|
elif c[0] == 1:
|
||||||
|
print("{}, {}\n".format(c[1].action, 14))
|
||||||
|
self.comm_socket.sendall("{}, {}\n".format(c[1].action, 14).encode())
|
||||||
|
data = self.comm_socket.recv(3)
|
||||||
|
time.sleep(0.5)
|
||||||
|
|
||||||
#self.comm_socket.send()
|
#self.comm_socket.send()
|
||||||
|
|
||||||
|
@ -59,9 +72,45 @@ class Card:
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "Card No. " + str(self.number) + " " + self.action + " " + str(self.priority)
|
return "Card No. " + str(self.number) + " " + self.action + " " + str(self.priority)
|
||||||
|
|
||||||
card_deck = {}
|
class CardDeck:
|
||||||
for i in range(0,20):
|
def __init__(self, n=20):
|
||||||
card_deck[i] = Card()
|
self.deck = {}
|
||||||
|
# generate cards
|
||||||
|
for i in range(0,n):
|
||||||
|
self.deck[i] = Card()
|
||||||
|
self.dealt = set()
|
||||||
|
self.discard_pile = set()
|
||||||
|
|
||||||
|
def draw_cards(self, n=1):
|
||||||
|
available = set(self.deck.keys()).difference(self.dealt)
|
||||||
|
#print("{} cards are available".format(len(available)))
|
||||||
|
|
||||||
|
if len(available) < n:
|
||||||
|
drawn = list(available) # give out remaining cards
|
||||||
|
#print("drawing remaining {} cards".format(len(drawn)))
|
||||||
|
self.dealt = self.dealt.union(drawn)
|
||||||
|
|
||||||
|
# put the cards from the discard pile back into the game
|
||||||
|
self.dealt = self.dealt - self.discard_pile
|
||||||
|
self.discard_pile = set() # reset the discard pile
|
||||||
|
|
||||||
|
# draw rest of cards
|
||||||
|
available = set(self.deck.keys()).difference(self.dealt)
|
||||||
|
#print("drawing another {} cards".format(n - len(drawn)))
|
||||||
|
drawn += random.sample(available, n - len(drawn))
|
||||||
|
else:
|
||||||
|
drawn = random.sample(available, n)
|
||||||
|
#print("cards drawn: {}".format(drawn))
|
||||||
|
|
||||||
|
self.dealt = self.dealt.union(drawn)
|
||||||
|
|
||||||
|
return [self.deck[i] for i in drawn]
|
||||||
|
|
||||||
|
def return_cards(self, cards):
|
||||||
|
self.discard_pile = self.discard_pile.union(set([c.number for c in cards]))
|
||||||
|
pass
|
||||||
|
|
||||||
|
deck = CardDeck()
|
||||||
|
|
||||||
class Player:
|
class Player:
|
||||||
MAX_PLAYERS = 3
|
MAX_PLAYERS = 3
|
||||||
|
@ -73,7 +122,7 @@ class Player:
|
||||||
|
|
||||||
self.max_cards = 9
|
self.max_cards = 9
|
||||||
|
|
||||||
self.player_hand = random.sample(list(card_deck.values()), self.max_cards)
|
self.player_hand = deck.draw_cards(self.max_cards)
|
||||||
print("current hand: ", [str(c) for c in self.player_hand])
|
print("current hand: ", [str(c) for c in self.player_hand])
|
||||||
|
|
||||||
self.action_count = 5
|
self.action_count = 5
|
||||||
|
@ -84,9 +133,8 @@ class Player:
|
||||||
else:
|
else:
|
||||||
print("max players reached!")
|
print("max players reached!")
|
||||||
|
|
||||||
|
|
||||||
def draw_new_cards(self):
|
def draw_new_cards(self):
|
||||||
self.player_hand += random.sample(list(card_deck.values()), self.max_cards - len(self.player_hand))
|
self.player_hand += deck.draw_cards(self.max_cards - len(self.player_hand))
|
||||||
|
|
||||||
players = {}
|
players = {}
|
||||||
game = Game()
|
game = Game()
|
||||||
|
@ -148,8 +196,10 @@ def hello_world():
|
||||||
i1 = int(request.form.get('drag')) # number of first card
|
i1 = int(request.form.get('drag')) # number of first card
|
||||||
i2 = int(request.form.get('drop')) # number of second card
|
i2 = int(request.form.get('drop')) # number of second card
|
||||||
|
|
||||||
card1 = card_deck[i1] # get card by number
|
card1 = deck.deck[i1] # get card by number
|
||||||
card2 = card_deck[i2]
|
card2 = deck.deck[i2]
|
||||||
|
|
||||||
|
print("swapping {} and {}".format(card1, card2))
|
||||||
|
|
||||||
j1 = player_hand.index(card1) # get index of card in the hand
|
j1 = player_hand.index(card1) # get index of card in the hand
|
||||||
j2 = player_hand.index(card2)
|
j2 = player_hand.index(card2)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user