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 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 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 possesses the table knowledge and the hand
|
||||||
|
AI should not modify the player cards and table data. They are read only.
|
||||||
"""
|
"""
|
||||||
import random
|
import random
|
||||||
|
import cards
|
||||||
|
|
||||||
class randomAI:
|
|
||||||
|
class RandomAI:
|
||||||
|
|
||||||
def __init__(self, table_status, player=None):
|
def __init__(self, table_status, player=None):
|
||||||
self.player = player
|
self.player = player
|
||||||
|
@ -18,9 +21,6 @@ class randomAI:
|
||||||
def connect_to_player(self, player):
|
def connect_to_player(self, player):
|
||||||
self.player = player
|
self.player = player
|
||||||
|
|
||||||
def get_valid_plays(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def request_reshuffle(self):
|
def request_reshuffle(self):
|
||||||
if random.randint(0, 1):
|
if random.randint(0, 1):
|
||||||
return True
|
return True
|
||||||
|
@ -31,6 +31,7 @@ class randomAI:
|
||||||
current_round_bid = self.table_status["bid"] // 10
|
current_round_bid = self.table_status["bid"] // 10
|
||||||
current_suit_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)
|
gen_bid = random.randint(1, 7)*10 + random.randint(1, 5)
|
||||||
|
print(gen_bid)
|
||||||
if gen_bid > self.table_status["bid"]:
|
if gen_bid > self.table_status["bid"]:
|
||||||
if current_suit_bid == 5:
|
if current_suit_bid == 5:
|
||||||
return (current_round_bid+1)*10 + 1
|
return (current_round_bid+1)*10 + 1
|
||||||
|
@ -38,7 +39,35 @@ class randomAI:
|
||||||
return self.table_status["bid"]+1
|
return self.table_status["bid"]+1
|
||||||
|
|
||||||
def call_partner(self):
|
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):
|
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()
|
self.set_card_positions()
|
||||||
|
|
||||||
def set_card_positions(self):
|
def set_card_positions(self):
|
||||||
|
# TODO: Fix vertical card positioning
|
||||||
number_of_cards = len(self.cards)
|
number_of_cards = len(self.cards)
|
||||||
|
|
||||||
if number_of_cards > 0:
|
if number_of_cards > 0:
|
||||||
|
|
14
players.py
14
players.py
|
@ -114,7 +114,7 @@ class Table:
|
||||||
deck_reveal=cards.DeckReveal.HIDE_ALL))
|
deck_reveal=cards.DeckReveal.HIDE_ALL))
|
||||||
self.players[i].connect_to_table(self.table_status)
|
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
|
playfield_margins = 10
|
||||||
margins_with_w_deck = w_deck + playfield_margins
|
margins_with_w_deck = w_deck + playfield_margins
|
||||||
|
@ -151,8 +151,10 @@ class Table:
|
||||||
:param text: String to be displayed on the center board
|
:param text: String to be displayed on the center board
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
|
# TODO: Write procedure to update the announcer text
|
||||||
rendered_text = self.table_font.render(text, True, (255,0,0)).convert_alpha()
|
rendered_text = self.table_font.render(text, True, (255,0,0)).convert_alpha()
|
||||||
self.announcer.blit(rendered_text, (50, 50))
|
self.announcer.blit(rendered_text, (50, 50))
|
||||||
|
self.update_table.emit()
|
||||||
|
|
||||||
def get_pos(self):
|
def get_pos(self):
|
||||||
return self.x, self.y
|
return self.x, self.y
|
||||||
|
@ -405,12 +407,14 @@ class Player(cards.Deck):
|
||||||
return self.AI.make_a_bid()
|
return self.AI.make_a_bid()
|
||||||
return self.make_a_bid()
|
return self.make_a_bid()
|
||||||
else:
|
else:
|
||||||
#if self.AI:
|
if self.AI:
|
||||||
# pass
|
return self.AI.call_partner()
|
||||||
return self.call_partner()
|
return self.call_partner()
|
||||||
if game_state == GameState.PLAYING:
|
if game_state == GameState.PLAYING:
|
||||||
#if self.AI:
|
if self.AI:
|
||||||
# pass
|
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)
|
return self.make_a_play(sub_state)
|
||||||
|
|
||||||
def make_a_bid(self):
|
def make_a_bid(self):
|
||||||
|
|
Loading…
Reference in New Issue