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
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
0
 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