十点半游戏
十点半是一种扑克游戏,这种游戏老少皆宜。游戏技巧在于如何收集成“十点半”,但若超过半点,也算失败。
A等于1点、2等于2点,如此累推10就是10点,J、Q、K都是半点。
十点半-顾名思义就是摸的牌不能超出十点半。最后谁的牌之和最接近十点半谁胜。
游戏呢分为两个玩家,一个电脑(bot)和玩家(你)。
流程:
你先摸牌,如果觉得有胜算,就不必补牌。否则可以继续补牌。 也就是说每次有两个选择: 1. 继续补牌 2. 不补牌
特殊情况:
- 玩家手牌到 5 张时,直接胜利
- 玩家手牌点数超过十点半直接输
接下来由电脑摸牌,电脑有以下规则:
- 十点半就不补牌了
- 当没玩家点数大时,必须补牌
- 当比玩家点数大后不补牌
升级玩法:机器人不作弊(不知道玩家点数), 通过概率来决定是否补牌
import java.util.*;
public class TenThirty {
private Poker poker;
public TenThirty() {
this.poker = new Poker();
}
/**
打乱牌
*/
public void start(){
List<Card> poker = this.poker.getPoker();
for(int i = 0;i < 10;i++){
Collections.shuffle(poker);
}
player(poker);
}
public void player(List<Card> poker){
List<String> player = new ArrayList<>();
//玩家手里的牌数
int count = 0;
//玩家牌数的值
double value =0.0;
while (count < 5){
Card card = poker.get(count);
player.add(card.toString());
System.out.println(player);
value += card.getValue();
System.out.println("你的点数和是" + value);
count++;
if (value < 10.5) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入是否继续发牌,0:是,1:否");
int isContinue = sc.nextInt();
// 玩家继续发牌,并且牌数小于5
if (isContinue == 0) {
continue;
} else {
bot(value,poker,count);
break;
}
} else if(value > 10.5) {
System.out.println("你输了");
return;
}
}
if(count == 5 && value <10.5){
System.out.println("你赢了");
}
if (count > 5) {
System.out.println("你输了");
}
}
private void bot(double value , List<Card> poker, int count) {
//机器人的牌值
Double botValue =0.0;
//机器人的牌数
int botCount = 0;
//机器人的牌
List<String> botCards = new ArrayList<>();
while (botValue <= value) {
Card card = poker.get(count +(++botCount));
botValue += card.getValue();
botCards.add(card.toString());
System.out.println("机器人的牌:" + botCards);
if (botValue>10.5)
{
System.out.println("机器人炸了");
System.exit(0);
}
if(botCards.size() > 5){
System.out.println("机器人输了");
System.exit(0);
}
if (botCards.size() == 5)
{
System.out.println("机器人赢了");
System.exit(0);
}
}
System.out.println("机器人的点数和是:" + botValue);
System.out.println("机器人赢了");
}
}
class Poker{
private List<Card> poker;
private static final List<String> points = List.of("A","2","3","4","5","6","7","8","9","10","J","Q","K");
public Poker(){
this.poker = new ArrayList<>();
for (int i = 0;i < points.size(); i++) {
if(i <= 9){
poker.add(new Card(points.get(i),i+1));
}
else{
poker.add(new Card(points.get(i),0.5));
}
}
}
public List<Card> getPoker() {
return poker;
}
public void setPoker(List<Card> poker) {
this.poker = poker;
}
}
class Card{
private String point;
private double value;
public Card(String point, double value) {
this.point = point;
this.value = value;
}
@Override
public String toString() {
return point;
}
public double getValue() {
return value;
}
public void setValue(double value) {
this.value = value;
}
}
public class TenThirtyTest {
public static void main(String[] args) {
TenThirty game = new TenThirty();
game.start();
}
}