欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > Java实现斗地主-做牌以及对牌排序

Java实现斗地主-做牌以及对牌排序

2025/2/28 7:08:11 来源:https://blog.csdn.net/m0_63949203/article/details/145816725  浏览:    关键词:Java实现斗地主-做牌以及对牌排序

 卡牌类

public class Card {private String size;//大小private String color;//花色private int value;//权值public Card() {}public Card(String size, String color, int value) {this.size = size;this.color = color;this.value = value;}public String toString(){return size+color;}/*** 获取* @return size*/public String getSize() {return size;}/*** 设置* @param size*/public void setSize(String size) {this.size = size;}/*** 获取* @return color*/public String getColor() {return color;}/*** 设置* @param color*/public void setColor(String color) {this.color = color;}/*** 获取* @return value*/public int getValue() {return value;}/*** 设置* @param value*/public void setValue(int value) {this.value = value;}
}

 玩家类

import java.util.List;public class Player {private String name;// 玩家姓名private List<Card> cards;// 玩家手牌public Player() {}public Player(String name, List<Card> cards) {this.name = name;this.cards = cards;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return cards*/public List<Card> getCards() {return cards;}/*** 设置* @param cards*/public void setCards(List<Card> cards) {this.cards = cards;}public String toString() {return "Player{name = " + name + ", cards = " + cards + "}";}
}

游戏类(程序入口)

import java.util.*;public class game {public static void main(String[] args) {//1.准备花色String[] colors = {"♥", "♠", "♣", "♦"};//2.准备点数String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};//3.准备牌List<Card> cards = new ArrayList<>();//4.添加牌 count代表权值int count = 0;for (String number : numbers) {count++;for (String color : colors) {cards.add(new Card(color, number, count));}}//5.添加大王和小王cards.add(new Card("🃏", "", 14));cards.add(new Card("👲", "", 15));System.out.println(cards);//6.洗牌Collections.shuffle(cards);//比for循环更优雅System.out.println(cards);//7.发牌,并且要留3张底牌List<Player> players = new ArrayList<>();players.addAll(Arrays.asList(new Player("张三", new ArrayList<>()),new Player("李四", new ArrayList<>()), new Player("王五", new ArrayList<>())));for (int i = 0; i < cards.size()-3; i++) {if (i%3==0){//如果下标取余是0,则给张三发一张players.get(0).getCards().add(cards.get(i));}else if (i%3==1){//如果下标取余是1,则给李四发一张players.get(1).getCards().add(cards.get(i));}else {//如果下标取余是2,则给王五发一张players.get(2).getCards().add(cards.get(i));}}//通过随机数把地主牌放到对应的人里面,如果随机数是0,则张三当地主。Random random = new Random();int index = random.nextInt(3);players.get(index).getCards().addAll(cards.subList(cards.size()-3,cards.size()));//根据stream流对玩家的牌进行排序players.forEach(player -> {player.getCards().sort(Comparator.comparingInt(Card::getValue));System.out.println(player);});}
}

程序运行结果 

 

小结

1.Collections.shuffle(cards);//比for循环更优雅代码量少,同样比stream流优雅,stream不会对对象本身操作,因此排序后还要再重新赋值,故这里不选用stream流实现排序。

2.通过对card类封装value属性可以很好的解决斗地主2比3大的问题,这里体现了面向对象的思想。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词