BS est un jeu de cartes où le but du jeu est de perdre toutes vos cartes.
Un jeu se compose de quatre joueurs et d'un jeu de 52 cartes. Chaque joueur reçoit au hasard 13 cartes. Normalement, les cartes sont étiquetées 2 - 10, Ace, Jack, Queen, King, mais pour plus de simplicité, les cartes seront étiquetées avec un nombre compris entre 0 et 12 inclus. Bien que le nombre de cartes dans la main d'un joueur soit une information publique, seul le joueur sait quelles cartes spécifiques sont dans sa main.
Le jeu se déroule comme suit: le premier joueur place autant de cartes étiquetées 0 qu'il le souhaite dans la défausse (notez qu'il n'est pas obligé de jouer toutes ses cartes étiquetées 0 , bien qu'il soit généralement dans son intérêt de le faire ). Il doit jouer au moins une carte. Le deuxième joueur joue autant de cartes qu'il veut étiqueter 1 , le troisième joueur joue 2 , et ainsi de suite. Après 12, il revient à 0.
Que se passe-t-il si vous n'avez aucune des cartes que vous êtes censé jouer? N'oubliez pas, vous devez jouer au moins une carte - en fait, vous pouvez jouer toutes les cartes que vous voulez! (En fait, même si vous avez la bonne carte, vous pouvez mentir et jouer une autre carte). Cependant, quelqu'un peut vous appeler et dire: "BS!" Si cette personne a raison et que vous avez menti, vous devez prendre toutes les cartes de la défausse; en récompense, le joueur qui vous a appelé place au hasard une de ses cartes dans la défausse. Si l'accusateur a tort, cependant, il doit prendre toutes les cartes de la pile de défausse. Notez que vous ne pouvez pas mentir sur le nombre de cartes que vous jouez.
Informations plus détaillées:
- Au début du jeu, quatre joueurs aléatoires sont choisis pour jouer. Puisqu'il y aura au moins 1000 parties, chaque joueur aura une chance de jouer. L'ordre du tour est décidé au hasard en début de partie
- Si vous retournez une carte correcte et une carte incorrecte, cela est considéré comme un mensonge (c'est-à-dire si vous étiez censé donner 2 s et que vous en avez donné un 2 et un 1 , alors c'est mentir)
- Si deux joueurs ou plus disent tous les deux BS en même temps, alors l'un est choisi au hasard.
- Votre score est le pourcentage de parties que vous gagnez.
- Il y a un maximum de 1000 tours, où un tour est joué par chaque joueur une fois. Habituellement, quelqu'un gagne avant cela. Si personne ne gagne, il est compté dans le nombre total de parties jouées, mais personne ne gagne.
Spec:
Vous devez écrire une classe qui s'étend Player
. Cela ressemblera à:
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";
}
}
La méthode requestCards
est appelée quand c'est votre tour. L'argument card
est le numéro de carte que vous êtes censé fournir. Vous retournez une liste de cartes que vous souhaitez mettre dans la pile de défausse. Le joueur ci-dessus vérifie s'il a des cartes du type de carte demandé; sinon, il joue simplement sa première carte et espère que personne ne vérifie.
La méthode bs
est appelée chaque fois que quelqu'un d'autre joue une carte. Le premier argument est le joueur, le second - la carte qu'il était censé jouer, et le troisième - le numéro de ce type de carte qu'il prétend avoir joué. Revenez true
si vous voulez appeler "BS". Dans le code ci-dessus, le joueur n'appelle "BS" que lorsque l'autre joueur prétend avoir 3 cartes ou plus du type demandé.
Le dernier argument pour les deux méthodes est controller
, qui est juste le contrôleur qui contrôle le jeu. À partir du contrôleur, vous pouvez obtenir plus d'informations publiques, telles que le nombre de cartes dans la pile de défausse ou la liste et l'ordre des tours des joueurs.
La toString
méthode est facultative.
Contrôleur sur GitHub: https://github.com/prakol16/bs
Si vous souhaitez publier une solution non java, vous pouvez utiliser l'interface fournie dans https://github.com/LegionMammal978/bs (crédits à LegionMammal978) et je vais essayer de l'intégrer.
Tableau de bord jusqu'à présent:
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 est en train de gagner, mais CalculatingLiar est de près. Ces scores semblent cohérents - ils sont à peu près les mêmes à chaque fois.
Controller.toString()
au public, car cela rend les mains de tous les joueurs et la pile de défausse.