一、控制台版
1、游戏要求:

2、对三个人拿到牌进行排序之前的代码
java
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是每次添加元素的时候就会自动排序,存储是按顺序存储的。
java
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只是一个存储对应关系的集合,真正操作的集合是list
Collections.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、给每一张牌计算价值


java
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>() {
@Override
public 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-10
int value=Integer.parseInt(number);
return value;
}
}
}
输出:
java
[♥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之后再学这个