1 package com.Lucky.AppUnit;
2
3 /**
4 * 开启App入口
5 */
6 public class App {
7 public static void main(String[] args) {
8 // new startGame();
9 // new InnerGame();
10 // new overGame();
11 new valuesGame();
12 }
13 }
package com.Lucky.AppUnit;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
/*
初级版
*/
public class startGame {
//1.准备一副扑克牌
static ArrayList<String> house=new ArrayList<>(); //扑克牌盒子
//利用代码块加载:与类一起加载,只加载一次
static{
//定义花色
String[] huase={"♠","♥","♦","♣"};
//定义牌面数字
String[] num={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//方法一:用for循环遍历添加不同花色的扑克牌
for (int i = 0; i < huase.length; i++) {
//遍历添加同一花色的扑克牌
for (int j = 0; j < num.length; j++) {
house.add(huase[i]+num[j]);
}
}
//方法二:用增强for循环添加数据
// for (String s : huase) {
// for (String n : num) {
// house.add(s+n);
// }
// }
//还有大王和小王
house.add("大王");
house.add("小王");
}
public startGame() {
/// System.out.println(house);
//2. 洗牌
Collections.shuffle(house);
// System.out.println(house);
//3.发牌
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 < house.size(); i++) {
String val= house.get(i);
if(i<3){ //前三张牌作为底牌
lord.add(val);
continue; //跳出本次循环,进入下次循环
}
//底牌完成之后,轮流发牌
if(i%3==0){ //发牌给第一个人
player1.add(val);
}else if(i%3==1){ //发牌给第二个人
player2.add(val);
}else if(i%3==2){//发牌给第三个人
player3.add(val);
}
}
//看牌
lookPoker("底牌",lord);
lookPoker("唯易",player1);
lookPoker("大帅哥",player2);
lookPoker("SB",player3);
}
public void lookPoker(String name,ArrayList<String> lists){
lists.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
System.out.println();
System.out.print(name+"的牌=");
for (String list : lists) {
System.out.print(list+"\t");
}
}
}
package com.Lucky.AppUnit;
import java.util.*;
/*
中级版 :利用指定序号排序
*/
public class InnerGame {
//1.准备一副扑克牌
static HashMap<Integer,String> map=new HashMap<>(); //牌盒
static ArrayList<Integer> ArrList=new ArrayList<>(); //装序号的盒子
//利用代码块加载:与类一起加载,只加载一次
static{
//定义花色
String[] huase={"♠","♥","♦","♣"};
//定义牌面数字
String[] num={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
int index=1; //牌的序号
//遍历添加牌
for (String s : num) {
//遍历添加牌的数字
for (String n : huase) {
//添加牌的花色
map.put(index,n+s); //序号以及牌
index++;
}
}
//还有大王 /小王
map.put(index,"小王");
index++;
map.put(index,"大王");
}
public InnerGame() {
// System.out.println(map);
//1.将牌盒序号加入 ArrList 集合
Set<Integer> integers = map.keySet();
for (Integer in : integers) {
ArrList.add(in);
}
//2.打乱顺序【洗牌】
Collections.shuffle(ArrList);
//发牌跟准备各自的牌集合
ArrayList<Integer> lord=new ArrayList<>();
ArrayList<Integer> palyer1=new ArrayList<>();
ArrayList<Integer> palyer2=new ArrayList<>();
ArrayList<Integer> palyer3=new ArrayList<>();
for (int i = 0; i < ArrList.size(); i++) {
int num= ArrList.get(i);
if(i<3){ //底牌
lord.add(num);
continue;
}
//轮流发牌给三个人
if(i%3==0){
palyer1.add(num);
}else if(i%3==1){
palyer2.add(num);
}else if(i%3==2){
palyer3.add(num);
}
}
//看牌
lookPoker("地主",lord); //底牌
lookPoker("唯易",palyer1); //玩家1
lookPoker("大帅哥",palyer2); //玩家2
lookPoker("大SB",palyer3); //玩家3
}
public void lookPoker(String name,ArrayList<Integer> lists){
//再将lists集合中的数字排序
lists.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
//将序号的数据经过map遍历获取到值,添加到集合中
ArrayList<String> New=new ArrayList<>();
System.out.println();
System.out.print(name+"的牌=");
//根据键遍历map集合来获取相对应的值
Set<Map.Entry<Integer, String>> entries = map.entrySet();
for (Integer list : lists) {
for (Map.Entry<Integer, String> entry : entries) {
Integer key = entry.getKey();
String value = entry.getValue();
if(key==list){
New.add(value);
}
}
}
for (String s : New) {
System.out.print(s+"\t");
}
}
}
package com.Lucky.AppUnit;
import java.util.*;
/*
中级版 :利用指定序号排序【简化写法】
*/
public class overGame {
//1.准备一副扑克牌
static HashMap<Integer,String> map=new HashMap<>(); //牌盒
static ArrayList<Integer> ArrList=new ArrayList<>(); //装序号的盒子
//利用代码块加载:与类一起加载,只加载一次
static{
//定义花色
String[] huase={"♠","♥","♦","♣"};
//定义牌面数字
String[] num={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
int index=1; //牌的序号
//遍历添加牌
for (String s : num) {
//遍历添加牌的数字
for (String n : huase) {
//添加牌的花色
map.put(index,n+s); //序号以及牌
index++;
}
}
//还有大王 /小王
map.put(index,"小王");
index++;
map.put(index,"大王");
}
public overGame() {
// System.out.println(map);
//1.将牌盒序号加入 ArrList 集合
Set<Integer> integers = map.keySet();
for (Integer in : integers) {
ArrList.add(in);
}
//2.打乱顺序【洗牌】
Collections.shuffle(ArrList);
//发牌跟准备各自的牌集合【TreeSet集合有排序的作用】
TreeSet<Integer> lord=new TreeSet<>();
TreeSet<Integer> palyer1=new TreeSet<>();
TreeSet<Integer> palyer2=new TreeSet<>();
TreeSet<Integer> palyer3=new TreeSet<>();
for (int i = 0; i < ArrList.size(); i++) {
int num= ArrList.get(i);
if(i<3){ //底牌
lord.add(num);
continue;
}
//轮流发牌给三个人
if(i%3==0){
palyer1.add(num);
}else if(i%3==1){
palyer2.add(num);
}else if(i%3==2){
palyer3.add(num);
}
}
//看牌
lookPoker("地主",lord); //底牌
lookPoker("唯易",palyer1); //玩家1
lookPoker("大帅哥",palyer2); //玩家2
lookPoker("大SB",palyer3); //玩家3
}
public void lookPoker(String name,TreeSet<Integer> lists){
//将序号的数据经过map遍历获取到值,添加到集合中
ArrayList<String> New=new ArrayList<>();
System.out.println();
System.out.print(name+"的牌=");
for (Integer list : lists) {
String val = map.get(list); //根据键获取相对应的值
New.add(val); //将值添加到New集合中
}
for (String s : New) { //遍历New集合输出牌
System.out.print(s+"\t");
}
}
}
package com.Lucky.AppUnit;
import java.util.*;
/*
高级版 :利用自定义价值排序
*/
public class valuesGame {
//1.准备一副扑克牌
static ArrayList<String> array=new ArrayList<>(); //牌盒
static TreeMap<String,Integer> List=new TreeMap<>(); //自定义价值盒子
//利用代码块加载:与类一起加载,只加载一次
static{
//定义花色
String[] huase={"♠","♥","♦","♣"};
//定义牌面数字
String[] num={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//遍历添加牌
for (String s : num) {
//遍历添加牌的数字
for (String n : huase) {
//添加牌的花色
array.add(n+s); //序号以及牌
}
}
//还有大王 /小王
array.add(" 小王"); //前面的空格是用于统一截取字符串的要求
array.add(" 大王");
}
public valuesGame() {
List.put("J",20);
List.put("Q",21);
List.put("K",22);
List.put("A",23);
List.put("2",24);
List.put("大王",30);
List.put("小王",50);
//2.打乱顺序【洗牌】
Collections.shuffle(array);
//发牌跟准备各自的牌集合
ArrayList<String> lord=new ArrayList<>();
ArrayList<String> palyer1=new ArrayList<>();
ArrayList<String> palyer2=new ArrayList<>();
ArrayList<String> palyer3=new ArrayList<>();
//发牌
for (int i = 0; i < array.size(); i++) {
String str=array.get(i); //实际牌面的数字
if(i<3){ //底牌
lord.add(str);
continue;
}
//轮流发牌给三个人
if(i%3==0){
palyer1.add(str);
}else if(i%3==1){
palyer2.add(str);
}else if(i%3==2){
palyer3.add(str);
}
}
//看牌
lookPoker("地主",lord); //底牌
lookPoker("唯易",palyer1); //玩家1
lookPoker("大帅哥",palyer2); //玩家2
lookPoker("大SB",palyer3); //玩家3
}
public void lookPoker(String name,ArrayList<String> lists){
//再将lists集合中的数字排序
lists.sort(new Comparator<String>() {
@Override
//Array.sort[插入排序+二分排序]
public int compare(String o1, String o2) {
/*
o1:代表现在要添加的数据
o2:已经存储在集合中的数据
*/
//计算花色和价值
String color = o1.substring(0, 1);
int val=getValue(o1);
String color1 = o2.substring(0, 1);
int val1=getValue(o2);
//比价价值
int i=val-val1;
return i==0 ? color.compareTo(color1):i; //价值相同,就比较花色大小
}
});
//输出牌面
System.out.print(name+"的牌=");
System.out.println(lists);
}
//计算价值的方法
public static int getValue(String str){
//获取数字
String sub = str.substring(1);
//判断获取的数字在map集合中是否存在
//注意点:存在大王/小王的Bug,要统一截取,令其在集合中存在
if(List.containsKey(sub)){
//存在,就获取值
return List.get(sub);
}else {
//不存在,就将键强制转换成价值【int】类型作为价值
return Integer.parseInt(sub);
}
}
}