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

学Java第四十五天——斗地主小游戏创作

一、控制台版

1、游戏要求:

2、对三个人拿到牌进行排序之前的代码

package com.doudizhu;import java.util.ArrayList;
import java.util.Collections;public class PokerGame {//1、准备牌static ArrayList<String> list=new ArrayList<>();//这是牌盒static{  //静态内部类,在多次创建该类的对象时,只执行一次因为它是静态的,只属于类的,所以只执行一次String [] color={"♦","♣","♥","♠"};String [] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};for (String s : color) {for (String num : number) {list.add(s+num);  //}}list.add("大王");list.add("小王");//此时牌盒已经装满了牌}public PokerGame(){//2、洗牌Collections.shuffle(list);System.out.println(list);//3、发牌//要先设置四个集合(一个底牌和三个人)ArrayList<String> lord=new ArrayList<>();ArrayList<String> player1=new ArrayList<>();ArrayList<String> player2=new ArrayList<>();ArrayList<String> player3=new ArrayList<>();//因为要前三张牌作为底牌,所以要用到索引,此时只能  普通for循环for (int i = 0; i < list.size(); i++) {if(i<=2){lord.add(list.get(i));continue;//必须要写,不然的话,还要经历下面的发牌,因为,每次循环只把一张牌给某个人就完成任务了}if(i%3==0){player1.add(list.get(i));} else if (i%3==1) {player2.add(list.get(i));}else{player3.add(list.get(i));}}//4、看牌lookPoker("底牌",lord);lookPoker("钢脑壳",player1);lookPoker("大帅比",player2);lookPoker("蛋筒",player3);}public void lookPoker(String name,ArrayList<String> list){System.out.print(name+":");for (String s : list) {System.out.print(s+" ");}System.out.println();}
}

3、给每个玩家的牌进行排序

3.1、利用序号进行排序 ,由treeset实现排序

主要是找到对应关系,与是否排序无关。所以在牌盒中用hashmap,只要序号和牌一一对应就行了。treemap是每次添加元素的时候就会自动排序,存储是按顺序存储的。

