BS ist ein Kartenspiel, bei dem es darum geht, alle Karten zu verlieren.
Ein Spiel besteht aus vier Spielern und einem Kartenspiel mit 52 Karten. Jeder Spieler erhält zufällig 13 Karten. Normalerweise sind die Karten mit 2 - 10, Ass, Bube, Dame, König beschriftet, aber der Einfachheit halber werden die Karten mit einer Zahl von 0 - 12 einschließlich beschriftet. Obwohl die Anzahl der Karten in der Hand eines Spielers eine öffentliche Information ist, weiß nur der Spieler, welche spezifischen Karten in seiner Hand sind.
Das Spiel läuft wie folgt ab: Der erste Spieler legt so viele Karten mit der Aufschrift 0 auf den Ablagestapel, wie er möchte (beachten Sie, dass er nicht alle Karten mit der Aufschrift 0 spielen muss , obwohl dies normalerweise in seinem besten Interesse liegt ). Er muss mindestens eine Karte spielen. Der zweite Spieler spielt so viele Karten, wie er mit 1 beschriften möchte , der dritte Spieler spielt 2 und so weiter. Nach 12 wird es auf 0 zurückgesetzt.
Was passiert, wenn Sie keine der Karten haben, die Sie spielen sollen? Denken Sie daran, dass Sie mindestens eine Karte spielen müssen - Sie können sogar jede beliebige Karte spielen! (Selbst wenn Sie die richtige Karte haben, können Sie lügen und eine andere Karte spielen.) Jemand kann Sie jedoch anrufen und sagen: "BS!" Wenn dieser Jemand Recht hat und Sie gelogen haben, müssen Sie alle Karten auf dem Ablagestapel nehmen. als Belohnung legt der Spieler, der dich gerufen hat, zufällig eine seiner Karten auf den Ablagestapel. Wenn sich der Ankläger irrt, muss er jedoch alle Karten auf dem Ablagestapel nehmen. Beachten Sie, dass Sie nicht über die Anzahl der Karten lügen können, die Sie spielen.
Nähere Infos:
- Zu Beginn des Spiels werden vier zufällige Spieler zum Spielen ausgewählt. Da es mindestens 1000 Spiele geben wird, hat jeder Spieler die Möglichkeit zu spielen. Die Zugreihenfolge wird zu Beginn des Spiels zufällig festgelegt
- Wenn Sie eine richtige und eine falsche Karte zurückgeben, wird dies als Lüge betrachtet (dh wenn Sie 2 s geben sollten und Sie eine 2 und eine 1 gaben , dann lügt dies).
- Wenn zwei oder mehr Spieler gleichzeitig BS sagen, wird einer nach dem Zufallsprinzip ausgewählt.
- Ihre Punktzahl ist der Prozentsatz der Spiele, die Sie gewinnen.
- Es gibt maximal 1000 Runden, wobei jeder Spieler eine Runde einmal spielt. Normalerweise gewinnt jemand davor. Wenn niemand gewinnt, wird dies auf die Gesamtzahl der gespielten Spiele angerechnet, aber niemand gewinnt.
Spec:
Sie sollten eine Klasse schreiben, die erweitert Player
. Es wird so aussehen:
package players;
import java.util.ArrayList;
import java.util.List;
import controller.*;
public class Player1 extends Player {
@Override
protected List<Card> requestCards(int card, Controller controller) {
Card[] hand = getHand();
List<Card> ret = new ArrayList<Card>();
for (Card c : hand) {
if (c.getNumber() == card) {
ret.add(c);
}
}
if (ret.size() == 0) ret.add(hand[0]);
return ret;
}
@Override
protected boolean bs(Player player, int card, int numberOfCards, Controller controller) {
return numberOfCards >= 3;
}
protected void update(Controller controller) {
// This method gets called once at the end of every round
}
protected void initialize(Controller controller) {
// This method gets called once at the beginning once all the cards are dealt
}
public String toString() {
return "Player 1";
}
}
Die Methode requestCards
wird aufgerufen, wenn Sie an der Reihe sind. Das Argument card
ist die Kartennummer, die Sie angeben sollen. Sie geben eine Liste der Karten zurück, die Sie in den Ablagestapel legen möchten. Der Spieler oben prüft, ob er Karten des gewünschten Kartentyps hat. Wenn nicht, spielt er einfach seine erste Karte aus und hofft, dass niemand nachschaut.
Die Methode bs
wird aufgerufen, wenn eine andere Person eine Karte ausspielt. Das erste Argument ist der Spieler, die zweite - die Karte , die er wurde angeblich zu spielen, und die dritte - die Zahl dieser Art von Karte , die er behauptet , dass er gespielt hat. Zurück, true
wenn Sie "BS" anrufen möchten. Im obigen Code nennt der Spieler nur "BS", wenn der andere Spieler behauptet, 3 oder mehr Karten des angeforderten Typs zu haben.
Das letzte Argument für beide Methoden ist controller
, dass nur der Controller das Spiel steuert. Über den Controller können Sie öffentlichere Informationen abrufen, z. B. die Anzahl der Karten im Ablagestapel oder die Liste und die Reihenfolge der Spieler.
Die toString
Methode ist optional.
Conroller auf GitHub: https://github.com/prakol16/bs
Wenn Sie eine Nicht-Java-Lösung veröffentlichen möchten, können Sie die in https://github.com/LegionMammal978/bs (Credits für LegionMammal978) bereitgestellte Schnittstelle verwenden, und ich werde versuchen, sie zu integrieren.
Anzeiger bisher:
class players.PlayerConMan: 2660/4446 = 59.82905982905983%
class players.CalculatingLiar: 2525/4426 = 57.049254405784005%
class players.PlayerTruthy: 1653/4497 = 36.75783855903936%
class players.Player4: 1446/4425 = 32.67796610169491%
class players.Player1: 536/4382 = 12.23185759926974%
class players.Player3: 493/4425 = 11.141242937853107%
class players.Player2: 370/4451 = 8.312738710402156%
class players.LiePlayer: 317/4432 = 7.152527075812275%
class players.Hoarder: 0/4516 = 0.0%
PlayerConMan gewinnt, aber CalculatingLiar steht kurz bevor. Diese Werte scheinen konsistent zu sein - sie sind jedes Mal ziemlich gleich.
Controller.toString()
öffentlich zu machen, da es die Hände aller Spieler und den Ablagestapel zurückgibt.