学了一阵子的C语言,还没学透,玩游戏的时候感觉太非,就自己试着用会的那么点东西写了这么一个。当然废话可能蛮多的,新手嘛,体谅体谅,也希望路过的大佬给提点建议,
变量名都是瞎起的,比如概率的英文是probability我就写pbb,所以看着可能有点乱。
在这个程序里,5星的概率为0.6%,在50抽没有5星的情况下,开始每抽一次概率增加1%,第91次必为5星,同时概率恢复到最初值。抽到5星时50%是常驻(俗称“歪了”),50%是up,如果抽到常驻,下次5星必为up。
4星概率为5.1%,每抽到3星,概率加2%,每10次必出四星及以上卡,之后刷新4星的概率
3星概率为94.3%
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
static int pbb1 = 6; //把整体分为3部分的两个间隔数
static int pbb2 = 949; //概率probability
static int s = 0; //三星数量
static int ss = 0; //四星数量
static int sss_1 = 0; //up五星数量
static int sss_2 = 0; //常驻五星数量
static int num = 0; //抽奖的总次数
static int bao = 0; //保底
static int num_3_4 = 0; //抽到三星和四星的数量,因为抽到五星要清零,所以不用s+ss
void head() //标题函数
{
printf("请选择祈愿次数\n");
printf("1 次:请输入1\n");
printf("10次:请输入10\n");
printf("退出请输入0\n");
}
void action(int ret) //抽奖函数
{
if (0 < ret && ret <= pbb1 || num_3_4 == 90) //随机数为0-pbb1或者三星四星数量到90为五星
{
if (ret % 2 == 0 || bao == 1) //有50%的概率抽到up五星,50%概率抽到常驻的五星
{ //且第一次不是up,第二次抽到五星必为up五星 即保底bao==1时
printf("*****up五星*****\n");
sss_1++;
bao = 0; //抽到up五星保底就清零
}
else
{
printf("*****常驻五星*****\n");
sss_2++;
bao++; //没抽到up五星保底+1
}
pbb1 = 6; //抽到五星概率就回到最初值
num_3_4 = 0; //抽到五星 三星+四星的数量清零
}
else if (pbb1 <= ret && ret <= pbb2) //随机数为pbb1-pbb2时为三星
{
printf("***三星***\n");
if (num_3_4 >= 50) //如果三星+四星的数量>=50时 增加抽五星的范围
pbb1 += 10; //五星的范围加10 相当于增加1%
num_3_4++;
pbb2 -= 20; //四星的范围加20 相当于增加2%
s++;
}
else if (pbb2 < ret && ret <= 1000) //随机数为pbb2-1000时为四星
{
printf("****四星****\n");
if (num_3_4 >= 50)
pbb1 += 10;
num_3_4++;
pbb2 = 1000 - 51; //抽到四星后四星的概率返回最初值
ss++;
s = 0; //当抽到四星 三星的数量清零 用于下边的10抽必中4星
}
if (s == 9) //连着九发是三星,第十发必是四星或五星
{
pbb2 = pbb1; //五星概率不变 把三星的概率都给了四星
}
}
int main()
{
int n = 0;
do
{
head(); //先打印标题
scanf("%d", &n); //输入次数1/10
switch (n) //判断n
{
case 1: //n=1执行一次action函数
srand(time(0)); //生成随机数
int m = rand() % 1000 + 1; //使随机数在1-1000之间
action(m);
printf("合计:共%d次,四星有%d个,五星有%d个\n\n", num+=1, ss, sss);
continue;
case 10: //n=10执行10次action函数
{
int a[10]; //定义一个存放10个随机数的数组
int i;
srand(time(0));
for (i = 0; i < 10; i++)
{
a[i] = rand() % 1000 + 1; //生成10个随机数并依次赋值给数组的各元素
action(a[i]);
}
printf("合计:共%d次,四星有%d个,up五星有%d个,常驻五星有%d个\n\n", num+=10, ss, sss_1,sss_2);
}
continue;
case 0: //输入0结束
break;
default: //输入其他数显示错误
printf("输入错误");
}
} while (n); //n!=0就一直循环
return 0;
}
第一篇文章,支持一下,大佬提点建议,我会虚心学习。