package com.斗地主2;import java.security.PublicKey;
import java.util.*;public class PokerGame {//1、准备牌static HashMap<Integer,String> hm=new HashMap<>(); //牌盒static ArrayList<Integer> list=new ArrayList<>();  //另外准备一个序号集合,用来进行发牌的操作,要有索引static {String [] color={"♦","♣","♥","♠"};String [] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};int serialNumber=1;for (String n : number) {for (String c : color) {hm.put(serialNumber,n+c);list.add(serialNumber);serialNumber++;}}hm.put(serialNumber,"小王");list.add(serialNumber);serialNumber++;hm.put(serialNumber,"大王");list.add(serialNumber);}public PokerGame(){//洗牌   hm只是一个存储对应关系的集合,真正操作的集合是listCollections.shuffle(list);System.out.println(list);//发牌   用treeset这样存储的时候就排序了,直接达到排序的效果TreeSet<Integer> lodr=new TreeSet<>();TreeSet<Integer> player1=new TreeSet<>();TreeSet<Integer> player2=new TreeSet<>();TreeSet<Integer> player3=new TreeSet<>();for (int i = 0; i < list.size(); i++) {int serialNumber=list.get(i);if(i<=2){lodr.add(serialNumber);continue;}if(i%3==0){player1.add(serialNumber);} else if (i%3==1) {player2.add(serialNumber);}else{player3.add(serialNumber);}}//看牌lookPoker("底牌",lodr);lookPoker("钢脑壳",player1);lookPoker("大帅比",player2);lookPoker("蛋筒",player3);}public void lookPoker(String name,TreeSet<Integer> ts){System.out.print(name+":");for (Integer t : ts) {System.out.print(hm.get(t)+" ");}System.out.println();}}

3.2、给每一张牌计算价值

 

package com.斗地主3;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;public class PokerGame {//准备牌//牌盒static ArrayList<String> list=new ArrayList<>();//创建一个map集合用来添加牌的价值static HashMap<String,Integer> hm=new HashMap<>();//在牌盒里面装牌static {String [] color={"♦","♣","♥","♠"};String [] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};for (String s : color) {for (String num : number) {list.add(s+num);  //}}list.add("大大王");list.add("小小王");//指定牌的价值,牌上的数字到map集合中是否存在,存在,获取价值;不存在,本身的数字作为价值。hm.put("J",11);hm.put("Q",12);hm.put("K",13);hm.put("A",14);hm.put("小王",110);hm.put("大王",111);}public PokerGame(){//洗牌Collections.shuffle(list);System.out.println(list);//发牌//要先设置四个集合(一个底牌和三个人)ArrayList<String> lord=new ArrayList<>();ArrayList<String> player1=new ArrayList<>();ArrayList<String> player2=new ArrayList<>();ArrayList<String> player3=new ArrayList<>();for (int i = 0; i < list.size(); i++) {String poker=list.get(i);if(i<=2){lord.add(poker);continue;}if(i%3==0){player1.add(poker);}else if(i%3==1){player2.add(poker);}else{player3.add(poker);}}//对每人手中的牌进行排序order(player1);order(player3);order(player2);//打印牌lookPoker("底牌",lord);lookPoker("钢脑壳",player1);lookPoker("大帅比",player2);lookPoker("蛋筒",player3);}//看牌public void lookPoker(String name,ArrayList<String> list){System.out.print(name+":");for (String s : list) {System.out.print(s+" ");}System.out.println();}//利用价值进行排序public void order(ArrayList<String> list){Collections.sort(list, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {//获取花形String color1=o1.substring(0,1);//获取价值int value1=getvalue(o1);String color2=o2.substring(0,1);int value2=getvalue(o2);//关键比较点,先比较价值,价值相同之后再比较花形int i=value1-value2;i= i==0? color1.compareTo(color2): i;return i;}});}public int getvalue(String poker){String number=poker.substring(1);if(hm.containsKey(number)){  //如果hm里面存在想要的价值return hm.get(number);}else{  //如果不存在,即数字3-10int value=Integer.parseInt(number);return  value;}}}

输出:

[♥4, ♣4, ♠2, ♦10, ♣5, ♦2, ♠7, ♣7, ♣J, ♦3, ♥3, ♥2, 小小王, ♦K, ♦Q, ♥8, ♠A, ♠K, ♥5, ♥Q, ♣2, ♣10, ♠J, ♦5, ♦9, ♣Q, ♥10, ♦J, ♦6, ♥J, ♠4, ♦8, ♥7, ♦A, ♦4, ♥6, ♣8, ♣3, 大大王, ♣A, ♣9, ♣K, ♠8, ♦7, ♠9, ♠Q, ♠10, ♥A, ♠5, ♣6, ♠6, ♥K, ♥9, ♠3]
底牌:♥4 ♣4 ♠2 
钢脑壳:♦3 ♠4 ♠5 ♥5 ♠7 ♠8 ♣8 ♥8 ♦9 ♣10 ♦10 ♦J ♠Q ♥K ♣A ♦A 小小王 
大帅比:♣3 ♥3 ♦4 ♣5 ♣6 ♦6 ♣7 ♦7 ♦8 ♣9 ♥9 ♠10 ♠J ♣Q ♥Q ♦K ♠A 
蛋筒:♣2 ♥2 ♦2 ♠3 ♦5 ♠6 ♥6 ♥7 ♠9 ♥10 ♣J ♥J ♦Q ♠K ♣K ♥A 大大王 

二、页面版斗地主

font是字体类,第一个参数是字体,null是默认字体 ;第二个style:0普通,1加粗,2斜体

Jbutton按钮  JTextField 文本框    Jlabel标签

学JavaWeb之后再学这个

 

http://www.dtcms.com/a/613824.html

相关文章:

  • 怎样创建一个国际网站wordpress外观菜单
  • 【总结】计网 IPv6
  • 【动态高斯重建】论文集合:从4DGT到OMG4、4DSioMo
  • 【ASR论文】Zipformer:更快、更强的语音识别编码器 | 小米公司
  • 从零开始学二叉树(上):树的初识 —— 从文件系统到树的基本概念
  • wordpress做网站卡吗服装企业 北京 网站建设
  • wordpress站点地址没更改wordpress 百秀主题
  • Foreign Function Interface
  • 在线C语言编译器 | 提供快速高效的C语言编程环境
  • 11月15日星期六今日早报简报微语报早读
  • 发电机组和负荷模型
  • 手机版 网站建设新闻今天
  • 节流throttle防抖debounce的函数封装
  • CSS 网格元素:构建现代网页布局的基石
  • 屹晶微 EG2134 三相独立半桥驱动芯片技术解析
  • 用py做网站写wordpress
  • 12. C语言高级编程-内存管理(2)
  • 【复习】计网每日一题1115---IPv6地址的简洁表示、::
  • RHCSA做项目:基于LAMP环境搭建Web应用(Discuz!论坛)的基础环境与部署流程
  • 南昌网站搭建公司 赣ICP温州排名推广
  • 前端使用TensorFlow.js reactjs调用本地模型 实现图像、文本、音频/声音、视频相关识别
  • 香蕉派 BPI-2K3000 工业计算机开发板采用龙芯2K3000芯片设计
  • C语言-数据结构-单链表程序-增删改查
  • vip广告网站建设摄影网站开题报告
  • 进程概念(上)
  • 网络水果有哪些网站可以做中国国家人事人才培训网
  • 开启智能未来之门:华为HCIA-AI认证培训与考试全方位深度解析
  • 记事本源代码分析ALT+F4调试记录详细分析
  • 【Java基础07】链表
  • DDL数据