Add files via upload

Added Remodel.  Made Remodel and Mine inherit from the same subclass as they are very similar.
This commit is contained in:
Brad Stein 2017-12-30 11:56:31 -06:00 committed by GitHub
parent aeee9055bf
commit 92bd340d3a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 123 additions and 93 deletions

12
card.py
View File

@ -60,5 +60,13 @@ class Card:
result = -1
for c in self._Card__owner.get_hand().get_supply():
if c != self:
result = self._Card__owner.get_hand().get_supply().index(c)
return result
result = self._Card__owner.get_hand().get_player_index()
return result
def __print_card_list(self, card, message):
print("\nPlayer " + str(self._Card__owner.get_player_index()) + " " + message)
counter = 0
for c in card:
print(str(counter) + ": " + c.identify())
counter += 1

View File

@ -21,6 +21,6 @@ class Cellar(Card):
# in case last card is discarded as that will kill loop & set to itself
hand_index = self.__get_index_not_self()
have_not_run_yet = False
self._Card__owner.add_actions(cards_discarded)
self._Card__owner.draw_cards(cards_discarded)

View File

@ -6,6 +6,7 @@ from moat import Moat
from cellar import Cellar
from merchant import Merchant
from mine import Mine
from remodel import Remodel
def main():
@ -72,9 +73,9 @@ def get_card_info():
["Market", 5, Card.CardType.Action, 0, 1, 1, 1, 1, Card, 10], # 9
["Merchant", 3, Card.CardType.Action, 0, 0, 1, 0, 1, Merchant, 10], # 10
["Militia", 4, Card.CardType.Attack, 0, 2, 0, 0, 0, Militia, 10], # 11
["Mine", 5, Card.CardType.Action, 0, 0, 0, 0, 0, Mine, 10], # 12*
["Mine", 5, Card.CardType.Action, 0, 0, 0, 0, 0, Mine, 10], # 12
["Moat", 2, Card.CardType.Reaction, 0, 0, 0, 0, 2, Moat, 10], # 13
["Remodel", 4, Card.CardType.Action, 0, 0, 0, 0, 0, Card, 10], # 14*
["Remodel", 4, Card.CardType.Action, 0, 0, 0, 0, 0, Remodel, 10], # 14
["Smithy", 4, Card.CardType.Action, 0, 0, 0, 0, 3, Card, 10], # 15
["Village", 3, Card.CardType.Action, 0, 0, 2, 0, 1, Card, 10], # 16
["Workshop", 4, Card.CardType.Action, 0, 0, 0, 0, 0, Card, 10]] # 17*
@ -108,7 +109,7 @@ def get_starting_deck():
# return [["Market", 2], ["Merchant", 2], ["Smithy", 2], ["Village", 2], ["Moat", 2]]
# return [["Militia", 4], ["Cellar", 3], ["Moat", 3]]
# return [["Silver", 7], ["Merchant", 3]]
return [["Copper", 6], ["Mine", 4]]
return [["Copper", 6], ["Mine", 2], ["Remodel", 2]]
main()

View File

