/* Copyright (C) 2010 Karlsruhe Institute of Technology
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package edu.kit.iti.pse.iface;
/**
* Erweiterte Server-Schnittstelle, die auch Handel zwischen Spieler erlaubt.
* @author bruns
*
*/
public interface IServerTrade extends IServer {
/**
* Eröffnet eine Handelssitzung mit einem weiteren Spieler.
* Angebotene Handelsware kann mit <code>offerX()</code> hinzugefügt werden.
* Erwartete Handelsware kann mit <code>requireX()</code> hinzugefügt werden.
* Der Handelsvorschlag wird mit <code>proposeTrade()</code> oder <code>cancelTrade()</code> abgeschlossen.
* Weitere Aktionen können während dieser Zeit nicht durchgeführt werden.
* @param actingPlayer Der handelnde Spieler.
* @param partnerPlayer Der Handelspartner (-1 für die Bank).
*/
public boolean initTrade (int actingPlayer, int partnerPlayer);
/**
* Gibt den Zustand einer Handelssitzung an.
* @return -1 falls keine Handelssitzung läuft<br>
* 0 falls eine Handelssitzung läuft und der handelnde Spieler noch kein Angebot abgegeben hat<br>
* 1 falls eine Handelssitzung läuft, der handelnde Spieler ein Angebot abgegeben hat,
* der Handelspartner aber noch keine Entscheidung getroffen hat<br>
* 2 falls gerade eine Handelssitzung mit negativem Ergebnis beendet wurde <i>(optional)</i>,
* in diesem Zustand müssen noch alle Daten des Angebots abrufbar sein<br>
* 3 falls gerade eine Handelssitzung mit positivem Ergebnis beendet wurde <i>(optional)</i>,
* in diesem Zustand müssen noch alle Daten des Angebots abrufbar sein
*/
public int getTradeState();
/**
* Liefert den Handelspartner.
*/
public int getPartner();
/**
* Liefert den Initiator des Handels.
* @return Die Id des Initiators.
* @since SVN Revision 17.
*/
public int getActing();
/**
* Bietet Geld im Handel.
* Die Bank nimmt kein Geld an.
* @param playerID Der handelnde Spieler
* @param amount Höhe des Geldbetrags
*/
public boolean offerCash (int playerID, int amount);
/**
* Bietet eine "Du kommst aus dem Gefängnis frei"-Karte im Handel an.
* Die Bank nimmt keine Karten an.
* @param playerID Der handelnde Spieler
*/
public boolean offerGetOutOfJailCard (int playerID);
/**
* Bietet ein Grundstück im Handel an.
* Falls der Handel mit der Bank stattfindet, wird automatisch der entsprechende Geldwert auf die Soll-Seite gesetzt.
* @param playerID Der handelnde Spieler
* @param position Position des Grundstücks
*/
public boolean offerEstate (int playerID, int position);
/**
* Verlangt Geld im Handel.
* Von der Bank wird automatisch Geld verlangt.
* @param playerID Der handelnde Spieler
* @param amount Höhe des Geldbetrags
*/
public boolean requireCash (int playerID, int amount);
/**
* Verlangt eine "Du kommst aus dem Gefängnis frei"-Karte im Handel.
* Muss sich im Besitz des Handelspartners befinden.
*/
public boolean requireGetOutOfJailCard (int playerID);
/**
* Verlangt ein Grundstück im Handel.
* Muss sich im Besitz des Handelspartners befinden.
* @param playerID Der handelnde Spieler
* @param position Position des Grundstücks
*/
public boolean requireEstate (int playerID, int position);
/**
* Liefert eine Liste der vom handelnden Spieler angebotenen Grundstücke.
*/
public int[] getOfferedEstates();
/**
* Liefert das vom handelnden Spieler angebotene Geld.
*/
public int getOfferedCash ();
/**
* Liefert die Zahl der vom handelnden Spieler angebotenen "Gefängnis frei"-Karten.
*/
public int getNumberOfOfferedGetOutOfJailCards ();
/**
* Liefert eine Liste der vom handelnden Spieler verlangten Grundstücke.
*/
public int[] getRequiredEstates ();
/**
* Liefert das vom handelnden Spieler verlangte Geld.
*/
public int getRequiredCash();
/**
* Liefert die Zahl der vom handelnden Spieler verlangten "Gefängnis frei"-Karten.
*/
public int getNumberOfRequiredGetOutOfJailCards();
/**
* Bricht die aktuelle Handelssitzung ohne Ergebnis ab.
*/
public boolean cancelTrade (int playerID);
/**
* Unterbreitet dem Handelspartner einen Handelsvorschlag.
* Handelswaren wurden vorher mit <code>offerX()</code> bzw. <code>requireX()</code> hinzugefügt.
* Falls der Handelspartner nicht die Bank ist,
* wird er daraufhin gefragt, ob er dem Handel zustimmt.
* Das Ergebnis des Handels kann dann wieder mit <code>getGameStatusMessage()</code> erfragt werden.
*/
public boolean proposeTrade (int playerID);
}