电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

java實現簡易撲克牌游戲

瀏覽:5日期:2022-09-02 15:19:15

本文實例為大家分享了java實現撲克牌游戲的具體代碼,供大家參考,具體內容如下

游戲功能描述

1、創建一副撲克牌:

包括四種花色:黑桃,紅桃,梅花,方片 包括十三種點數:2-10,J,Q,K,A

2、創建兩名玩家(or多名)

玩家至少要有ID,姓名,手牌等屬性,手牌為撲克牌的集合

3、將創建好的撲克牌進行隨機洗牌

4、從洗牌后的撲克牌的第一張開始,發給每個玩家,按照一人一張的方式,每人發兩張(or多張)

5、比較兩名玩家手中的撲克牌,比較規則為:取兩人各自手中點數最大的牌進行比較,點數大的贏;若兩人各自的點數最大的牌相等,則再按照花色比較。

代碼

//Card.java

package card;public class Card{ private String color; private String number; public Card(String color, String number) { this.color = color; this.number = number; } public String getColor() { return color; } public String getNumber() { return number; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof Card)) return false; Card other = (Card) obj; if (color == null) { if (other.color != null) return false; } else if (!color.equals(other.color)) return false; if (number == null) { if (other.number != null) return false; } else if (!number.equals(other.number)) return false; return true; }}

//Cards.java

