集合练习(五)【十点半游戏】

十点半游戏

十点半是一种扑克游戏,这种游戏老少皆宜。游戏技巧在于如何收集成“十点半”,但若超过半点,也算失败。

A等于1点、2等于2点,如此累推10就是10点,J、Q、K都是半点。

十点半-顾名思义就是摸的牌不能超出十点半。最后谁的牌之和最接近十点半谁胜。

游戏呢分为两个玩家,一个电脑(bot)和玩家(你)。

流程:

你先摸牌,如果觉得有胜算,就不必补牌。否则可以继续补牌。 也就是说每次有两个选择: 1. 继续补牌 2. 不补牌

特殊情况:

  1. 玩家手牌到 5 张时,直接胜利
  2. 玩家手牌点数超过十点半直接输

接下来由电脑摸牌,电脑有以下规则:

  1. 十点半就不补牌了
  2. 当没玩家点数大时,必须补牌
  3. 当比玩家点数大后不补牌

升级玩法:机器人不作弊(不知道玩家点数), 通过概率来决定是否补牌

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();

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值