主斗地主模拟器
第一次写博客,打算长期写下去(?新人请多关照
不一定是大佬一样的教程,只是想把学到的东西做个记录这样子
然后就言归正传
功能1 显示所有扑克牌
供能2 洗牌(即使牌随机排序
功能3 发牌并打印出来,啊还要打印底牌(就是剩下的那三张
功能4 可以将发的牌按照顺序排序,做到从大到小自动整牌
这次打算把排序的拿一个功能分开写一个类,不然主体代码会很长
先新建一个主类(展示所有扑克牌和洗牌功能
public class DDZ {
public static void main(String[] args) {
//我是建立了三个数列,鬼牌(大王小王)单独一个数组,然后剩下的牌的花色,数字两个数组
List<String> all= new ArrayList<>(); //全部的牌
List<String> colors = new ArrayList<>(); //花色
List<String> numbers = new ArrayList<>(); //数字
//往花色数组里添加四种花色
colors.add("❤");
colors.add("♣");
colors.add("◇");
colors.add("♠");
//往数字数组里添加牌
numbers.add("A"); //A这张牌比较特殊,所以单独加入,下面的JQK也是
numbers.add("J");
numbers.add("Q");
numbers.add("K");
//循环插入
for (int i = 2; i <= 10; i++) {
numbers.add(i + "");
}
//创建整副牌的数组(pai),然后插入all数组里
for (String C : colors) {
for (String N : numbers) {
String pai = C + N;
all.add(pai);
}
}
pokes.add("joker"); //理由同上,两张鬼牌单独插入(emm在这里,个人感觉鬼牌放到上面插入也没什么问题
pokes.add("JOKER");
Collections.shuffle(all); //洗牌(这个Collections.shuffle();的功能就是打乱数组里面牌的顺序
//打印出来
int i;
for (i = 0; i < all.size(); i++) {
if (i % 13 == 0) {
System.out.println();
}
System.out.print(all.get(i) + "\t");
}
接下来新建一个排序类,用来实现发牌之后的排序功能
//通过输入一个数组,进行排序后,返回一个数组
public class fp {
public static void change(ArrayList<String> X){ //change方法,就是排序
ArrayList<Integer> newlist = new ArrayList<>();
int a = 0; //下面的数字都是设置牌面的大小
for (String s : X){
if ("joker".equals(s)){
a = 500;
}else if ("JOKER".equals(s)){
a = 600;
}else {
if (s.charAt(0) == '❤'){
a = 1;
}else if (s.charAt(0) == '♣'){
a = 2;
}else if (s.charAt(0) == '◇'){
a = 3;
}else if (s.charAt(0) == '♠'){
a = 4;
}
if (s.charAt(1) == 'J'){
a += 110;
}else if(s.charAt(1) == 'Q'){
a += 120;
}else if(s.charAt(1) == 'K'){
a += 130;
}else if (s.charAt(1) == 'A'){
a += 140;
}else if (s.charAt(1) == '2'){
a += 150;
}else if (s.charAt(1) == '1' && s.charAt(2) == '0'){
a += 100;
}else{
a += (s.charAt(1) - '0') * 10;
}
}
newlist.add(a);
}
sawp(newlist,X);
System.out.println(X);
}
public static void sawp(ArrayList<Integer> list,ArrayList<String> X) {
String temp1;int temp2;
//这里有一个sawp();函数,相当于交换,简单来说就是交换里面的两个东西的位置
//执行一个冒泡排序,使发到的牌按从大到小牌,花色之前也经过了设置,也是从大到小
for(int i=0;i < list.size()-1;i++){
for(int j=0;j < list.size()-1;j++){
if(list.get(j + 1) < list.get(j)){
temp1 = X.get(j);
X.set(j, X.get(j + 1));
X.set(j + 1, temp1);
temp2 = list.get(j);
list.set(j, list.get(j + 1));
list.set(j + 1, temp2);
}
}
}
}
}
然后我们再回到主类
//新建玩家和底牌数组
ArrayList<String> p1 = new ArrayList<>();
ArrayList<String> p2 = new ArrayList<>();
ArrayList<String> p3 = new ArrayList<>();
ArrayList<String> dipai = new ArrayList<>();
//发牌,按照三个一循环发牌,用的是已经洗牌之后的数组
for (i = 0; i < pokes.size(); i++) {
String pai = pokes.get(i);
if (i >= 51) {
dipai.add(pai);
} else {
if (i % 3 == 0) {
p1.add(pai);
} else if (i % 3 == 1) {
p1.add(pai);
} else {
p1.add(pai);
}
}
}
//打印
System.out.println();
System.out.println();
System.out.println(p1);
System.out.println(p2);
System.out.println(p3);
System.out.println(dipai);
System.out.println();
System.out.println();
//排序
fp.change(p1);
fp.change(p2);
fp.change(p3);
fp.change(dipai);
啊好啦就是这些啦
如果有错误麻烦和可以完善的地方希望各位大佬帮忙指点呀
再一次请多关照!!