当前位置: 首页 > news >正文

小小扑克牌算法

1.定义一个扑克牌类Card:

package democard;
public class Card {public String suit;//表示花色public int rank;//表示牌点数@Overridepublic String toString() {return "{"+suit +rank+"}";}//实例方法,初始化牌的点数和花色public Card(String suit, int rank){this.suit=suit;this.rank=rank;}
}

2.实现游戏功能:

1.初始化一副牌

//初始化一副牌public List<Card> buyCard(){List<Card> cardlist = new ArrayList<>();//定义一个牌堆for(int i=0;i<suits.length;i++){for (int j = 1; j <=13 ; j++) {Card card=new Card(suits[i],j);//通过循环产生52个对象,将每一个对象的地址存放到牌堆(cardlist)当中cardlist.add(card);}}return cardlist;}

2.洗牌

//洗牌public void shuffleCard(List<Card> cardlist){Random random=new Random();//调用时间戳随机生成一个数for (int i = cardlist.size()-1; i >0; i--) {//让其与每一个位置的牌进行交换int randindex=random.nextInt(i);swap(cardlist,i,randindex);}}

3.交换牌

//交换牌public void swap(List<Card> cardlist,int i,int j){Card tmp=cardlist.get(i);cardlist.set(i,cardlist.get(j));cardlist.set(j,tmp);}

4.发牌

//发牌//每个人发五张,发给三个人public List<List<Card>> play(List<Card> cardlist){List<List<Card>> hand=new ArrayList<>();//定义一个二维数组,存放每一个一维数组的地址List<Card> hand1=new ArrayList<>();List<Card> hand2=new ArrayList<>();List<Card> hand3=new ArrayList<>();hand.add(hand1);//将每一位玩家的牌和二维数组产生联系hand.add(hand2);hand.add(hand3);for (int i = 0; i <3 ; i++) {for (int j = 0; j < 5; j++) {Card card=cardlist.remove(0);//从牌堆里删除第一张牌,类似于头删//将每删除的一张牌存到card当中,在添加给每一位玩家,实现了发牌的功能hand.get(i).add(card);}}return hand;//将二位数组的地址返回,以后调用者可以用该地址查看牌堆剩余的牌以及各个玩家的牌}

3.玩游戏

package democard;import java.util.List;public class Test {public static void main(String[] args) {Game game=new Game();List<Card> cardList=game.buyCard();System.out.println("洗牌前:"+cardList);game.shuffleCard(cardList);System.out.println("洗牌后:"+cardList);List<List<Card>> hand=game.play(cardList);for (int i = 0; i <3 ; i++) {System.out.println("第"+(i+1)+"个人的牌是:"+hand.get(i));}System.out.println("剩下的牌:"+cardList);}
}

最后实现的效果如下:

在这里插入图片描述
该算法是对List<List<Colletion ? extends E>> 的运用以及理解 ,希望大家支持!!

http://www.lryc.cn/news/442585.html

相关文章:

  • 【第34章】Spring Cloud之SkyWalking分布式日志
  • easy-es动态索引支持
  • SWC(Speedy Web Compiler)
  • 【计算机网络】传输层协议UDP
  • Docker+PyCharm远程调试环境隔离解决方案
  • 数字化转型的理论框架对比:从多维视角指导企业成功变革对比DPBOKIT4ITCOBITTOGAF
  • 【C++掌中宝】深入解析C++命名空间:有效管理代码的利器
  • 2024/9/21 leetcode 21.合并两个有序链表 2.两数相加
  • Python学习的主要知识框架
  • LLaMA-Factory 使用 alpaca 格式的数据集
  • 【Mysql】Mysql数据库基础
  • 一文彻底让你搞懂轨迹规划(总结)
  • windows C++ 并行编程-异步消息块(二)
  • 【软件基础知识】什么是 API,详细解读
  • 计算机四级-计算机网络
  • 【linux 获取时间】
  • Dockerfile部署xxljob
  • Conda新建python虚拟环境问题
  • 这几个优秀的工具网站真心值得推荐——搜嗖工具箱
  • ESP32开发 -- VSCODE+PlatformIO环境安装
  • MySQL--导入SQL文件(命令行导入)
  • 【C#基础】函数传参大总结
  • 初学51单片机之IO口上下拉电阻相关
  • Resnet50网络——口腔癌病变识别
  • Python 中自动打开网页并点击[自动化脚本],Selenium
  • Spring Boot-自动配置问题
  • CS61B学习 part1
  • 我Github的问题解决了!
  • Pytorch构建神经网络多元线性回归模型
  • 如何基于Flink CDC与OceanBase构建实时数仓,实现简化链路,高效排查