BS adalah permainan kartu di mana objek permainannya adalah kehilangan semua kartu Anda.
Gim terdiri dari empat pemain dan setumpuk 52 kartu. Setiap pemain diberikan 13 kartu secara acak. Biasanya, kartu diberi label 2 - 10, Ace, Jack, Queen, King, tetapi untuk kesederhanaan, kartu akan diberi label dengan angka dari 0 - 12 inklusif. Meskipun jumlah kartu di tangan pemain adalah informasi publik, hanya pemain yang tahu kartu apa yang ada di tangannya.
Permainan berjalan sebagai berikut: pemain pertama menempatkan kartu yang berlabel 0 sebanyak yang ia inginkan dalam tumpukan kartu (perhatikan bahwa ia tidak diharuskan memainkan semua kartunya yang berlabel 0 , meskipun biasanya itu merupakan kepentingan terbaiknya untuk melakukannya) ). Dia harus memainkan setidaknya satu kartu. Pemain kedua memainkan kartu sebanyak yang dia ingin beri label 1 , pemain ketiga memainkan 2 , dan seterusnya. Setelah 12, itu me-reset ke 0.
Apa yang terjadi jika Anda tidak memiliki kartu yang seharusnya Anda mainkan? Ingat, Anda harus memainkan setidaknya satu kartu - pada kenyataannya, Anda dapat memainkan kartu apa pun yang Anda inginkan! (Sebenarnya, bahkan jika Anda memiliki kartu yang tepat, Anda dapat berbohong dan memainkan kartu yang berbeda). Namun, seseorang dapat memanggil Anda keluar dan berkata, "BS!" Jika seseorang itu benar dan Anda telah berbohong, maka Anda harus mengambil semua kartu di tumpukan dibuang; sebagai hadiah, pemain yang memanggil Anda secara acak menempatkan salah satu kartu mereka di tumpukan kartu buangan. Namun, jika penuduh salah, ia harus mengambil semua kartu di tumpukan kartu buangan. Perhatikan bahwa Anda tidak dapat berbohong tentang jumlah kartu yang Anda mainkan.
Info lebih detail:
- Di awal permainan, empat pemain acak dipilih untuk bermain. Karena akan ada setidaknya 1000 pertandingan, setiap pemain akan mendapatkan kesempatan untuk bermain. Urutan giliran ditentukan secara acak di awal permainan
- Jika Anda mengembalikan satu kartu yang benar dan satu kartu yang salah, maka itu dianggap bohong (yaitu jika Anda seharusnya memberikan 2 s, dan Anda memberikan satu 2 dan satu 1 , maka itu bohong)
- Jika dua atau lebih pemain mengatakan BS secara bersamaan, maka satu akan dipilih secara acak.
- Skor Anda adalah persentase game yang Anda menangkan.
- Ada maksimum 1000 putaran, di mana satu putaran adalah setiap pemain terjadi sekali. Biasanya, seseorang menang sebelum ini. Jika tidak ada yang menang, maka itu dihitung terhadap jumlah total permainan yang dimainkan, tetapi tidak ada yang menang.
Spesifikasi:
Anda harus menulis kelas yang diperluas Player
. Ini akan terlihat seperti:
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";
}
}
Metode requestCards
ini dipanggil saat giliran Anda. Argumennya card
adalah nomor kartu yang seharusnya Anda berikan. Anda mengembalikan daftar kartu yang ingin Anda masukkan ke tumpukan kartu buangan. Pemain di atas memeriksa untuk melihat apakah dia memiliki kartu jenis kartu yang diminta; jika tidak, ia cukup memainkan kartu pertamanya dan berharap tidak ada yang memeriksa.
Metode bs
ini dipanggil setiap kali orang lain memainkan kartu. Argumen pertama adalah pemain, yang kedua - kartu yang seharusnya ia mainkan, dan yang ketiga - jumlah jenis kartu yang ia klaim telah ia mainkan. Kembali true
jika Anda ingin memanggil "BS." Dalam kode di atas, pemain hanya memanggil "BS" ketika pemain lain mengklaim memiliki 3 kartu atau lebih dari jenis yang diminta.
Argumen terakhir untuk kedua metode adalah controller
, yang hanya merupakan pengontrol yang mengontrol permainan. Dari pengontrol, Anda bisa mendapatkan lebih banyak informasi publik, seperti jumlah kartu dalam tumpukan kartu atau daftar dan mengubah urutan para pemain.
The toString
metode adalah opsional.
Conroller di GitHub: https://github.com/prakol16/bs
Jika Anda ingin memposting solusi non-java, Anda dapat menggunakan antarmuka yang disediakan di https://github.com/LegionMammal978/bs (kredit ke LegionMammal978) dan saya akan mencoba mengintegrasikannya.
Papan skor sejauh ini:
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 menang, tetapi CalculatingLiar hampir berakhir. Skor ini tampaknya konsisten - mereka cukup sama setiap saat.
Controller.toString()
ke publik, karena mengembalikan tangan semua pemain dan tumpukan kartu buangan.