经过老师详细的讲解和多天的学习,让我已经开始有点小入门。以后的路还很长,希望可以越走越远。以下是我通过学习能自己编写的一些小代码,不喜勿喷: 1. 斗地主发牌机制: public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
method(list, "黑桃");
method(list, "方块");
method(list, "梅花");
method(list, "红桃");
list.add("小王");
list.add("大王"); //上面的代码主要就是调用方法把54张牌添加到集合中
System.out.println(list);
System.out.println("==========="); // 调用三次随机发牌机制,就会有三个集合出来,各是17张牌,之后大集合只剩余3张牌。
method(list);
method(list);
method(list);
System.out.println(list);
}
//该方法主要把一副牌除了大小王 可以一次添加到 集合当中
public static void method(ArrayList<String> list, String str) {
for (int i = 1; i <= 13; i++) {
list.add(str + i);
}
}
// 该方法主要是把一个大集合当中的牌 随机发出17张放到新的集合当中,每发出1张,大集合会移除发出的牌
public static void method(ArrayList<String> list) {
ArrayList<String> listA = new ArrayList<>();
Random r = new Random();
for (int i = 0; i < 17; i++) {
int num = r.nextInt(list.size());
listA.add(list.get(num));
list.remove(num);
}
System.out.println(listA);
} 2. 发红包随机的方法 // 传入的参数: 多少钱,多少份 public ArrayList<Integer> divide(final int totalMoney, final int totalCount) {
ArrayList<Integer> list = new ArrayList<>();
Random r = new Random();
int leftMoney = totalMoney;
int leftCount = totalCount; // 来一个循环,循环次数比份数少1,因为最后一个人抢的就是剩余的钱
for (int i = 0; i < totalCount - 1; i++) { //1 + random.nextInt(leftMoney / leftCount * 2) 就是抢红包的范围公式
int money = r.nextInt(leftMoney / leftCount * 2) + 1;
list.add(money);
leftMoney -= money;
leftCount--;
}
list.add(leftMoney);
return list;
} 通过这个抢红包范围的公式,知道了抢红包第一个抢比较吃亏,当然,最主要的还是看RP。
|