一百行代码轻松实现炸金花
有哪些方法?
1.生成扑克牌
2.随机数+列表->打乱扑克牌
3.开摆
4.判定输赢(未做)
java实现代码
/**
* @Author AJA 贾祥啊
* @// TODO: 2022/1/18 半成品,输赢判定未做
*/
package 炸金花;
import java.util.ArrayList;
import java.util.List;
public class ZhaJinHua {
public static void main(String[] args) {
//生成一副扑克牌
String[] pokerAll = Poker();
//输出扑克牌没有使用前的模样
System.out.print("生成了一副扑克牌:");
showPokerAll(pokerAll);
System.out.println("\n\n玩家们的手牌:");
//玩家开始玩扑克牌
Playing(4,pokerAll);
//输出扑克牌使用后的模样
System.out.print("\n使用后的扑克牌:");
showPokerAll(pokerAll);
}
/**
* 纸牌生成 52张 A-10+JQK 四种花色
* kind :代表花色
* pokerAll[] :52张牌的容量
* fg :2 - 10的牌生成 ,AJQK单独生成
* kindIdx :使用花色的下标
* @return String[] pokerAll 所有的牌
*/
private static String[] Poker() {
String[] pokerAll = new String[52];
String[] kind = {"♥", "♦", "♠", "♣"};
int fg = 1;
int kindIdx = 0;
for (int i = 0; i < 52; i++) {
if (fg==1 || fg>10){
pokerAll[i] = fg==1?"A"+kind[kindIdx]:fg==11?
"J"+kind[kindIdx]:fg==12?"Q"+kind[kindIdx]:"K"+kind[kindIdx];
}else {
pokerAll[i] = fg+kind[kindIdx];
}
if ((i+1)%4==0){
fg++;
}
kindIdx = kindIdx==3?0:kindIdx+1;
}
return pokerAll;
}
/**
* 显示该副纸牌的所有情况,如果牌被使用了,可以使用该方法查看
* @param pokerAll 生成的一副纸牌
*/
private static void showPokerAll(String [] pokerAll){
for (int i = 0; i < pokerAll.length; i++) {
if (i%4==0){
System.out.println();
}
System.out.print("| "+pokerAll[i]+" |");
}
}
/**
* 人数最少 2 人 , 最多 17 人 , 一副纸牌
* @param personNum 玩家人数
* @param pokerAll 选择生成的一副纸牌
*/
private static void Playing(int personNum , String[] pokerAll){
if (personNum<2 || personNum>17){
System.out.println("人数最少 2 人 , 最多 17 人");
return;
}
String[] setPoker = new String[personNum];
List<Integer> list = chaosPokerAll();
String temp="";
int index = 0;
for (int i = 0; i < personNum; i++) {
for (int j = 0; j < 3; j++) {
temp += pokerAll[list.get(index)]+" ";
pokerAll[list.get(index)]="无";
index++;
}
setPoker[i] = temp;
temp = "";
}
for (int i = 0; i < setPoker.length; i++) {
System.out.println("玩家"+(i+1)+" :"+setPoker[i]);
}
}
/**
* 打乱生成的一副纸牌的顺序 , 在Playing方法中会使用该方法
* @return 返回一个打乱的index列表
*/
private static List<Integer> chaosPokerAll(){
List<Integer> list = new ArrayList<>();
while (list.size() != 52){
int rNum = (int)(Math.random()*52);
if (!list.contains(rNum)){
list.add(rNum);
}
}
return list;
}
}
运行了N次没跑出一个炸弹…
运行结果:
建议改动
1.洗牌顺序
2.自制操盘方法(你懂得)
3.做个随机洗牌区间模拟人为洗牌