mirror of
https://github.com/neogeek23/Dominion-Strategy-Simulator.git
synced 2026-02-06 12:08:18 +00:00
Add files via upload
Added functionality for cellar, moat, and militia.
This commit is contained in:
parent
1102ad7de1
commit
b90b70f118
2
card.py
2
card.py
@ -10,6 +10,8 @@ class Card:
|
|||||||
Victory = auto()
|
Victory = auto()
|
||||||
Curse = auto()
|
Curse = auto()
|
||||||
|
|
||||||
|
prevent_attack = False
|
||||||
|
|
||||||
def __init__(self, name, cost, cardtype, value, coin, action, buy, draw, owner):
|
def __init__(self, name, cost, cardtype, value, coin, action, buy, draw, owner):
|
||||||
self.__name = name
|
self.__name = name
|
||||||
self.__cost = cost
|
self.__cost = cost
|
||||||
|
|||||||
31
cellar.py
Normal file
31
cellar.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
from card import Card
|
||||||
|
|
||||||
|
|
||||||
|
class Cellar(Card):
|
||||||
|
def effect(self):
|
||||||
|
hand_index = 0
|
||||||
|
cards_discarded = 0
|
||||||
|
have_not_run_yet = True
|
||||||
|
while self._Card__owner.get_hand().get_remaining() >= 0 and \
|
||||||
|
0 <= hand_index < self._Card__owner.get_hand().get_remaining() and \
|
||||||
|
(hand_index != self._Card__owner.get_hand().get_supply().index(self) or have_not_run_yet):
|
||||||
|
hand_index = int(input("Player " + str(self._Card__owner.get_table().get_players().index(self._Card__owner))
|
||||||
|
+ ", input the index from your hand to discard that card and gain an action, or "
|
||||||
|
" input an impossible index to end discard selection: "))
|
||||||
|
|
||||||
|
if 0 <= hand_index < self._Card__owner.get_hand().get_remaining() and \
|
||||||
|
hand_index != self._Card__owner.get_hand().get_supply().index(self):
|
||||||
|
self._Card__owner.discard_from_hand(hand_index)
|
||||||
|
self._Card__owner.print_hand()
|
||||||
|
cards_discarded += 1
|
||||||
|
# in case last card is discarded as that will kill loop & set to itself
|
||||||
|
hand_index = self.__get_last_non_cellar_card()
|
||||||
|
have_not_run_yet = False
|
||||||
|
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
|
||||||
34
game.py
34
game.py
@ -2,6 +2,8 @@ from table import Table
|
|||||||
from player import Player
|
from player import Player
|
||||||
from card import Card
|
from card import Card
|
||||||
from militia import Militia
|
from militia import Militia
|
||||||
|
from moat import Moat
|
||||||
|
from cellar import Cellar
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
@ -11,10 +13,15 @@ def main():
|
|||||||
play_game(game[0])
|
play_game(game[0])
|
||||||
|
|
||||||
|
|
||||||
|
def play_game(game_table):
|
||||||
|
game_table.play()
|
||||||
|
|
||||||
|
|
||||||
|
# place holder setup for testing until frontend constructed
|
||||||
def setup_new_game(game_list, parameter, card_info):
|
def setup_new_game(game_list, parameter, card_info):
|
||||||
t = Table()
|
t = Table()
|
||||||
humans = parameter[0]
|
humans = parameter[0]
|
||||||
bots = parameter[1]
|
# bots = parameter[1]
|
||||||
|
|
||||||
index = 0
|
index = 0
|
||||||
for p in parameter[2:]:
|
for p in parameter[2:]:
|
||||||
@ -35,22 +42,18 @@ def setup_new_game(game_list, parameter, card_info):
|
|||||||
human.draw_hand()
|
human.draw_hand()
|
||||||
t.add_player(human)
|
t.add_player(human)
|
||||||
|
|
||||||
for i in range(bots):
|
# for i in range(bots):
|
||||||
bot = Player(False, t)
|
# bot = Player(False, t)
|
||||||
bot.draw_deck(t, get_starting_deck())
|
# bot.draw_deck(t, get_starting_deck())
|
||||||
bot.draw_hand()
|
# bot.draw_hand()
|
||||||
t.add_player(bot)
|
# t.add_player(bot)
|
||||||
|
|
||||||
game_list.append(t)
|
game_list.append(t)
|
||||||
|
|
||||||
|
|
||||||
def play_game(game_table):
|
|
||||||
game_table.play()
|
|
||||||
|
|
||||||
|
|
||||||
def get_game_parameters():
|
def get_game_parameters():
|
||||||
# humans, bots, card #1, card #2, ... etc
|
# humans, bots, card #1, card #2, ... etc
|
||||||
return [1, 1, True, True, True, True, True, True, False, True, True, True, True, True, True, True, True, True, True]
|
return [2, 1, True, True, True, True, True, True, False, True, True, True, True, True, True, True, True, True, True]
|
||||||
|
|
||||||
|
|
||||||
def get_card_info():
|
def get_card_info():
|
||||||
@ -63,12 +66,12 @@ def get_card_info():
|
|||||||
["Dutchy", 5, Card.CardType.Victory, 3, 0, 0, 0, 0, Card, 12], # 5
|
["Dutchy", 5, Card.CardType.Victory, 3, 0, 0, 0, 0, Card, 12], # 5
|
||||||
["Province", 8, Card.CardType.Victory, 6, 0, 0, 0, 0, Card, 12], # 6
|
["Province", 8, Card.CardType.Victory, 6, 0, 0, 0, 0, Card, 12], # 6
|
||||||
["Curse", 0, Card.CardType.Curse, -1, 0, 0, 0, 0, Card, 30], # 7
|
["Curse", 0, Card.CardType.Curse, -1, 0, 0, 0, 0, Card, 30], # 7
|
||||||
["Cellar", 2, Card.CardType.Action, 0, 0, 1, 0, 0, Card, 10], # 8*
|
["Cellar", 2, Card.CardType.Action, 0, 0, 1, 0, 0, Cellar, 10], # 8
|
||||||
["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, Card, 10], # 10*
|
["Merchant", 3, Card.CardType.Action, 0, 0, 1, 0, 1, Card, 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, Card, 10], # 12*
|
||||||
["Moat", 2, Card.CardType.Reaction, 0, 0, 0, 0, 2, Card, 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
|
||||||
@ -78,6 +81,7 @@ def get_card_info():
|
|||||||
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], ["Village", 3], ["Smithy", 3]]
|
return [["Militia", 4], ["Cellar", 3], ["Moat", 3]]
|
||||||
|
|
||||||
main()
|
|
||||||
|
main()
|
||||||
|
|||||||
15
hand.py
15
hand.py
@ -18,6 +18,21 @@ class Hand(Supply):
|
|||||||
result += 1
|
result += 1
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def blocks_attack(self, what_attack):
|
||||||
|
yes_no = False
|
||||||
|
found_at = -1
|
||||||
|
|
||||||
|
for c in self._Supply__card:
|
||||||
|
if c.prevent_attack:
|
||||||
|
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()))
|
||||||
|
+ ", enter 'Y' if you'd like to reveal " + self._Supply__card[found_at].get_name()
|
||||||
|
+ " to block the " + what_attack + " attack: ")
|
||||||
|
return yes_no
|
||||||
|
|
||||||
def __get_unique_types(self):
|
def __get_unique_types(self):
|
||||||
unique_type = list()
|
unique_type = list()
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@ from random import randint
|
|||||||
class Militia(Card):
|
class Militia(Card):
|
||||||
def effect(self):
|
def effect(self):
|
||||||
for player in self._Card__owner.get_table().get_players():
|
for player in self._Card__owner.get_table().get_players():
|
||||||
if self._Card__owner != player:
|
if self._Card__owner != player and not player.get_hand().blocks_attack(self.get_name()):
|
||||||
player.print_hand()
|
player.print_hand()
|
||||||
print("Player " + str(self._Card__owner.get_table().get_players().index(player)) + ", you MUST discard "
|
print("Player " + str(self._Card__owner.get_table().get_players().index(player)) + ", you MUST discard "
|
||||||
"down to 3 cards.")
|
"down to 3 cards.")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user