@ -27,8 +27,7 @@ class Hand(Supply):
found_at = self._Supply__card.index(c)
if found_at >= 0:
yes_no = "Y" == input("Player " + str(self._Supply__card[found_at].get_owner().get_table().get_players().
index(self._Supply__card[found_at].get_owner()))
yes_no = "Y" == input("Player " + str(self._Supply__card[found_at].get_owner().get_player_index())
+ ", enter 'Y' if you'd like to reveal " + self._Supply__card[found_at].get_name()
+ " to block the " + what_attack + " attack: ")
return yes_no

View File

@ -5,8 +5,9 @@ class Merchant(Card):
def effect(self):
silver_card_index = self._Card__owner.get_hand().get_index_of_card_by_name("Silver")
if silver_card_index >= 0:
yes_no = input("Player " + str(self._Card__owner.get_table().get_players().index(self._Card__owner)) + ", "
+ "input 'Y' if you'd like to play a silver card and gain an extra coin: ")
yes_no = input("Player " + str(self._Card__owner.get_player_index()) + ", input 'Y' if you'd like to play "
"a silver card and gain an extra "
"coin: ")
if yes_no:
self._Card__owner.get_hand().transfer_card_by_card(

83
mine.py
View File

@ -1,81 +1,8 @@
from card import Card
from trash_gain_card import TrashGainEffectCard
class Mine(Card):
def effect(self):
treasure_cards = self.__get_Treasures()
self.__print_Treasures(treasure_cards)
trash_card = 0
chances = self._Card__owner.get_std_chances()
while len(treasure_cards) > 0 and 0 <= trash_card < len(treasure_cards) - 1 and chances > 0:
trash_card = int(input("\nPlayer " + str(self._Card__owner.get_table()
.get_players().index(self._Card__owner))
+ ", input the index of the treasure card you want to trash to gain another treasure "
"card from the table's piles that costs up to 3 coins more than the trashed card: "))
if trash_card < 0 or trash_card >= len(treasure_cards):
print("Acceptable inputs range from 0 to " + str(len(treasure_cards) - 1) + ". 1 chance lost.")
trash_card = 0
chances -= 1
else:
print("Player " + str(self._Card__owner.get_table().get_players().index(self._Card__owner))
+ " trashing " + treasure_cards[trash_card].get_name() + ".")
self.__gain_treasure(treasure_cards[trash_card].get_cost() + 3)
self._Card__owner.get_hand().transfer_card_by_card(treasure_cards[trash_card],
self._Card__owner.get_table().get_trash())
self._Card__owner.claim_top_card(self._Card__owner.get_hand())
# self._Card__owner.get
chances = 0
def __gain_treasure(self, spending_limit):
treasures_I_can_buy = self.__get_affordable_treasures(spending_limit)
self.__print_affordable_treasures(treasures_I_can_buy)
buy_card = 0
chances = self._Card__owner.get_std_chances()
while len(treasures_I_can_buy) > 0 and 0 <= buy_card < len(treasures_I_can_buy) - 1 and chances > 0:
buy_card = int(input("\nPlease identify the index of which treasure you would like to obtain: "))
if buy_card < 0 or buy_card >= len(treasures_I_can_buy):
print("Acceptable inputs range from 0 to " + str(len(treasures_I_can_buy) - 1) + ". 1 chance lost.")
buy_card = 0
chances -= 1
else:
pile_index = self._Card__owner.get_table().get_piles().index(treasures_I_can_buy[buy_card])
print("Player " + str(self._Card__owner.get_table().get_players().index(self._Card__owner))
+ " drawing " + self._Card__owner.get_table().get_pile(pile_index).get_card_group().get_name()
+ " to hand.")
self._Card__owner.get_table().get_pile(pile_index).transfer_top_card(self._Card__owner.get_hand())
def __print_affordable_treasures(self, affordable_treasure):
print("\nPlayer " + str(self._Card__owner.get_table().get_players().index(self._Card__owner))
+ " Affordable Treasures: ")
counter = 0
for t in affordable_treasure:
print(str(counter) + ": " + t.get_card_group().identify())
counter += 1
def __get_affordable_treasures(self, spending_limit):
result = list()
for p in self._Card__owner.get_table().get_piles():
if p.get_card_group().get_cost() <= spending_limit \
and p.get_card_group().get_type() == Card.CardType.Treasure:
result.append(p)
return result
def __get_Treasures(self):
result = list()
for c in self._Card__owner.get_hand().get_supply():
if c.get_type() == Card.CardType.Treasure:
result.append(c)
return result
def __print_Treasures(self, Treasure):
print("\nPlayer " + str(self._Card__owner.get_table().get_players().index(self._Card__owner)) + " Treasures:")
index = 0
for c in Treasure:
print(str(index) + ": " + c.identify())
index += 1
class Mine(TrashGainEffectCard):
coin_gain = 3
trashable_type_restriction = [Card.CardType.Treasure]
gainable_type_restriction = [Card.CardType.Treasure]

View File

@ -38,6 +38,9 @@ class Player:
def get_discard(self):
return self.__discard
def get_player_index(self):
return self.__table.get_players().index(self)
def get_score(self):
return 0
@ -130,11 +133,12 @@ class Player:
play_another = Counter(self.__hand.get_card_type_count(Card.CardType.Treasure))
while play_another.int > 0:
self.play_card([Card.CardType.Treasure], self.__std_chances, play_another)
self.buy_card(3)
self.buy_card(self.__std_chances)
def buy_card(self, chances):
self.__table.print()
while self.__buys > 0 and not self.__table.are_there_any_empty_piles() and chances > 0:
pile_index = int(input("Please identify a pile from the table that you'd like to purchase: "))
pile_index = int(input("\nPlease identify a pile from the table that you'd like to purchase: "))
if pile_index < 0:
print("You have elected to forfeit any remaining plays.")
@ -153,7 +157,6 @@ class Player:
self.__buys -= 1
def take_turn(self):
print("Deck Size: " + str(self.__deck.get_remaining()))
self.__turn_setup()
self.__print()
self.take_action()
@ -174,7 +177,7 @@ class Player:
self.__discard.print()
def __print_deck(self):
print("\nPlayer " + str(self.__table.get_players().index(self)) + " Deck")
print("\nPlayer " + str(self.__table.get_players().index(self)) + " Deck:")
self.__deck.print()
def __print(self):
@ -189,4 +192,4 @@ class Player:
def __turn_setup(self):
self.__actions.int = 1
self.__buys = 1
self.__purchase_power = 0
self.__purchase_power = 0

5
remodel.py Normal file
View File

@ -0,0 +1,5 @@
from trash_gain_card import TrashGainEffectCard
class Remodel(TrashGainEffectCard):
coin_gain = 2

View File

@ -38,6 +38,7 @@ class Table:
def get_pile_index_of_card(self, card_name):
result = 0
for p in self.__pile:
if p.get_card_group().get_name() == card_name:
result = self.__pile.index(p)
@ -70,3 +71,9 @@ class Table:
for s in self.__pile:
print(str(index) + ": " + s.get_card_group().identify() + ": " + str(s.get_remaining()))
index += 1
print("\nTrash: ")
index = 0
for s in self.__trash.get_supply():
print(str(index) + ": " + s.identify())
index += 1

79
trash_gain_card.py Normal file
View File

@ -0,0 +1,79 @@
from card import Card
class TrashGainEffectCard(Card):
coin_gain = 0
trashable_type_restriction = None
gainable_type_restriction = None
def effect(self):
tc = self.__get_trashable_cards()
self._Card__print_card_list(tc, " Trashable Cards: ")
index = 0
chances = self._Card__owner.get_std_chances()
while 0 < len(tc) and 0 <= index < len(tc) - 1 and chances > 0:
index = self.__get_card_to_trash()
if index < 0 or index >= len(tc):
print("Acceptable inputs range from 0 to " + str(len(tc) - 1) + ". 1 chance lost.")
index = 0
chances -= 1
else:
print("Player " + str(self._Card__owner.get_player_index()) + " trashing " + tc[index].get_name() + ".")
self.__gain_card(tc[index].get_cost() + self.coin_gain)
self._Card__owner.get_hand().transfer_card_by_card(tc[index], self._Card__owner.get_table().get_trash())
chances = 0
def __get_card_to_trash(self):
return int(input("\nPlease identify the index of the desired card to trash: "))
def __get_gain_card(self):
return int(input("\nPlease identify the index of which card you would like to obtain: "))
def __gain_card(self, spending_limit):
gainable_cards = self.__get_gainable_cards(spending_limit)
self._Card__print_card_list(gainable_cards, "Gainable Cards: ")
index = 0
chances = self._Card__owner.get_std_chances()
while len(gainable_cards) > 0 and 0 <= index < len(gainable_cards) - 1 and chances > 0:
index = self.__get_gain_card()
if 0 > index >= len(gainable_cards):
print("Acceptable inputs range from 0 to " + str(len(gainable_cards) - 1) + ". 1 chance lost.")
index = 0
chances -= 1
else:
pile_index = self._Card__owner.get_table().get_pile_index_of_card(gainable_cards[index].get_name())
print("Player " + str(self._Card__owner.get_player_index()) + " drawing "
+ self._Card__owner.get_table().get_pile(pile_index).get_card_group().get_name() + " to hand.")
self._Card__owner.get_table().get_pile(pile_index).transfer_top_card(self._Card__owner.get_hand())
self._Card__owner.claim_top_card(self._Card__owner.get_hand())
chances = 0
def __get_gainable_cards(self, spending_limit):
result = list()
for p in self._Card__owner.get_table().get_piles():
if p.get_card_group().get_cost() <= spending_limit:
if self.gainable_type_restriction is None:
result.append(p.get_card_group())
elif p.get_card_group().get_type() in self.gainable_type_restriction:
result.append(p.get_card_group())
return result
def __get_trashable_cards(self):
result = list()
for c in self._Card__owner.get_hand().get_supply():
# print(c)
# print(self)
# print(c.get_type())
# print(self.trashable_type_restriction)
if c != self:
if self.trashable_type_restriction is None:
result.append(c)
elif c.get_type() in self.trashable_type_restriction:
result.append(c)
return result