程序笔记   发布时间:2022-07-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了用Java编写简单的扑克牌游戏大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

      昨天我帮助一位朋友解决了这个问题࿰c;今天我即兴想写一篇详细的关于用Java编写扑克牌游戏的文章。 当然我这里只是实现一些简单的功能。

关于扑克牌游戏的特征࿰c;想必大家都有所接触过࿰c;有扑克牌࿰c;玩扑克牌游戏的玩家还有玩法。 扑克牌的特点是它有点数和花色࿰c;当然大小王除外࿰c;大小王没有花色。

 玩扑克牌游戏的玩家的特点是他们都有一个游戏名称࿰c;还有就是在玩扑克牌游戏时࿰c;他们还有一个特点就是游戏中的身份࿰c;是地主还是农民࿰c;除此之外࿰c;他们手中还有扑克牌。

至于玩法就是首先得有3个人࿰c;然后就开始洗牌࿰c;发牌࿰c;抢地主࿰c;最后每个人手中有17张牌࿰c;最后底牌给地主࿰c;最后整理牌。

经过上面的分析࿰c;我们就知道要建3个类:扑克牌类(Card类)࿰c;玩家类(Player类)࿰c;游戏类(即玩法类Game类)

首先我们开始写扑克牌类(Card类):

在Card类中写上刚刚分析的属性:花色和点数。除此之外࿰c;我还定义了一个size属性࿰c;因为扑克牌要是只有数字像0,1,2,3,4,5,6,7,8,9这样的࿰c;我们好排序࿰c;但是扑克牌中还有J,Q,K,A这样的࿰c;我们不好对它进行排序。所以我定义了一个size属性给牌设置大小方便整理牌

public class Card {
    //花色
    private String decor;
    //点数
    private String point;
    //给牌设置大小(方便排序)
    privatE int size;

在Card类中我们还要显示扑克牌,就是显示扑克牌的花色加点数࿰c;注意大小王没有花色的点数࿰c;因此我们在显示的时候可以判断一下。

  @Override
    public String toString() {
        //做判断࿰c;如果是大小王则不要花色
        if (Objects.isNull(decor) || Objects.equals(decor, "")) {
            return point;
        }
        //不是大小王就要花色
        return decor + "-" + point;
    }

上面我们就完成了Card类࿰c;接下来我们就开始写玩家类(Player类)

在PLayer类中我们也把玩家类的属性写上:姓名࿰c;是否是地主࿰c;手中的牌

public class Player {
    //玩扑克游戏的人的名称
    private String name;
    //地主
    private Boolean boss;
    //玩扑克游戏人手中的牌
    private List<Card> playerPoker=new ArrayList<>();

在玩家信息的显示这里࿰c;我们可以通过getName()方法来获得玩家的姓名࿰c;但是࿰c;我们没有显示地主和农民的信息࿰c;要是不显示这个信息的话࿰c;游戏就出现一点问题,所以我在这里用getGamename()的方法显示地主和农民的信息。

//获得扑克游戏中的角色名称
    public String getGamename() {
        return boss?"地主":"农民";
    }

上面我们就完成了Player类࿰c;接下来我们就开始写最重要的玩法类Game类

在Game类中我们首先得有54张扑克牌,怎么样产生这些扑克牌呢?࿰c;那就是四种花色和13个点数随机结合࿰c;当然我这里的随机结合是指不重复的结合。我这里是使用两个for循环来做的࿰c;并且在结合的过程中我也为每一张扑克牌设置了大小3对应的是0࿰c;4对应的是1࿰c;5对应的是2࿰c;依次向后。最后࿰c;我单独加入了大小王࿰c;并设置了他们的大小。后面的排序可以根据size大小来排序。

public class Game {
    List<Card> pokers = new ArrayList<>();
    String[] decors = {"红心", "方块", "梅花", "黑桃"};
    String[] points = {"3", "4", "5", "6", "7", "8",
     "9", "10", "J", "Q", "K", "A", "2"};
    List<Player> players = new ArrayList<>();
//让花色和点数随机组合产生一张扑克牌
    {
        for (int i = 0; i < points.length; i++) {
            for (int j = 0; j < decors.length; j++) {
                Card c = new Card(decors[j], points[i]);
                //设置扑克牌的大小
                c.setSize(i);
                pokers.add(c);
            }
        }
        //由于大小王没有花色单独加入
        Card card1 = new Card(null, "Queen");
        card1.setSize(13);
        Card card2 = new Card(null, "King");
        card2.setSize(14);
        pokers.add(card1);
        pokers.add(card2);
    }

做完@R_616_9655@࿰c;我们的游戏就可以开始了。首先游戏开始得有三个人吧࿰c;然后就开始洗牌࿰c;发牌࿰c;选地主等等操作。在这里我是随机了一个地主。

public void start(Player p1, Player p2, Player p3) {
        //添加玩游戏的人
        players.add(p1);
        players.add(p2);
        players.add(p3);
        //洗牌
        Collections.shuffle(pokers);
        //发牌
        dealCard();
        //选地主
        Collections.shuffle(players);
        players.get(0).setBoss(true);
        //给地主底牌
        giveBossCard();
        //整理牌
        sortCard();
        //显示
        show();
    }

发牌的具体代码:

 public void dealCard() {
        for (int i = 0; i < players.size(); i++) {
            players.get(i).setPlayerPoker(dealStream(i));
        }
    }
 public List<Card> dealStream(int n) {
        List<Card> list = pokers.stream()
                .skip((n) * 17)
                .limit(17)
                .collect(Collectors.toList());
        return list;
    }

给地主底牌的代码:

public void giveBossCard() {
 players.get(0).getPlayerPoker()
.addAll(pokers.subList(pokers.size() - 4, pokers.size()));
    }

整理牌的代码:

public void sortCard() {
  for (Player player : players) {
    player.getPlayerPoker().sort((s1, s2) -> s1.getSize() - s2.getSize());
        }
    }

显示玩家手中牌的代码:

 public void show() {
 players.forEach(s ->
 System.out.println(s.getName()+"["
 +s.getGamename() +"]"+ s.getPlayerPoker()));
    }

这里我是在Game类中写的主函数main:

 public static void main(String[] args) {
        Player p1 = new Player("coco");
        Player p2 = new Player("tom");
        Player p3 = new Player("jerry");
        Game game1 = new Game();
        game1.start(p1, p2, p3);
    }

运行结果:

用Java编写简单的扑克牌游戏

总结:

在这个编程过程中࿰c;扑克牌类(Card类)和玩家类(Player类)都是实体类比较简单好写࿰c;但是这两个类在最后的显示部分都要注意一下。玩法类(Game类)中的初始化扑克牌要注意大小王的初始化还有要注意给每张牌设置大小。玩法类(Game类)中的洗牌࿰c;发牌࿰c;选地主等的操作比较难࿰c;会运用Collections.shuffle()和subList()方法能帮助我们洗牌和发牌。当然选地主时也可以用Random随机数来随机。我觉得这里最难的还是发完扑克牌后的排序可以让扑克牌类(Card类)实现Comparable接口重写CompareTo(),也可以用匿名内部类的写法创建排序比较器(Comparator)对象重写compare()。

大佬总结

以上是大佬教程为你收集整理的用Java编写简单的扑克牌游戏全部内容,希望文章能够帮你解决用Java编写简单的扑克牌游戏所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。