mirror of
https://github.com/neogeek23/Dominion-Strategy-Simulator.git
synced 2026-02-04 11:08:18 +00:00
Add files via upload
This commit is contained in:
parent
2a1a9a42c9
commit
b71faf0f0c
@ -26,7 +26,8 @@ class CardGain(Card):
|
|||||||
chances = 0
|
chances = 0
|
||||||
|
|
||||||
def __get_gain_card(self):
|
def __get_gain_card(self):
|
||||||
return int(input("\nPlease identify the index of which card you would like to obtain: "))
|
return self.__Card_owner.get_general_input("\nPlease identify the index of which card you would like to "
|
||||||
|
"obtain: ", int)
|
||||||
|
|
||||||
def __get_gainable_cards(self, spending_limit):
|
def __get_gainable_cards(self, spending_limit):
|
||||||
result = list()
|
result = list()
|
||||||
|
|||||||
@ -29,7 +29,7 @@ class CardTrash(Card):
|
|||||||
self.trash_card_get_cost()
|
self.trash_card_get_cost()
|
||||||
|
|
||||||
def __get_card_to_trash(self):
|
def __get_card_to_trash(self):
|
||||||
return int(input("\nPlease identify the index of the desired card to trash: "))
|
return self.__Card_owner.get_general_input("\nPlease identify the index of the desired card to trash: ", int)
|
||||||
|
|
||||||
def __get_trashable_cards(self):
|
def __get_trashable_cards(self):
|
||||||
result = list()
|
result = list()
|
||||||
|
|||||||
@ -23,5 +23,5 @@ class Cellar(Card):
|
|||||||
self._Card__owner.draw_cards(cards_discarded)
|
self._Card__owner.draw_cards(cards_discarded)
|
||||||
|
|
||||||
def __get_index(self, message):
|
def __get_index(self, message):
|
||||||
return int(input(message))
|
return self.__Card_owner.get_general_input(message, int)
|
||||||
|
|
||||||
|
|||||||
@ -13,4 +13,5 @@ class Merchant(Card):
|
|||||||
self._Card__owner.add_purchase_power(3)
|
self._Card__owner.add_purchase_power(3)
|
||||||
|
|
||||||
def __get_Merchant_input(self, message):
|
def __get_Merchant_input(self, message):
|
||||||
return input("Player " + str(self._Card__owner.get_player_index()) + ", " + message)
|
return self.__Card_owner.get_general_input("Player " + str(self._Card__owner.get_player_index()) + ", " +
|
||||||
|
message, str)
|
||||||
|
|||||||
@ -13,7 +13,8 @@ class Militia(Card):
|
|||||||
def __force_discard(self, chances, player):
|
def __force_discard(self, chances, player):
|
||||||
if player.get_hand().get_remaining() > 3 and chances > 0:
|
if player.get_hand().get_remaining() > 3 and chances > 0:
|
||||||
hand_index = player.militia_input("\nPlease provide an index to identify a card from hand you would like to"
|
hand_index = player.militia_input("\nPlease provide an index to identify a card from hand you would like to"
|
||||||
" discard (0 to " + str(player.get_hand().get_remaining() - 1) + "): ")
|
" discard (0 to " + str(player.get_hand().get_remaining() - 1) + "): "
|
||||||
|
, int)
|
||||||
self.__check_discard(hand_index, player, chances)
|
self.__check_discard(hand_index, player, chances)
|
||||||
elif self._Card__owner.get_hand().get_remaining() > 3 and chances <= 0:
|
elif self._Card__owner.get_hand().get_remaining() > 3 and chances <= 0:
|
||||||
print("You're out of chances to select a valid card to discard, randomly selecting for you.")
|
print("You're out of chances to select a valid card to discard, randomly selecting for you.")
|
||||||
|
|||||||
@ -7,7 +7,7 @@ class Pure_Big_Money(Player):
|
|||||||
print("\nAs a BIG MONEY BOT, I'm skipping this unnecessary action phase. Beep-boop, bow to me humans!")
|
print("\nAs a BIG MONEY BOT, I'm skipping this unnecessary action phase. Beep-boop, bow to me humans!")
|
||||||
|
|
||||||
#This method will only be called for this bot when it is time to play treasures, it will play all of them always.
|
#This method will only be called for this bot when it is time to play treasures, it will play all of them always.
|
||||||
def get_play_input(self, message):
|
def get_play_input(self, message, target_type):
|
||||||
choice = -1
|
choice = -1
|
||||||
hand = self.get_hand().get_supply()
|
hand = self.get_hand().get_supply()
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ class Pure_Big_Money(Player):
|
|||||||
return choice
|
return choice
|
||||||
|
|
||||||
#This method will only be called when it is time to buy things, a very simple logic will decide its action.
|
#This method will only be called when it is time to buy things, a very simple logic will decide its action.
|
||||||
def get_buy_input(self, message):
|
def get_buy_input(self, message, target_type):
|
||||||
coin = self._Player__purchase_power
|
coin = self._Player__purchase_power
|
||||||
choice = -1
|
choice = -1
|
||||||
|
|
||||||
|
|||||||
@ -27,16 +27,13 @@ class Hand(Supply):
|
|||||||
found_at = self._Supply__card.index(c)
|
found_at = self._Supply__card.index(c)
|
||||||
|
|
||||||
if found_at >= 0:
|
if found_at >= 0:
|
||||||
yes_no = "Y" == self.__get_reveal("Player "
|
owner = self._Supply__card[found_at].get_owner()
|
||||||
+ str(self._Supply__card[found_at].get_owner().get_player_index())
|
yes_no = "Y" == owner.get_general_input("Player " + str(owner.get_player_index()) + ", enter 'Y' if you'd "
|
||||||
+ ", enter 'Y' if you'd like to reveal "
|
"like to reveal "
|
||||||
+ self._Supply__card[found_at].get_name() + " to block the "
|
+ self._Supply__card[found_at].get_name() + " to block the "
|
||||||
+ what_attack + " attack: ")
|
+ what_attack + " attack: ", str)
|
||||||
return yes_no
|
return yes_no
|
||||||
|
|
||||||
def __get_reveal(self, message):
|
|
||||||
return input(message)
|
|
||||||
|
|
||||||
def __get_unique_types(self):
|
def __get_unique_types(self):
|
||||||
unique_type = list()
|
unique_type = list()
|
||||||
|
|
||||||
|
|||||||
@ -3,11 +3,12 @@ from player.discard import Discard
|
|||||||
from player.hand import Hand
|
from player.hand import Hand
|
||||||
from player.counter import Counter
|
from player.counter import Counter
|
||||||
from card.card import Card
|
from card.card import Card
|
||||||
|
from random import randint
|
||||||
|
|
||||||
|
|
||||||
class Player:
|
class Player:
|
||||||
def __init__(self, table):
|
def __init__(self, table):
|
||||||
self.__std_chances = 3
|
self.__std_chances = 2
|
||||||
self.__deck = Deck()
|
self.__deck = Deck()
|
||||||
self.__discard = Discard()
|
self.__discard = Discard()
|
||||||
self.__hand = Hand()
|
self.__hand = Hand()
|
||||||
@ -100,7 +101,7 @@ class Player:
|
|||||||
|
|
||||||
def play_card(self, acceptable_card_type, chances, counter):
|
def play_card(self, acceptable_card_type, chances, counter):
|
||||||
if chances > 0 and self.__hand.contains_one_of(acceptable_card_type):
|
if chances > 0 and self.__hand.contains_one_of(acceptable_card_type):
|
||||||
hand_index = self.get_play_input("\nPlease identify a card from hand to play by providing its index: ")
|
hand_index = self.get_play_input("\nPlease identify a card from hand to play by providing its index: ", int)
|
||||||
self.__check_play_card(hand_index, counter, acceptable_card_type, chances)
|
self.__check_play_card(hand_index, counter, acceptable_card_type, chances)
|
||||||
elif chances <= 0:
|
elif chances <= 0:
|
||||||
print("You have used up all of your chances to enter a valid integer; forfeiting remaining plays.")
|
print("You have used up all of your chances to enter a valid integer; forfeiting remaining plays.")
|
||||||
@ -129,7 +130,7 @@ class Player:
|
|||||||
def buy_card(self, chances):
|
def buy_card(self, chances):
|
||||||
self.__table.print()
|
self.__table.print()
|
||||||
while self.__buys > 0 and not self.__table.are_there_any_empty_piles() and chances > 0:
|
while self.__buys > 0 and not self.__table.are_there_any_empty_piles() and chances > 0:
|
||||||
pile_index = self.get_buy_input("\nPlease identify a pile from the table that you'd like to purchase: ")
|
pile_index = self.get_buy_input("\nPlease choose a pile from the table that you'd like to purchase: ", int)
|
||||||
|
|
||||||
if pile_index < 0:
|
if pile_index < 0:
|
||||||
print("You have elected to forfeit any remaining plays.")
|
print("You have elected to forfeit any remaining plays.")
|
||||||
@ -141,11 +142,13 @@ class Player:
|
|||||||
print("You do not have enough coin. Try again.")
|
print("You do not have enough coin. Try again.")
|
||||||
chances -= 1
|
chances -= 1
|
||||||
else:
|
else:
|
||||||
|
self.__buys -= 1
|
||||||
|
self.__purchase_power -= self.__table.get_pile(pile_index).get_card_group().get_cost()
|
||||||
print("Player " + str(self.get_table().get_players().index(self)) + " buying card " +
|
print("Player " + str(self.get_table().get_players().index(self)) + " buying card " +
|
||||||
self.__table.get_pile(pile_index).get_card_group().get_name())
|
self.__table.get_pile(pile_index).get_card_group().get_name() + " leaving " +
|
||||||
|
str(self.__purchase_power) + " coin(s) and " + str(self.__buys) + " buy(s) following purchase.")
|
||||||
self.__table.get_pile(pile_index).transfer_top_card(self.__discard)
|
self.__table.get_pile(pile_index).transfer_top_card(self.__discard)
|
||||||
self.claim_top_card(self.__discard)
|
self.claim_top_card(self.__discard)
|
||||||
self.__buys -= 1
|
|
||||||
|
|
||||||
def take_turn(self):
|
def take_turn(self):
|
||||||
self.__turn_setup()
|
self.__turn_setup()
|
||||||
@ -184,17 +187,46 @@ class Player:
|
|||||||
self.play_card(acceptable_card_type, chances - 1, counter)
|
self.play_card(acceptable_card_type, chances - 1, counter)
|
||||||
|
|
||||||
# The following two methods are identical under different names so they can be overridden by bot classes later
|
# The following two methods are identical under different names so they can be overridden by bot classes later
|
||||||
def get_play_input(self, message):
|
def get_play_input(self, message, target_type):
|
||||||
return self.get_general_input(message)
|
return self.get_general_input(message, target_type)
|
||||||
|
|
||||||
def get_buy_input(self, message):
|
def get_buy_input(self, message, target_type):
|
||||||
return self.get_general_input(message)
|
return self.get_general_input(message, target_type)
|
||||||
|
|
||||||
def militia_input(self, message):
|
def militia_input(self, message, target_type):
|
||||||
return self.get_general_input(message)
|
return self.get_general_input(message, target_type)
|
||||||
|
|
||||||
def get_general_input(self, message):
|
def get_general_input(self, message, target_type):
|
||||||
return int(input(message))
|
return self.__get_input(self.__std_chances, target_type, message)
|
||||||
|
|
||||||
|
def __get_input(self, chances, target_type, message):
|
||||||
|
value = input(message)
|
||||||
|
if chances > 0:
|
||||||
|
if not self.__does_typecast_error(value, target_type):
|
||||||
|
return target_type(value)
|
||||||
|
else:
|
||||||
|
print("'" + str(value) + "' of type " + str(type(value)) + " is an invalid entry. " + str(chances) +
|
||||||
|
" chances to input a " + str(target_type) + " remain.")
|
||||||
|
return self.__get_input(chances - 1, target_type, message)
|
||||||
|
else:
|
||||||
|
if target_type == int:
|
||||||
|
rand_value = randint(-1, 1)
|
||||||
|
print("You've run out of chances to input an int. A random value of '" + str(rand_value) + "' is being"
|
||||||
|
" supplied.")
|
||||||
|
return rand_value
|
||||||
|
elif target_type == str:
|
||||||
|
print("You've run out of chances to input an string. A zero length string is being supplied.")
|
||||||
|
return ""
|
||||||
|
else:
|
||||||
|
print("You've run out of chances to input a" + str(target_type) + ". A None is being supplied.")
|
||||||
|
return None
|
||||||
|
|
||||||
|
def __does_typecast_error(self, value, target_type):
|
||||||
|
try:
|
||||||
|
target_type(value)
|
||||||
|
return False
|
||||||
|
except ValueError:
|
||||||
|
return True
|
||||||
|
|
||||||
def __print_discard(self):
|
def __print_discard(self):
|
||||||
print("\nPlayer " + str(self.__table.get_players().index(self)) + " Discard:")
|
print("\nPlayer " + str(self.__table.get_players().index(self)) + " Discard:")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user