ctrl+shift+/:多行注释
第一版:
App:
package game;
public class App {
public static void main(String[] args) {
new PokerGame();
}
}
package game;
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 s : color) {
for (String string : number) {
list.add(s + string);
}
}
list.add("大王");
list.add("小王");
}
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++) {
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 {//注意:不能写 i % 3 == 1
player3.add(list.get(i));
}
}
//看牌
lookPoker("底牌", lord);
lookPoker("player1", player1);
lookPoker("player2", player2);
lookPoker("player3", player3);
}
//参数
//玩家姓名
//牌
public static void lookPoker(String name, ArrayList<String> list) {
System.out.print(name + ":");
for (String poker : list) {
System.out.print(poker + " ");
}
System.out.println();
}
}
第二版:利用序号对牌进行排序
App:
package gameSort;
public class App {
public static void main(String[] args) {
new PokerGame();
}
}
package gameSort;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
public class PokerGame {
//存储每张牌及其对应的序号
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 startNumber = 1;
//number要在外循环,这样可以保证不同花色的同一张牌价值是相近的
for (String n : number) {
for (String c : color) {
hm.put(startNumber, c + n);
list.add(startNumber);
startNumber++;
}
}
hm.put(startNumber, "大王");
list.add(startNumber);
startNumber++;
hm.put(startNumber, "小王");
list.add(startNumber);
}
PokerGame() {
//洗牌
Collections.shuffle(list);
//发牌(使用treeSet可以直接排序)
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++) {
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("玩家1", player1);
lookPoker("玩家2", player2);
lookPoker("玩家3", player3);
}
/*
* 参数一:玩家姓名
* 参数二:牌的序号
* */
public static void lookPoker(String name, TreeSet<Integer> list) {
System.out.print(name + ":");
for (Integer i : list) {
//根据数字找对应的牌
String s = hm.get(i);
System.out.print(s + " ");
}
System.out.println();
}
}
第三版:利用牌的价值进行排序
App
package game3;
public class App {
public static void main(String[] args) {
new PokerGame();
}
}
package game3;
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 s : color) {
for (String string : number) {
list.add(s + string);
}
}
//需要在汉字前面加一个空格,以免getValue截取不到完整的“大王”\“小王”
list.add(" 大王");
list.add(" 小王");
//给牌添加价值,3~10直接由字符串转换成Integer类型即可,减少复杂性
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);
}
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++) {
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 {//注意:不能写 i % 3 == 1
player3.add(list.get(i));
}
}
//排序
order(lord);
order(player1);
order(player2);
order(player3);
//看牌
lookPoker("底牌", lord);
lookPoker("player1", player1);
lookPoker("player2", player2);
lookPoker("player3", player3);
}
//利用牌的价值进行排序
//参数:集合
public void order(ArrayList<String> list) {
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//o1:表示当前要插入到有序序列中的牌
//o2:表示已经在有序序列中存在的牌
//负数:o1小 插到前面
//正数:o2大 插到后面
//0:o1的数字和o2是一样大的,需要按照花色再次排序
//1.计算o1花色和价值
String color1 = o1.substring(0, 1);
int value1 = getValue(o1);
//2.计算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);
}
}
public static void lookPoker(String name, ArrayList<String> list) {
System.out.print(name + ":");
for (String poker : list) {
System.out.print(poker + " ");
}
System.out.println();
}
}