Package monopoly.model.personality

Source Code of monopoly.model.personality.Bank

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package monopoly.model.personality;

import java.util.ArrayList;
import java.util.List;
import monopoly.model.resource.ILand;

/**
* Определяет банк игры.
* @author Роман
*/
public class Bank implements ILandSeller {

    /**
     * Земельный владения банка.
     */
    private List<ILand> _lands;

    /**
     * Задать банк.
     */
    public Bank() {
        _lands = new ArrayList<ILand>();
    }

    /**
     * Проверяет является ли игрок банкротом.
     * @param p игрок.
     * @return результат проверки.
     */
    public boolean isBankrupt(Player p) {
        return p.capital() == 0;
    }

    /**
     * Сделать банкротом игрока.
     * Все имущество игрока переходит в собственность банка.
     * @param p игрок.
     */
    public void doBankrupt(Player p) {
        p.takeMoney(p.money());

        for (ILand land : p.landowning()) {
            p.removeLand(land);
            addLand(land);
        }
    }

    /**
     * Отобрать у игрока указанную денежную сумму.
     * @param p игрок.
     * @param amount денежная сумма.
     * @return флаг, показываюший была ли изъята указанная сумма.
     */
    public boolean takeAwayMoney(Player p, int amount) {
        return p.takeMoney(amount);
    }

    /**
     * Дать игроку указанную денежную сумму.
     * @param p игрок.
     * @param amount денежная сумма.
     * @return флаг, показываюший была ли добавлена указанная сумма.
     */
    public boolean giveMoney(Player p, int amount) {
        return p.addMoney(amount);
    }

    /**
     * Конфисковать у игрока первый по списку земельный участок.
     * @param p игрок.
     * @return конфискованный участок или null.
     */
    public ILand confiscateLand(Player p) {
        List<ILand> lands = p.landowning();
        if (lands.isEmpty()) {
            return null;
        }

        ILand confiscated = lands.get(0);
        p.removeLand(confiscated);
        p.addMoney(confiscated.confiscationCost());
        addLand(confiscated);

        return confiscated;
    }

    /**
     * Продать указанный участок земли.
     * @param buyer покупатель.
     * @param amount сумма сделки.
     * @param land продаваемый земельный участок.
     * @return успешность сделки.
     */
    public boolean sellLand(ILandBuyer buyer, int amount, ILand land) {
        if (buyer == this) {
            return false;
        }

        if (land.owner() != this || _lands.contains(land) == false) {
            return false;
        }

        if (buyer.takeMoney(amount) == false
                || removeLand(land) == false) {
            return false;
        }

        buyer.addLand(land);
        return true;
    }

    /**
     * Добавить во владения новый земельный участок.
     * @param land земельный участок.
     */
    public void addLand(ILand land) {
        if (land.owner() == this || _lands.contains(land)) {
            return;
        }
        land.setOwner(this);
        _lands.add(land);
    }

    /**
     * Изъять из владений указанный земельный участок.
     * @param land земельный участок
     * @return возможно ли забрать указанный земельный участок у владельца.
     */
    public boolean removeLand(ILand land) {
        if (land.owner() != this || _lands.remove(land) == false) {
            return false;
        }
        land.setOwner(null);

        return true;
    }

    /**
     * Получить все земельный владения.
     * @return список земельных участков у банка.
     */
    public List<ILand> landowning() {
        return _lands;
    }

    /**
     * Получить наименование банка.
     * @return наименование.
     */
    public String name() {
        return "Банк";
    }

    /**
     * Получить денежную сумму.
     * @return денежная сумма.
     */
    public int money() {
        return Integer.MAX_VALUE;
    }

    /* Методы, находящиеся не в компетенции банка. */
    public boolean payRent(ILand land) {
        return true;
    }

    public boolean addMoney(int amount) {
        return true;
    }

    public boolean takeMoney(int amount) {
        return true;
    }
}
TOP

Related Classes of monopoly.model.personality.Bank

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.