Finish up RandomAI procedure
parent
30261597f1
commit
01be453b5c
|
@ -6,10 +6,13 @@ never an invalid one.
|
|||
AI also possess information on the table to facilitate decision making.
|
||||
AI should output the card play as int, and the actual Card is played in the Player class
|
||||
AI possesses the table knowledge and the hand
|
||||
AI should not modify the player cards and table data. They are read only.
|
||||
"""
|
||||
import random
|
||||
import cards
|
||||
|
||||
class randomAI:
|
||||
|
||||
class RandomAI:
|
||||
|
||||
def __init__(self, table_status, player=None):
|
||||
self.player = player
|
||||
|
@ -18,9 +21,6 @@ class randomAI:
|
|||
def connect_to_player(self, player):
|
||||
self.player = player
|
||||
|
||||
def get_valid_plays(self):
|
||||
pass
|
||||
|
||||
def request_reshuffle(self):
|
||||
if random.randint(0, 1):
|
||||
return True
|
||||
|
@ -31,6 +31,7 @@ class randomAI:
|
|||
current_round_bid = self.table_status["bid"] // 10
|
||||
current_suit_bid = self.table_status["bid"] % 10
|
||||
gen_bid = random.randint(1, 7)*10 + random.randint(1, 5)
|
||||
print(gen_bid)
|
||||
if gen_bid > self.table_status["bid"]:
|
||||
if current_suit_bid == 5:
|
||||
return (current_round_bid+1)*10 + 1
|
||||
|
@ -38,7 +39,35 @@ class randomAI:
|
|||
return self.table_status["bid"]+1
|
||||
|
||||
def call_partner(self):
|
||||
pass
|
||||
player_cards = self.player.get_deck_values()
|
||||
other_cards = []
|
||||
for i in range(4):
|
||||
for j in range(13):
|
||||
current_card = (i + 1) * 100 + j + 2
|
||||
if current_card not in player_cards:
|
||||
other_cards.append(current_card)
|
||||
return random.choice(other_cards)
|
||||
|
||||
def make_a_play(self, sub_state):
|
||||
pass
|
||||
if sub_state == 0:
|
||||
valid_plays = self.get_valid_plays(True)
|
||||
else:
|
||||
valid_plays = self.get_valid_plays(False)
|
||||
|
||||
return random.choice(valid_plays)
|
||||
|
||||
def get_valid_plays(self, leading):
|
||||
all_plays = self.player.get_deck_values()
|
||||
possible_plays = None
|
||||
if leading:
|
||||
if not self.table_status['trump broken']:
|
||||
possible_plays = [card for card in all_plays
|
||||
if not cards.get_card_suit(card) == self.table_status['trump suit']]
|
||||
else:
|
||||
leading_suit = self.table_status['played cards'][self.table_status["leading player"]].suit()
|
||||
possible_plays = [card for card in all_plays
|
||||
if cards.get_card_suit(card) == leading_suit]
|
||||
|
||||
if not possible_plays:
|
||||
return all_plays
|
||||
return possible_plays
|
||||
|
|
1
cards.py
1
cards.py
|
@ -132,6 +132,7 @@ class Deck():
|
|||
self.set_card_positions()
|
||||
|
||||
def set_card_positions(self):
|
||||
# TODO: Fix vertical card positioning
|
||||
number_of_cards = len(self.cards)
|
||||
|
||||
if number_of_cards > 0:
|
||||
|
|
14
players.py
14
players.py
|
@ -114,7 +114,7 @@ class Table:
|
|||
deck_reveal=cards.DeckReveal.HIDE_ALL))
|
||||
self.players[i].connect_to_table(self.table_status)
|
||||
|
||||
self.players[3].add_ai(ai.randomAI(self.table_status))
|
||||
self.players[3].add_ai(ai.RandomAI(self.table_status))
|
||||
|
||||
playfield_margins = 10
|
||||
margins_with_w_deck = w_deck + playfield_margins
|
||||
|
@ -151,8 +151,10 @@ class Table:
|
|||
:param text: String to be displayed on the center board
|
||||
:return: None
|
||||
"""
|
||||
# TODO: Write procedure to update the announcer text
|
||||
rendered_text = self.table_font.render(text, True, (255,0,0)).convert_alpha()
|
||||
self.announcer.blit(rendered_text, (50, 50))
|
||||
self.update_table.emit()
|
||||
|
||||
def get_pos(self):
|
||||
return self.x, self.y
|
||||
|
@ -405,12 +407,14 @@ class Player(cards.Deck):
|
|||
return self.AI.make_a_bid()
|
||||
return self.make_a_bid()
|
||||
else:
|
||||
#if self.AI:
|
||||
# pass
|
||||
if self.AI:
|
||||
return self.AI.call_partner()
|
||||
return self.call_partner()
|
||||
if game_state == GameState.PLAYING:
|
||||
#if self.AI:
|
||||
# pass
|
||||
if self.AI:
|
||||
play = self.AI.make_a_play(sub_state)
|
||||
[_, pos] = self.check_card_in(play)
|
||||
return self.remove_card(pos)
|
||||
return self.make_a_play(sub_state)
|
||||
|
||||
def make_a_bid(self):
|
||||
|
|
Loading…
Reference in New Issue