def do_doodad_action(a_player, picked_card, verbose): """Do action on Doodad Card.""" picked_card_type = picked_card.card_type if verbose: print("In do_doodad_action, Savings:", a_player.savings, "Card:", picked_card) assert picked_card_type in ["OneTimeExpense", "ChildCost", "NewLoan"] if picked_card_type == "OneTimeExpense": payment = picked_card.one_time_payment if a_player.savings < payment: new_loan_amount = (int(( (float(payment) - float(a_player.savings)) / 1000) + 1) * 1000) new_loan = loans.Loan("Bank Loan", new_loan_amount, int(new_loan_amount / 10), True) a_player.make_loan(new_loan) if verbose: print("Making payment of", payment) print("Savings before:", a_player.savings) a_player.make_payment(payment) if verbose: print("Savings after:", a_player.savings) elif picked_card_type == "ChildCost": any_cost_per_child = picked_card.any_child_payment per_cost_per_child = picked_card.each_child_payment no_children = a_player.no_children if no_children > 0: if verbose: print("You have kids, you must pay") payment = any_cost_per_child + no_children * per_cost_per_child if a_player.savings < payment: new_loan_amount = (int(( (float(payment) - float(a_player.savings)) / 1000) + 1) * 1000) new_loan = loans.Loan("Bank Loan", new_loan_amount, int(new_loan_amount / 10), True) a_player.make_loan(new_loan) a_player.make_payment(payment) else: if verbose: print("No kids, no payment required") elif picked_card_type == "NewLoan": new_loan_amount = picked_card.loan_amount new_loan = loans.Loan(picked_card.loan_title, new_loan_amount, picked_card.loan_payment, False) a_player.make_loan(new_loan) a_player.make_payment(new_loan_amount + picked_card.one_time_payment) else: assert ValueError
def get_profession_defs(profession_defs_fn): """Load Professions.""" try: profession_defs_temp = json_read_write_file.load_json( profession_defs_fn) except OSError: print("No good Profession dict json file found, file not found, " + "please fix") raise OSError except ValueError: print("No good Profession dict json file found, ValueError, " + "please fix") raise ValueError else: profession_defs = {} for profession in iter(profession_defs_temp): loan_list = [] for a_loan in iter(profession_defs_temp[profession]["Loans"]): if a_loan == "Bank Loan": partial_payment_allowed = True else: partial_payment_allowed = False loan_list.append( loans.Loan( a_loan, profession_defs_temp[profession]["Loans"] [a_loan]["Balance"], profession_defs_temp[profession] ["Loans"][a_loan]["Payment"], partial_payment_allowed)) profession_defs[profession] = Profession( profession, profession_defs_temp[profession]["Salary"], profession_defs_temp[profession]["ExpenseTaxes"], profession_defs_temp[profession]["ExpenseOther"], profession_defs_temp[profession]["CostPerChild"], profession_defs_temp[profession]["Savings"], loan_list) return profession_defs
def buy_real_estate(self, real_estate_asset, verbose=True): """Buy real estate.""" if real_estate_asset.down_payment > self.savings: loan_amount = int( round((float(real_estate_asset.down_payment - self.savings) / 1000) + 0.4999, 0) * 1000) if player_choice.choose_to_get_loan_to_buy_asset( self, real_estate_asset, loan_amount, verbose): self.make_loan( loans.Loan("Bank Loan", loan_amount, int(loan_amount / 10), True)) else: return False self.real_estate_assets.append(real_estate_asset) self.savings -= real_estate_asset.down_payment return True
def buy_business(self, business_asset, verbose=True): """Buy a business.""" if business_asset.down_payment > self.savings: loan_amount = int( round( (float(business_asset.down_payment - self.savings) / 1000) + 0.4999, 0) * 1000) if player_choice.choose_to_get_loan_to_buy_asset( self, business_asset, loan_amount, verbose): self.make_loan( loans.Loan("Bank Loan", loan_amount, int(loan_amount / 10), True)) else: return False self.business_assets.append(business_asset) self.savings -= business_asset.down_payment return True
def buy_stock(self, stock_asset, cost_per_share=0, verbose=True): """Buy stock.""" if cost_per_share == 0: cost_per_share = stock_asset.cost_per_share if ((stock_asset.no_shares * stock_asset.cost_per_share) > self.savings): loan_amount = int( round((float(cost_per_share * stock_asset.no_shares - self.savings) / 1000) + 0.4999, 0) * 1000) if assets.choose_to_get_loan_to_buy_asset(self, stock_asset, loan_amount, verbose): self.make_loan( loans.Loan("Bank Loan", loan_amount, int(loan_amount / 10), True)) else: return False self.stock_assets.append(stock_asset) self.savings -= stock_asset.no_shares * cost_per_share return True
def board_space_action(player_on_board, new_board_space, verbose, small_deal_card_deck, big_deal_card_deck, doodad_card_deck, market_card_deck, board): """Determine what action is needed for board space and make it so.""" a_player = player_on_board[0] if a_player.strategy.manual: verbose = True # if verbose: print("Board Space:", new_board_space) space_type = new_board_space.board_space_type if space_type == "Opportunity": small_or_big_card = player_choice.choose_small_or_big_deal_card( a_player, verbose) if small_or_big_card == "small": picked_card = small_deal_card_deck.take_top_card() if verbose: print("Small Deal Picked Card:", picked_card, "\nNo. Cards left:", small_deal_card_deck.no_cards) do_small_deal_action(a_player, picked_card, board, verbose) elif small_or_big_card == "big": picked_card = big_deal_card_deck.take_top_card() if verbose: print("Big Deal Picked Card:", picked_card, "\nNo. Cards left:", big_deal_card_deck.no_cards) do_big_deal_action(a_player, picked_card, board, verbose) elif space_type == "Doodads": picked_card = doodad_card_deck.take_top_card() if verbose: print("Doodad Picked Card:", picked_card, "\nNo. Cards left:", doodad_card_deck.no_cards) do_doodad_action(a_player, picked_card, verbose) elif space_type == "Charity": donate_to_charity_choice = player_choice.choose_to_donate_to_charity( a_player.strategy, verbose) if donate_to_charity_choice: if a_player.savings > 0.1 * a_player.salary: a_player.make_payment(int(0.1 * a_player.salary)) a_player.start_charity_turns() if verbose: print("Charity started") else: if verbose: print("Sorry, you don't have enough money for charity") elif space_type == "Pay Check": return # Paycheck handled if passed or landed-on in main routine elif space_type == "The Market": picked_card = market_card_deck.take_top_card() if verbose: print("Market Picked Card:", picked_card, "\nNo. Cards left:", market_card_deck.no_cards) do_market_action(a_player, board, picked_card, verbose) elif space_type == "Baby": children = a_player.no_children a_player.have_child() if verbose: print("Children-Before: " + str(children) + "\nChildren-After : " + str(a_player.no_children)) return elif space_type == "Downsized": a_player.refresh() total_expenses = a_player.total_expenses if total_expenses > a_player.savings: new_loan_amount = int(( (float(total_expenses) - float(a_player.savings)) / 1000.0) + 1.0) * 1000 if verbose: print("Not enough money, getting loan for", str(new_loan_amount) + ".") new_loan = loans.Loan("Bank Loan", new_loan_amount, int(new_loan_amount / 10), True) a_player.make_loan(new_loan) a_player.make_payment(total_expenses) a_player.start_layoff() else: print("Board Space Type unknown: " + space_type) assert ValueError
def do_small_deal_action(this_player, picked_card, board, verbose): """Do action indicated on Small Deal Card.""" picked_card_type = picked_card.card_type if verbose: print("In do_small_deal_action, Savings:", this_player.savings, "Card:", picked_card) assert picked_card_type in [ "Stock", "StockSplit", "HouseForSale", "StartCompany", "Asset", "Land", "LoanNotToBeRepaid", "CostIfRentalProperty" ] if picked_card_type == "Stock": new_stock = assets.Stock(picked_card.symbol, 0, picked_card.price, picked_card.dividend, picked_card.price_range_low, picked_card.price_range_high) if not player_choice.choose_to_buy_stock_asset(this_player, new_stock, verbose): del new_stock return this_player.buy_stock(new_stock, picked_card.price, verbose) # elif picked_card_type == "StockSplit": stock_symbol = picked_card.symbol stock_split_ratio = picked_card.split_ratio the_players = board.players for each_player_on_board in the_players: each_player = each_player_on_board[0] list_of_stocks = each_player.stock_assets for each_stock in list_of_stocks: if each_stock.name == stock_symbol: each_stock.stock_split(stock_split_ratio) # elif picked_card_type == "HouseForSale": new_house_asset = assets.RealEstate(picked_card.title, picked_card_type, "House", picked_card.price, picked_card.down_payment, picked_card.cash_flow, picked_card.price_range_low, picked_card.price_range_high, units=0, acres=0) if player_choice.choose_to_buy_asset(this_player, new_house_asset, verbose): this_player.buy_real_estate(new_house_asset, verbose) else: del new_house_asset elif picked_card_type in ["StartCompany", "Asset"]: new_business_asset = assets.Business( picked_card.title, picked_card_type, picked_card.price, picked_card.down_payment, picked_card.cash_flow, picked_card.price_range_low, picked_card.price_range_high) if player_choice.choose_to_buy_asset(this_player, new_business_asset, verbose): this_player.buy_business(new_business_asset, verbose) else: del new_business_asset elif picked_card_type == "Land": new_land_asset = assets.RealEstate( picked_card.title, picked_card_type, "None", picked_card.price, picked_card.down_payment, 0, # cashFlow picked_card.price_range_low, picked_card.price_range_high, 0, # units picked_card.acres) if player_choice.choose_to_buy_asset(this_player, new_land_asset, verbose): this_player.buy_real_estate(new_land_asset, verbose) else: del new_land_asset elif picked_card_type == "LoanNotToBeRepaid": loan_not_to_be_repaid_amount = picked_card.price if this_player.savings < loan_not_to_be_repaid_amount: new_loan_amount = (int(((float(loan_not_to_be_repaid_amount) - float(this_player.savings)) / 1000) + 1) * 1000) if verbose: print("Not enough money, getting loan for", str(new_loan_amount) + ".") new_loan = loans.Loan("Bank Loan", new_loan_amount, int(new_loan_amount / 10), True) this_player.make_loan(new_loan) this_player.make_payment(loan_not_to_be_repaid_amount) elif picked_card_type == "CostIfRentalProperty": cost_if_rental_property_amount = picked_card.price the_players = board.players for each_player_on_board in the_players: each_player = each_player_on_board[0] if len(each_player.real_estate_assets) > 0: if each_player.savings < cost_if_rental_property_amount: new_loan_amount = ( int(((float(cost_if_rental_property_amount) - float(each_player.savings)) / 1000) + 1) * 1000) if verbose: print("Not enough money, getting loan for", str(new_loan_amount) + ".") new_loan = loans.Loan("Bank Loan", new_loan_amount, int(new_loan_amount / 10), True) each_player.make_loan(new_loan) each_player.make_payment(cost_if_rental_property_amount) else: assert ValueError