学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之后再学这个
