一:斗地主游戏(控制台)
完成斗地主游戏中的以下步骤:
1.准备牌
2.洗牌
3.发牌
PokerGame:
import java.text.CollationElementIterator;
import java.util.ArrayList;
import java.util.Collections;
public class PokerGame {
//准备一副扑克牌
//静态代码块,特点:随着类的加载而加载,而且只执行一次
static ArrayList<String> card = new ArrayList<>();
static {
String[] color = {"♦", "♣", "♥", "♠"};
String[] number = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
for (String c : color) {
for (String n : number) {
card.add(c + n);
}
}
card.add("JOKER");
card.add("BLACKJOKER");
}
public PokerGame() {
//洗牌
Collections.shuffle(card);
//发牌
//发给三名玩家的牌
ArrayList<String> player1 = new ArrayList<>();
ArrayList<String> player2 = new ArrayList<>();
ArrayList<String> player3 = new ArrayList<>();
//地主的三张盖卡
ArrayList<String> hidecard = new ArrayList<>();
for (int i = 0; i < card.size(); i++) {
String getcard = card.get(i);
if (i <= 2) {
hidecard.add(getcard);
continue;
}
if (i % 3 == 0) {
player1.add(getcard);
}
if (i % 3 == 1) {
player2.add(getcard);
}
if (i % 3 == 2) {
player3.add(getcard);
}
}
//看牌
mycard("hidecard", hidecard);
mycard("A", player1);
mycard("B", player2);
mycard("C", player3);
}
//identify:玩家的身份
//al:每个玩家的牌
public void mycard(String identify, ArrayList<String> al) {
System.out.print(identify + ":");
for (String takencard : al) {
System.out.print(takencard + " ");
}
System.out.println();
}
}
IntegratedProject:
public class IntegratedProject {
public static void main(String[] args) {
new PokerGame();
}
}
二:斗地主游戏(控制台)
完成斗地主游戏中的以下步骤:
1.准备牌
2.洗牌
3.发牌
4.给牌进行排序
方式一:利用序号进行排序
利用了对应思想——
(1).如果原始数据的规律非常复杂,我们可以先手动排序让每一个数据跟唯一的序号产生对应关系
(2).序号就是数字,规律非常简单,后续的所有操作我们都以序号为准
(3).当真正需要操作原始数据的时候,再通过序号找到原始数据
PokerGame:
import java.text.CollationElementIterator;
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> al = new ArrayList<>();
//准备一副扑克牌
//静态代码块,特点:随着类的加载而加载,而且只执行一次
static {
String[] color = {"♦", "♣", "♥", "♠"};
String[] number = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
//表示每张牌大小关系和花色的序号(建议打印一下hm便于理解)
int serialnumber = 1;
for (String n : number) {
for (String c : color) {
hm.put(serialnumber, c + n);
al.add(serialnumber);
serialnumber++;
}
}
hm.put(serialnumber, "BLACKJOKER");
al.add(serialnumber);
serialnumber++;
hm.put(serialnumber, "JOKER");
al.add(serialnumber);
}
public PokerGame() {
Collections.shuffle(al);
//TreeSet内有默认的排序方式——从小到大排列,不用我们额外写排序的代码了
TreeSet<Integer> hidecard = new TreeSet<>();
TreeSet<Integer> player1 = new TreeSet<>();
TreeSet<Integer> player2 = new TreeSet<>();
TreeSet<Integer> player3 = new TreeSet<>();
for (int i = 0; i < al.size(); i++) {
int number = al.get(i);
if (i <= 2) {
hidecard.add(number);
continue;
}
if (i % 3 == 0) {
player1.add(number);
}
if (i % 3 == 1) {
player2.add(number);
}
if (i % 3 == 2) {
player3.add(number);
}
}
mycard("hidecard", hidecard);
mycard("player1", player1);
mycard("player2", player2);
mycard("player3", player3);
}
public void mycard(String identify, TreeSet<Integer> ts) {
System.out.print(identify + ":");
for (Integer i : ts) {
String card = hm.get(i);
System.out.print(card + " ");
}
System.out.println();
}
}
IntegratedProject:
public class IntegratedProject {
public static void main(String[] args) {
new PokerGame();
}
}
方式二:给每一张牌计算价值
PokerGame:
import java.text.CollationElementIterator;
import java.util.*;
public class PokerGame {
//牌盒
static ArrayList<String> al = new ArrayList<>();
//创建有关牌的价值的一个集合
static HashMap<String, Integer> hm = new HashMap<>();
//准备一副扑克牌
//静态代码块,特点:随着类的加载而加载,而且只执行一次
static {
String[] color = {"♦", "♣", "♥", "♠"};
String[] number = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
for (String c : color) {
for (String n : number) {
al.add(c + n);
}
}
//在JOKER和BLACKJOKER前面添加了一个空格,为的是让它和其他的牌的格式保持一致,因为其他的牌分为两个部分——花色和字符
//而在下方的排序中也是将这两个部分截取之后分开比较其价值,然后再进行排序的
//所以需要在这两张牌前面添加一个空格以保证截取时获得两个部分
//空格部分对应其他种类的牌上的花色,而后面的JOKER和BLACKJOKER部分对应的是其他种类的牌上的字符
//如果不这样做的话会出现一个问题:截取之后在HashMap中找不到JOKER和BLACKJOKER所对应的价值(因为被截取成了OKER和LACKJOKER)
//然后就会进行下方的Integer强转,但是这两个又是字符型的数据,因而报错
al.add(" JOKER");
al.add(" BLACKJOKER");
//没有记录数字牌对应的价值,那么当出现数字牌时所要做的第一件事就是拿着牌上的数字到Map集合中判断是否存在
//若存在,则获取其价值,若不存在,那么数字牌上的数字就是它的价值
//这样的设计是为了优化效率
hm.put("J", 11);
hm.put("Q", 12);
hm.put("K", 13);
hm.put("A", 14);
hm.put("2", 15);
hm.put("JOKER", 16);
hm.put("BLACKJOKER", 17);
}
public void mycard(String identify, ArrayList<String> arrayList) {
System.out.print(identify + ":");
for (int i = 0; i < arrayList.size(); i++) {
String card = arrayList.get(i);
System.out.print(card + " ");
}
System.out.println();
}
public PokerGame() {
Collections.shuffle(al);
ArrayList<String> hidecard = new ArrayList<>();
ArrayList<String> player1 = new ArrayList<>();
ArrayList<String> player2 = new ArrayList<>();
ArrayList<String> player3 = new ArrayList<>();
for (int i = 0; i < al.size(); i++) {
String card = al.get(i);
if (i <= 2) {
hidecard.add(card);
}
if (i % 3 == 0) {
player1.add(card);
}
if (i % 3 == 1) {
player2.add(card);
}
if (i % 3 == 2) {
player3.add(card);
}
}
valuesort(hidecard);
valuesort(player1);
valuesort(player2);
valuesort(player3);
mycard("hidecard", hidecard);
mycard("player1", player1);
mycard("player2", player2);
mycard("player3", player3);
}
public void valuesort(ArrayList<String> arrayList) {
//如果只是调用sort方法而没有自己设置排序的条件的话就会按照默认方式排序,而默认方式排序根本达不到我们想要的结果
//sort方法使用了插入排序+二分查找的方式
//o1:表示当前要插入到有序序列中的牌
//o2:表示已经存在于有序序列中的牌
Collections.sort(arrayList, 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;
return i == 0 ? color1.compareTo(color2) : i;
}
});
}
public int getvalue(String card) {
String number = card.substring(1);
//如果号码存在于HashSet的价值对应表中,则直接获取其中的价值
//如果不存在,则把号码强制类型转换为Integer型,并作为价值返回
if (hm.containsKey(number)) {
return hm.get(number);
} else {
return Integer.parseInt(number);
}
}
}
IntegratedProject:
public class IntegratedProject {
public static void main(String[] args) {
new PokerGame();
}
}
三:斗地主游戏(页面版)
标签:String,项目,ArrayList,斗地主,al,hm,new,public,综合 From: https://blog.csdn.net/NaZiMeKiY/article/details/137196237