Add files via upload

added functionality for mine
This commit is contained in:
Brad Stein 2017-12-28 18:24:07 -06:00 committed by GitHub
parent ba27b02aee
commit 67db950879
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 124 additions and 14 deletions

View File

@ -55,3 +55,10 @@ class Card:
def identify(self): def identify(self):
return self.__name + ", " + str(self.__type) + ", " + str(self.__cost) return self.__name + ", " + str(self.__type) + ", " + str(self.__cost)
def __get_index_not_self(self):
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

View File

@ -19,13 +19,8 @@ class Cellar(Card):
self._Card__owner.print_hand() self._Card__owner.print_hand()
cards_discarded += 1 cards_discarded += 1
# in case last card is discarded as that will kill loop & set to itself # in case last card is discarded as that will kill loop & set to itself
hand_index = self.__get_last_non_cellar_card() hand_index = self.__get_index_not_self()
have_not_run_yet = False have_not_run_yet = False
self._Card__owner.add_actions(cards_discarded) self._Card__owner.add_actions(cards_discarded)
def __get_last_non_cellar_card(self):
result = -1
for c in self._Card__owner.get_hand().get_supply():
if "Cellar" not in type(c).__name__:
result = self._Card__owner.get_hand().get_supply().index(c)
return result

30
game.py
View File

@ -5,7 +5,7 @@ from militia import Militia
from moat import Moat from moat import Moat
from cellar import Cellar from cellar import Cellar
from merchant import Merchant from merchant import Merchant
from mine import Mine
def main(): def main():
@ -72,19 +72,43 @@ def get_card_info():
["Market", 5, Card.CardType.Action, 0, 1, 1, 1, 1, Card, 10], # 9 ["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 ["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 ["Militia", 4, Card.CardType.Attack, 0, 2, 0, 0, 0, Militia, 10], # 11
["Mine", 5, Card.CardType.Action, 0, 0, 0, 0, 0, Card, 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 ["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, Card, 10], # 14*
["Smithy", 4, Card.CardType.Action, 0, 0, 0, 0, 3, Card, 10], # 15 ["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 ["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* ["Workshop", 4, Card.CardType.Action, 0, 0, 0, 0, 0, Card, 10]] # 17*
# Big Money
# ["Adventurer",
# ["Bureaucrat",
# ["Chancellor",
# ["Chapel",
# ["Feast",
# ["Laboratory",
# ["Moneylender",
# ["Throne Room",
# Interaction
# ["Council Room",
# ["Festival",
# ["Library",
# ["Spy",
# ["Thief",
# Size Distortion
# ["Gardens",
# ["Woodcuter",
# ["Witch",
# Villiage Square
# Trash Heap
# http://dominioncg.wikia.com/wiki/Pre-set_Sets_of_10
# http://www.dominiondeck.com/games/popular
def get_starting_deck(): def get_starting_deck():
return [["Copper", 7], ["Estate", 3]] # return [["Copper", 7], ["Estate", 3]]
# return [["Market", 2], ["Merchant", 2], ["Smithy", 2], ["Village", 2], ["Moat", 2]] # return [["Market", 2], ["Merchant", 2], ["Smithy", 2], ["Village", 2], ["Moat", 2]]
# return [["Militia", 4], ["Cellar", 3], ["Moat", 3]] # return [["Militia", 4], ["Cellar", 3], ["Moat", 3]]
# return [["Silver", 7], ["Merchant", 3]] # return [["Silver", 7], ["Merchant", 3]]
return [["Copper", 6], ["Mine", 4]]
main() main()

81
mine.py Normal file
View File

@ -0,0 +1,81 @@
from card import Card
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

View File

@ -73,7 +73,7 @@ class Player:
index = table.get_pile_index_of_card(ds[0]) index = table.get_pile_index_of_card(ds[0])
for i in range(ds[1]): for i in range(ds[1]):
table.get_pile(index).transfer_top_card(self.__deck) table.get_pile(index).transfer_top_card(self.__deck)
self.__claim_top_card(self.__deck) self.claim_top_card(self.__deck)
self.__deck.shuffle() self.__deck.shuffle()
def draw_hand(self): def draw_hand(self):
@ -149,7 +149,7 @@ class Player:
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())
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 self.__buys -= 1
def take_turn(self): def take_turn(self):
@ -162,7 +162,7 @@ class Player:
self.draw_hand() self.draw_hand()
self.print_hand() self.print_hand()
def __claim_top_card(self, supply): def claim_top_card(self, supply):
supply.get_top_card().set_owner(self) supply.get_top_card().set_owner(self)
def print_hand(self): def print_hand(self):

View File

@ -19,6 +19,9 @@ class Table:
def get_players(self): def get_players(self):
return self.__player return self.__player
def get_trash(self):
return self.__trash
def add_pile(self, card, n): def add_pile(self, card, n):
p = Pile() p = Pile()
p.add_cards(card, n) p.add_cards(card, n)