准备牌、洗牌、发牌的代码
package doudizhu1;
import java.util.ArrayList;
import java.util.Collections;
public class PokerGame {
//牌盒
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 c : color) {
//c依次表示一种花色
for (String n : number) {
//n依次表示每一个数字
list.add(c+n);
}
}
list.add("小王");
list.add("大王");
}
public PokerGame(){
//洗牌
Collections.shuffle(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++) {
//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);
}
}
//看牌
lookPoker("底牌",lord);
lookPoker("karry",player1);
lookPoker("roy",player2);
lookPoker("jackson",player3);
}
public void lookPoker(String name,ArrayList<String> list){
System.out.print(name+"");
for (String poker : list) {
System.out.print(poker+" ");
}
System.out.println();
}
}
给牌进行排序的代码
方式一:利用序号进行排序
package doudizhu2;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
public class PokerGame {
//此时我们只要把牌跟序号产生对应关系就可以,不需要按照序号进行排序,所以只要HashMap就可以了
static HashMap<Integer,String> hm=new HashMap<>();
static ArrayList<Integer> list=new ArrayList<>();
//牌盒Map
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,c+n);
list.add(serialNumber);
serialNumber++;
}
}
hm.put(serialNumber,"小王");
list.add(serialNumber);
serialNumber++;
hm.put(serialNumber,"大王");
list.add(serialNumber);
}
public PokerGame() {
//洗牌
Collections.shuffle(list);
//发牌
TreeSet<Integer> lord=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++) {
//i:依次表示集合中的每一个索引
Integer serialNumber = list.get(i);
if(i<=2){
lord.add(serialNumber);
continue;
}
if(i%3==0){
player1.add(serialNumber);
}else if(i%3==1){
player2.add(serialNumber);
}else {
player3.add(serialNumber);
}
}
//看牌
lookPoker("底牌",lord);
lookPoker("karry",player1);
lookPoker("roy",player2);
lookPoker("jackson",player3);
}
//参数一:玩家的名字
//参数二:牌的序号
public void lookPoker(String name,TreeSet<Integer> ts){
//遍历TreeSet集合得到每一个序号,在拿着序号到Map集合种去找真正的牌
System.out.print(name+": ");
for (Integer serialNumber : ts) {
String poker = hm.get(serialNumber);
System.out.print(poker+" ");
}
System.out.println();
}
}
方式二:给每一张牌计算价值
package doudizhu3;
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<>();
//创建一个集合,用来添加牌的价值
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 c : color) {
//c依次表示一种花色
for (String n : number) {
//n依次表示每一个数字
list.add(c+n);
}
}
list.add(" 小王");
list.add(" 大王");
//指定牌的价值
hm.put("J",11);
hm.put("Q",12);
hm.put("K",13);
hm.put("A",14);
hm.put("2",15);
hm.put("小王",50);
hm.put("大王",100);
}
public PokerGame(){
//洗牌
Collections.shuffle(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++) {
//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(lord);
order(player1);
order(player2);
order(player3);
//看牌
lookPoker("底牌",lord);
lookPoker("karry",player1);
lookPoker("roy",player2);
lookPoker("jackson",player3);
}
public void lookPoker(String name,ArrayList<String> list){
System.out.print(name+"");
for (String poker : list) {
System.out.print(poker+" ");
}
System.out.println();
}
public void order(ArrayList<String> list) {
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//计算O1的价值和花色
String color1 = o1.substring(0, 1);
int value1 = getValue(o1);
//计算O2的价值和花色
String color2 = o2.substring(0, 1);
int value2 = getValue(o2);
//比较o1和o2的价值
int i=value1-value2;
return i==0?color1.compareTo(color2):i;
}
});
}
//计算牌的价值
//参数:牌
//返回值:价值
public int getValue(String poker){
//获取牌上的数字
String number = poker.substring(1);
//拿着数字到MAP集合中判断是否存在
if(hm.containsKey(number)){
//存在获取价值
return hm.get(number);
}else {
//不存在,类型转换
return Integer.parseInt(number);
}
}
}