likes
comments
collection
share

Java仿抽奖系统

作者站长头像
站长
· 阅读数 23

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元。

Java仿抽奖系统

运行一次后发现从原来的升值到了5000,

可是当你一旦陷入进去的话,只要我们稍微修改一下中奖率

Java仿抽奖系统

就会不断的去输。

赌博有害健康,需要我们每个人去制止