Java仿抽奖系统
Java仿抽奖系统
前言
今天也是刚看完最近挺火的电影《孤注一掷》,也是亲眼的看到了,一个完整的家庭,是如何因为赌,而导致分崩离析,最后导致走向破碎的。
一旦涉及到电子的东西,很多东西都是变得可以控制的。这个作为程序员的我们是最清楚的,同时现在的反诈宣传,做的也是非常的到位,当时剧中哪位女警说的话,影响也非常的深刻。人都有贪心和不甘心,这也就是赌能真正抓住人的东西
好了不说那么多了,下面看一个简易的程序的代码实现
代码实现
首先我们定义一些常量
private static final int PRIZE_LEVELS = 4; // 奖品级别数量
private static final int[] PRIZE_AMOUNTS = {1, 10, 100, 1000}; // 奖品金额
private static final double[] WINNING_RATES = {10, 0, 0, 0}; // 中奖率
public static void main(String[] args) {
// 设定中奖率
double winningRate = 0.1;
// 抽奖
int prize = drawLottery(winningRate);
// 发放奖品
if (prize > 0) {
System.out.println("恭喜你中奖了!奖金:" + prize + "元");
} else {
System.out.println("很遗憾,未中奖");
}
}
// 抽奖方法
private static int drawLottery(double winningRate) {
Random random = new Random();
int prize = 0;
// 根据奖品级别逐级判断中奖
for (int i = 0; i < PRIZE_LEVELS; i++) {
// 生成0到1之间的随机数,判断是否中奖
if (random.nextDouble() < winningRate * WINNING_RATES[i]) {
prize = PRIZE_AMOUNTS[i];
break;
}
}
return prize;
}
}
一个简单的抽奖程序。我们根据这个进行一些修改,更加的客观真实,我们加上已经有的金额和权重,让他更像是真正的赌。
我们加入权重以及自己的现金
private static double[] WEIGHTS;
// 自己的现金余额
static int cashBalance = 1000;
之后我们进行这样设计
public static void main(String[] args) {
// 计算权重
calculateWeights();
// 自己的现金余额
int cashBalance = 1000;
// 抽奖一次
drawLottery(cashBalance);
}
public static void calculateWeights() {
WEIGHTS = new double[WINNING_RATES.length];
double totalWeight = 0;
// 计算总权重
for (double rate : WINNING_RATES) {
totalWeight += rate;
}
// 计算每个奖品级别的权重
for (int i = 0; i < WEIGHTS.length; i++) {
WEIGHTS[i] = WINNING_RATES[i] / totalWeight;
}
}
public static void drawLottery() {
Random random = new Random();
double randomValue = random.nextDouble();
int prizeIndex = 0;
double cumulativeWeight = 0;
// 根据随机值选择对应的奖品级别
for (int i = 0; i < WEIGHTS.length; i++) {
cumulativeWeight += WEIGHTS[i];
if (randomValue <= cumulativeWeight) {
prizeIndex = i;
break;
}
}
// 判断是否中奖
if (random.nextDouble() <= WINNING_RATES[prizeIndex]) {
int prizeAmount = PRIZE_AMOUNTS[prizeIndex];
System.out.println("恭喜您中奖了!获得奖金:" + prizeAmount + "元");
cashBalance += prizeAmount;
} else {
System.out.println("很遗憾,未中奖。");
}
// 更新现金余额
cashBalance -= COST_PER_DRAW;
System.out.println("抽奖后的现金余额:" + cashBalance + "元");
}
可以看出,我们这里规定的是20元抽奖一次,最高能达到1000元。
运行一次后发现从原来的升值到了5000,
可是当你一旦陷入进去的话,只要我们稍微修改一下中奖率
就会不断的去输。
赌博有害健康,需要我们每个人去
作者:小u制止
来源:juejin.cn/post/7270173541457723452