package card;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Cards { private List<Card> list = new ArrayList<Card>(); //創建一副撲克牌 public Cards(){ System.out.println('-----------------創建撲克牌------------------'); String[] color = {'黑桃', '紅桃', '梅花', '方片'}; String[] number = {'2', '3', '4', '5', '6', '7', '8', '9', '10', 'J','Q','K', 'A'}; for(int i=0;i<color.length;i++) for(int j=0;j<number.length;j++){ list.add(new Card(color[i], number[j])); } System.out.println('----------------撲克牌創建成功!---------------'); } //獲取一副撲克牌 public List<Card> getList() { return list; } //洗牌(打亂) public void shufCards(){ System.out.println('----------------開始洗牌------------------------'); Collections.shuffle(list); System.out.println('----------------洗牌結束------------------------'); } //展示一副撲克牌 public void showCards(){ System.out.print('當前的撲克牌為:'); System.out.print('[ '); for(int i=0;i<list.size();i++){ System.out.print(list.get(i).getColor() + list.get(i).getNumber()+ ' '); } System.out.println(' ]'); }}

//Player.java

package card;import java.util.ArrayList;import java.util.List;public class Player { private int id; private String name; private List<Card> handCards = new ArrayList<Card>(); public Player(int id, String name){ this.id = id; this.name = name; } public List<Card> getHandCards() { return handCards; } public void setHandCards(Card card) { handCards.add(card); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}

//CardComparator.java(自定義排序規則)

package card;import java.util.Comparator;public class CardComparator implements Comparator<Card> { @Override public int compare(Card c1, Card c2) { // 構建花色和牌值數組,通過比對,計算得到某張牌的價值(大小) String[] color = {'方片', '梅花', '紅桃', '黑桃'}; String[] number = {'2', '3', '4', '5', '6', '7', '8', '9', '10', 'J','Q','K', 'A'}; //由于比較規則是先比較牌值,如果相等再比較花色(黑紅梅方),所以將牌值賦予較高的權值 int valueOfC1 = 0; int valueOfC2 = 0; for(int i=0;i<number.length;i++){ if(c1.getNumber().equals(number[i])) valueOfC1 += i*10; if(c2.getNumber().equals(number[i])) valueOfC2 += i*10; } for(int i=0;i<color.length;i++){ if(c1.getColor().equals(color[i])) valueOfC1 += i; if(c2.getColor().equals(color[i])) valueOfC2 += i; } if( valueOfC1 > valueOfC2 ) return -1; if( valueOfC1 < valueOfC2 ) return 1; return 0; }}

//PlayDemo.java

package card;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Scanner;public class PlayDemo { //創建玩家 //要對玩家ID的異常處理,要求用戶只能輸入整數ID,否則需要重新輸入 public Player setPlayer(){ int id=0; String name=''; Scanner console = new Scanner(System.in); boolean ready = true; do{ try{ System.out.println('輸入ID:'); id = console.nextInt(); ready = true; }catch(Exception e){ System.out.println('請輸入整數類型的ID!'); ready = false; console.nextLine(); } }while(ready==false); System.out.println('輸入姓名:'); name = console.next(); return new Player(id, name); } public static void main(String[] args) { //測試簡易撲克牌程序 PlayDemo game = new PlayDemo(); //(1)創建一副牌 Cards cards = new Cards(); //(2)展示新的撲克牌 cards.showCards(); //(3)洗牌 cards.shufCards(); //(4)創建玩家 System.out.println('--------------創建兩個(or多個)玩家就可以開始游戲啦!-------------'); List<Player> p = new ArrayList<Player>(); for(int i=0;i<2;i++) { System.out.println('請輸入第'+(i+1)+'位玩家的ID和姓名:'); p.add(game.setPlayer()); } for(int i=0;i<p.size();i++) { System.out.println('歡迎玩家:'+p.get(i).getName()); } //(5)撲克牌比大小游戲開始啦~ int count = 0; System.out.println('------------------開始發牌---------------------'); //設定每人分別拿兩張(or多張) for(int i=0; i<2;i++){ //玩家輪流拿牌 for(int j=0; j< p.size(); j++){ System.out.println('>玩家'+p.get(j).getName()+'拿牌'); p.get(j).setHandCards(cards.getList().get(count)); count++; } } System.out.println('------------------發牌結束!--------------------'); System.out.println('------------------開始游戲 ---------------------'); for(int i=0;i<p.size();i++){ System.out.print('玩家'+p.get(i).getName()+'的手牌為:[ '); for(int j=0;j<p.get(i).getHandCards().size();j++){ Card cur = p.get(i).getHandCards().get(j); System.out.print(cur.getColor()+cur.getNumber()+' '); } System.out.println(' ]'); } //排序得到每個玩家最大的手牌(排序規則自定義) for(int i=0;i<p.size();i++){ Collections.sort(p.get(i).getHandCards(), new CardComparator()); } List<Card> maxCard = new ArrayList<Card>(); for(int i=0;i<p.size();i++){ Card maxCur = p.get(i).getHandCards().get(0); System.out.println('玩家'+p.get(i).getName()+'最大的手牌為:'+ maxCur.getColor()+maxCur.getNumber()); maxCard.add(maxCur); } //得到最后的勝者 List<Card> temp = new ArrayList<Card>(); temp.addAll(maxCard); Collections.sort(temp, new CardComparator()); for(int i=0;i<p.size();i++){ if(maxCard.get(i).equals(temp.get(0))) System.out.println('恭喜玩家:'+p.get(i).getName()+'獲勝!'); } }}

游戲運行截圖

java實現簡易撲克牌游戲

還有一個地方需要優化,即不能輸入重復的ID和姓名,可以重寫Player的equals方法,將用戶的輸入與已有的輸入相比較,不滿足要求則需要重新輸入,不過就先不加了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 半容积式换热器_北京浮动盘管换热器厂家|北京亿丰上达 | 有机废气处理-rto焚烧炉-催化燃烧设备-VOC冷凝回收装置-三梯环境 | 深圳办公室装修-写字楼装修设计-深圳标榜装饰公司| 防腐木批发价格_深圳_惠州_东莞防腐木厂家_森源(深圳)防腐木有限公司 | Dataforth隔离信号调理模块-信号放大模块-加速度振动传感器-北京康泰电子有限公司 | 粘度计NDJ-5S,粘度计NDJ-8S,越平水分测定仪-上海右一仪器有限公司 | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 中央空调温控器_风机盘管温控器_智能_液晶_三速开关面板-中央空调温控器厂家 | 定制/定做冲锋衣厂家/公司-订做/订制冲锋衣价格/费用-北京圣达信 | 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 | 立式_复合式_壁挂式智能化电伴热洗眼器-上海达傲洗眼器生产厂家 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 垃圾压缩设备_垃圾处理设备_智能移动式垃圾压缩设备--山东明莱环保设备有限公司 | 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | LED太阳能中国结|发光红灯笼|灯杆造型灯|节日灯|太阳能灯笼|LED路灯杆装饰造型灯-北京中海轩光电 | 无纺布包装机|径向缠绕包装机|缠绕膜打包机-上海晏陵智能设备有限公司 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 我爱古诗词_古诗词名句赏析学习平台 | 垃圾清运公司_环卫保洁公司_市政道路保洁公司-华富环境 | 颚式破碎机,圆锥破碎机,制砂机-新乡市德诚机电制造有限公司 | 合肥卓创建筑装饰,专业办公室装饰、商业空间装修与设计。 | POS机办理_个人POS机免费领取 - 银联POS机申请首页 | 对照品_中药对照品_标准品_对照药材_「格利普」高纯中药标准品厂家-成都格利普生物科技有限公司 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | 换链神器官网-友情链接交换、购买交易于一体的站长平台 | 深圳富泰鑫五金_五金冲压件加工_五金配件加工_精密零件加工厂 | 北京印刷厂_北京印刷_北京印刷公司_北京印刷厂家_北京东爵盛世印刷有限公司 | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 山东限矩型液力偶合器_液力耦合器易熔塞厂家-淄博市汇川源机械厂 | 新材料分散-高速均质搅拌机-超声波分散混合-上海化烁智能设备有限公司 | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 联系我们老街华纳娱乐公司官网19989979996(客服) | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 | 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 楼承板-开口楼承板-闭口楼承板-无锡海逵 | 百方网-百方电气网,电工电气行业专业的B2B电子商务平台 |