Compare commits

...

2 Commits

Author SHA1 Message Date
acd669ba34 Add interface for MOC tracking 2024-05-23 21:24:00 +02:00
507ef83607 Continue implementing interface 2024-05-23 20:44:07 +02:00
2 changed files with 89 additions and 45 deletions

127
main.py
View File

@ -4,7 +4,7 @@
import os
import random
import jsonpickle
import time
from src.MamaOConnel import MamaOConnel
class Circus:
# There are:
@ -30,8 +30,8 @@ class Circus:
self.state = 0 # 0 means Circus is not used in game yet, 1 means next wagon in list is #1, and so on
def enable(self):
if self.state == 0:
print("Circus is not or no longer in game.")
if self.state > 0:
print("Circus is already in game.")
return False
self.state = 1
@ -67,6 +67,7 @@ class TreasureCard:
if self.state == -1:
print("Treasure hunt has not started yet or is completed.")
return False
print("Congrats! You obtained $" + str(self.treasures[self.state]))
self.state = self.state + 1
if self.state == 5:
print("All treasures have been found.")
@ -79,6 +80,7 @@ class ConcessionCard:
# 7 gold nuggets, as rewards when the player succefully connects a city to their concession. The player can choose
# which nugget to earn, and then discovers the associated reward (between 11 and 17 coins).
# A ConcessionCard is then composed of 7 nuggets, with the rewards randomly distributed.
def __init__(self):
availableValues = [11, 12, 13, 14, 15, 16, 17]
nuggetsNb = len(availableValues) - 1
@ -93,11 +95,18 @@ class ConcessionCard:
return {1, 2, 3, 4, 5, 6, 7} - self.taken
def takeReward(self, choice):
if not choice.isdigit():
print("Please choose a number.")
return False
choice = int(choice)
if choice not in range(1, 8):
print("This is not a valid number")
return False
if choice in self.taken:
print(str(choice) + " has already been obtained.")
return False
self.taken.add(choice)
print("Congrats! You obtained $" + str(self.nuggets[choice]))
print("Congrats! You obtained $" + str(self.nuggets[choice - 1]))
class Player:
@ -122,8 +131,10 @@ class Game:
# General data to generate
self.circus = Circus(playersNb)
# Mama O'Connell
self.treasure = TreasureCard()
self.mamaoc = MamaOConnel()
while not self.mamaoc.solver():
self.mamaoc = MamaOConnel()
# Players
self.players = []
@ -131,7 +142,42 @@ class Game:
color = input("Enter player " + str(n + 1) + "'s color: ")
self.players.append(Player(color))
def getPlayerByColor(self, color):
for player in self.players:
if player.color.lower() == color.lower():
return player
print("ERROR: player '" + color + "' is not defined")
return False
def enableConcession(self):
self.concession = True
def disableConcession(self):
self.concession = False
# if number = 0 print Mama O'Connel's location, else print hint #number
def printMamaHint(self, number):
if number not in range(0, 4):
return False
os.system('clear')
input("When you are ready, press Enter.")
print("")
match number:
case 0:
print("Mama O'Connel is at: " + self.mamaoc.location.name)
case 1:
print("Mama O'Connel is " + str(self.mamaoc.hint1[1]) + " cities from " + self.mamaoc.hint1[0].name)
case 2:
print("Mama O'Connel is " + str(self.mamaoc.hint2[1]) + " cities from " + self.mamaoc.hint2[0].name)
case 3:
print("Mama O'Connel is " + str(self.mamaoc.hint3[1]) + " cities from " + self.mamaoc.hint3[0].name)
print("")
input("When you are done, press Enter.")
os.system('clear')
def printStatus(self):
print("")
print("---------------------------------------------------------------------")
print("")
print("Ticket to Ride Legacy: Legends of the West")
print("")
@ -174,21 +220,22 @@ elif choice == "load":
if path == "":
path = "savefile.json"
myGame = loadData(path)
myGame.printStatus()
while True:
os.system('clear')
myGame.printStatus()
command = input("==> ")
while command not in ('load', 'save', 'next year', 'exit', 'enable circus', 'take circus', 'enable concessions',\
'take concession', 'enable treasure', 'take treasure'):
while command not in ('load', 'save', 'next year', 'exit', 'enable circus', 'take circus', 'enable concession',\
'take concession', 'disable concession', 'enable treasure', 'take treasure', 'mama hint 1', 'mama hint 2',\
'mama hint 3', 'mama location'):
print("")
print("Available commands:")
print(" Main: 'load', 'save', 'next year', 'exit'")
print(" Circus: 'enable circus', 'take circus'")
print(" Concessions: 'enable concessions', 'take concession'")
print(" Treasure: 'enable treasure', 'take treasure'")
print(" Concessions: 'enable concession', 'take concession', 'disable concession'")
print(" Mama O'Connel tracking: 'mama hint 1', 'mama hint 2', 'mama hint 3', 'mama location'")
command = input("==> ")
print("")
match command:
case 'load':
choice = input("WARNING! If you load, you will loose all unsaved changes. Are you sure? (type YES if you are) ")
@ -203,38 +250,36 @@ while True:
path = "savefile.json"
myGame.saveData(path)
print("Game saved!")
time.sleep(3)
case 'next year':
myGame.yearId = myGame.yearId + 1
case 'exit':
exit()
# TESTS
# Test of ConcessionCard
# cc = ConcessionCard()
# userChoice = 3
# print(cc.nuggets)
# cc.takeReward(userChoice - 1)
# print(cc.nuggets)
# print(cc.taken)
# print("Remaining: " + str(cc.getRemainingPepites()))
# cc.takeReward(userChoice - 1)
# print(cc.nuggets)
# print(cc.taken)
# print("Remaining: " + str(cc.getRemainingPepites()))
# Test of Player
# myGame = Game()
# myGame.initGame()
# myGame.printStatus()
# myGame.treasure.enable()
# myGame.printStatus()
# myGame.treasure.takeTreasure()
# myGame.treasure.takeTreasure()
# myGame.treasure.takeTreasure()
# myGame.treasure.takeTreasure()
# myGame.printStatus()
# myGame.treasure.takeTreasure()
# myGame.printStatus()
case 'enable circus':
myGame.circus.enable()
case 'take circus':
myGame.circus.takeWagon()
case 'enable treasure':
myGame.treasure.enable()
case 'take treasure':
myGame.treasure.takeTreasure()
case 'enable concession':
myGame.enableConcession()
case 'take concession':
choice = input("Player? ==> ")
player = myGame.getPlayerByColor(choice)
if player == False:
print("Not a valid player.")
else:
choice = input("Which nugget? ==> ")
print("")
player.concession.takeReward(choice)
case 'disable concession':
myGame.disableConcession()
case 'mama hint 1':
myGame.printMamaHint(1)
case 'mama hint 2':
myGame.printMamaHint(2)
case 'mama hint 3':
myGame.printMamaHint(3)
case 'mama location':
myGame.printMamaHint(0)

View File

@ -1,4 +1,3 @@
import os
import random
class City:
@ -275,6 +274,6 @@ class MamaOConnel:
return False
return True
myMama = MamaOConnel()
while not myMama.solver():
myMama = MamaOConnel()
# myMama = MamaOConnel()
# while not myMama.solver():
# myMama = MamaOConnel()