BS là một trò chơi bài trong đó đối tượng của trò chơi là mất tất cả các thẻ của bạn.
Một trò chơi bao gồm bốn người chơi và một bộ bài 52 lá. Mỗi người chơi được chia ngẫu nhiên 13 thẻ. Thông thường, thẻ được dán nhãn 2 - 10, Ace, Jack, Queen, King, nhưng để đơn giản, các thẻ sẽ được dán nhãn với một số từ 0 - 12. Mặc dù số lượng thẻ trong tay người chơi là thông tin công khai, nhưng chỉ người chơi mới biết thẻ cụ thể trong tay mình là gì.
Trò chơi diễn ra như sau: người chơi đầu tiên đặt bao nhiêu thẻ có nhãn 0 như anh ta muốn vào đống bỏ đi (lưu ý rằng anh ta không bắt buộc phải chơi tất cả các thẻ có nhãn 0 , mặc dù vậy, đó thường là lợi ích tốt nhất của anh ta để làm như vậy ). Anh ta phải chơi ít nhất một thẻ. Người chơi thứ hai chơi bao nhiêu thẻ mà anh ta muốn gắn nhãn 1 , người chơi thứ ba chơi 2 , v.v. Sau 12, nó đặt lại về 0.
Điều gì xảy ra nếu bạn không có bất kỳ thẻ nào mà bạn phải chơi? Hãy nhớ rằng, bạn phải chơi ít nhất một thẻ - trên thực tế, bạn có thể chơi bất kỳ thẻ nào bạn muốn! (Trên thực tế, ngay cả khi bạn có thẻ phù hợp, bạn có thể nói dối và chơi một thẻ khác). Tuy nhiên, ai đó có thể gọi bạn ra và nói, "BS!" Nếu ai đó đúng và bạn đã nói dối, thì bạn phải lấy tất cả các thẻ trong đống bỏ đi; như một phần thưởng, người chơi gọi bạn ngẫu nhiên đặt một trong những thẻ của họ vào đống bỏ đi. Tuy nhiên, nếu người tố cáo sai, anh ta phải lấy tất cả các thẻ trong đống bỏ đi. Lưu ý rằng bạn không thể nói dối về số lượng thẻ bạn chơi.
Thông tin chi tiết hơn:
- Vào đầu trò chơi, bốn người chơi ngẫu nhiên được chọn để chơi. Vì sẽ có ít nhất 1000 trò chơi, mỗi người chơi sẽ có cơ hội chơi. Thứ tự lần lượt được quyết định ngẫu nhiên vào đầu trò chơi
- Nếu bạn trả lại một thẻ đúng và một thẻ không chính xác, thì đó được coi là nói dối (nghĩa là nếu bạn được cho là 2 giây, và bạn đã cho một 2 và một 1 , thì đó là nói dối)
- Nếu hai hoặc nhiều người chơi đều nói BS cùng một lúc, thì một người được chọn ngẫu nhiên.
- Điểm của bạn là phần trăm các trò chơi mà bạn giành chiến thắng.
- Có tối đa 1000 vòng, trong đó một vòng là mỗi người chơi đi một lần. Thông thường, ai đó chiến thắng trước điều này. Nếu không ai thắng, thì nó được tính vào tổng số trò chơi đã chơi, nhưng không ai thắng.
Thông số:
Bạn nên viết một lớp học mở rộng Player
. Nó sẽ trông như:
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";
}
}
Phương thức requestCards
được gọi khi đến lượt của bạn. Đối số card
là số thẻ mà bạn phải cung cấp. Bạn trả về một danh sách các thẻ mà bạn muốn đặt vào đống bỏ đi. Người chơi ở trên kiểm tra xem anh ta có thẻ nào thuộc loại thẻ được yêu cầu không; nếu không, anh ta chỉ đơn giản là chơi bài đầu tiên của mình và hy vọng không ai kiểm tra.
Phương thức bs
này được gọi bất cứ khi nào người khác chơi bài. Đối số đầu tiên là người chơi, người thứ hai - thẻ mà anh ta đáng ra phải chơi và thứ ba - số loại thẻ mà anh ta tuyên bố rằng anh ta đã chơi. Quay trở lại true
nếu bạn muốn gọi "BS." Trong đoạn mã trên, người chơi chỉ gọi "BS" khi người chơi khác tuyên bố có 3 thẻ trở lên thuộc loại được yêu cầu.
Đối số cuối cùng cho cả hai phương thức là controller
, chỉ là bộ điều khiển điều khiển trò chơi. Từ bộ điều khiển, bạn có thể nhận được nhiều thông tin công khai hơn, chẳng hạn như số lượng thẻ trong đống bỏ hoặc danh sách và thứ tự lần lượt của người chơi.
Các toString
phương pháp là không bắt buộc.
Trình điều khiển trên GitHub: https://github.com/prakol16/bs
Nếu bạn muốn đăng một giải pháp không phải java, bạn có thể sử dụng giao diện được cung cấp trong https://github.com/LegionMammal978/bs (tín dụng cho LegionMammal978) và tôi sẽ cố gắng tích hợp nó.
Bảng điểm cho đến nay:
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 đang chiến thắng, nhưng Tính toánLiar đang ở vị trí thứ hai. Những điểm số này có vẻ phù hợp - chúng khá giống nhau mọi lúc.
Controller.toString()
ra công chúng, vì nó trả lại bàn tay của tất cả người chơi và đống bỏ đi.