抽卡模拟
1、srand()函数设置随机种子,rand()设置随机数,system("cls")清屏,system("pause")暂停
2.寻找机制
3.上代码
简单说一下机制
四星,到九抽的时候,概率随着抽数(count1)增加,抽到四星后,count1重置
五星,超过73抽仍没抽到五星,则概率随着抽数(count2)增加,抽到五星后,count2重置
注:该程序仍有偏差,出金率较高,我都成功来了一次十连三金。还有,本程序只设置了1,10和0的选择,输入其他没用
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define B 10000
int count1 = 0; //用于四星角色机制
int count2 = 0; //用于五星角色机制
int count3 = 0; //总共抽取的三星个数
int count4 = 0; //总共抽取的四星个数
int count5 = 0; //总共抽取的五星个数
int total = 0; //总共抽取数
//菜单
void menu()
{
printf("原神抽卡模拟器:\n");
printf("---------------------------------------\n");
printf("限定up池:\n");
printf("五星限定up:流浪者\n");
printf("四星:烟绯,珐露珊,罗莎莉亚\n");
printf("三星\n");
printf("---------------------------------------\n");
printf("抽卡数:1 or 10\n");
printf("---------------------------------------\n");
printf("退出exit(0)\n");
}
//五星角色
void wuxing()
{
int wai = rand() % 13 + 1;
if (wai < 7)
{
switch (wai)
{
case 0:printf("五星常驻up ***** 七七\n");
break;
case 1:printf("五星常驻up ***** 迪卢克\n");
break;
case 2:printf("五星常驻up ***** 莫娜\n");
break;
case 3:printf("五星常驻up ***** 刻晴\n");
break;
case 4:printf("五星常驻up ***** 琴\n");
break;
case 5:printf("五星常驻up ***** 提纳里\n");
break;
case 6:printf("五星常驻up ***** 迪希雅\n");
break;
}
count1++;
count2++;
count5++;
total++;
}
else
{
printf("五星限定up ***** 流浪者\n");
count1++;
count2 = 0;
count5++;
total++;
}
}
//四星角色、武器
void sixing()
{
int four = 0;
int fourwai = 0;
fourwai = rand() % 100;
if (fourwai <50)
{
four = rand() % 3;
switch (four)
{
case 0:printf("四星角色 **** 烟绯\n");
break;
case 1:printf("四星角色 **** 罗莎莉亚\n");
break;
case 2:printf("四星角色 **** 珐露珊\n");
break;
}
}
else
{
srand(time(NULL));
four = rand() % 48;
switch (four)
{
case 0:printf("四星角色 **** 诺艾尔\n");
break;
case 1:printf("四星角色 **** 凝光\n");
break;
case 2:printf("四星角色 **** 云堇\n");
break;
case 3:printf("四星角色 **** 五郎\n");
break;
case 4:printf("四星角色 **** 辛焱\n");
break;
case 5:printf("四星角色 **** 班尼特\n");
break;
case 6:printf("四星角色 **** 香菱\n");
break;
case 7:printf("四星角色 **** 安柏\n");
break;
case 8:printf("四星角色 **** 托马\n");
break;
case 9:printf("四星角色 **** 重云\n");
break;
case 10:printf("四星角色 **** 凯亚\n");
break;
case 11:printf("四星角色 **** 迪奥娜\n");
break;
case 12:printf("四星角色 **** 米卡\n");
break;
case 13:printf("四星角色 **** 莱依拉\n");
break;
case 14:printf("四星角色 **** 砂糖\n");
break;
case 15:printf("四星角色 **** 早柚\n");
break;
case 16:printf("四星角色 **** 鹿野院平藏\n");
break;
case 17:printf("四星角色 **** 行秋\n");
break;
case 18:printf("四星角色 **** 芭芭拉\n");
break;
case 19:printf("四星角色 **** 坎蒂丝\n");
break;
case 20:printf("四星角色 **** 北斗\n");
break;
case 21:printf("四星角色 **** 菲谢尔\n");
break;
case 22:printf("四星角色 **** 雷泽\n");
break;
case 23:printf("四星角色 **** 丽莎\n");
break;
case 24:printf("四星角色 **** 九条裟罗\n");
break;
case 25:printf("四星角色 **** 多利\n");
break;
case 26:printf("四星角色 **** 柯莱\n");
break;
case 27:printf("四星角色 **** 瑶瑶\n");
break;
case 28:printf("四星角色 **** 卡维\n");
break;
case 29:printf("四星角色 **** 绮良良\n");
break;
case 30:printf("四星武器 **** 弓藏\n");
break;
case 31:printf("四星武器 **** 祭礼弓\n");
break;
case 32:printf("四星武器 **** 绝弦\n");
break;
case 33:printf("四星武器 **** 西风猎弓\n");
break;
case 34:printf("四星武器 **** 昭心\n");
break;
case 35:printf("四星武器 **** 祭礼残章\n");
break;
case 36:printf("四星武器 **** 流浪乐章\n");
break;
case 37:printf("四星武器 **** 西风秘典\n");
break;
case 38:printf("四星武器 **** 西风长枪\n");
break;
case 39:printf("四星武器 **** 匣里灭辰\n");
break;
case 40:printf("四星武器 **** 雨裁\n");
break;
case 41:printf("四星武器 **** 祭礼大剑\n");
break;
case 42:printf("四星武器 **** 钟剑\n");
break;
case 43:printf("四星武器 **** 西风大剑\n");
break;
case 44:printf("四星武器 **** 匣里龙吟\n");
break;
case 45:printf("四星武器 **** 祭礼剑\n");
break;
case 46:printf("四星武器 **** 笛剑\n");
break;
case 47:printf("四星武器 **** 西风剑\n");
break;
}
}
count1 = 0;
count2++;
count4++;
total++;
}
//三星武器
void sanxing()
{
int three = rand() % 13;
switch (three)
{
case 0:printf("三星武器 *** 弹弓\n");
break;
case 1:printf("三星武器 *** 神射手之誓\n");
break;
case 2:printf("三星武器 *** 鸦羽弓\n");
break;
case 3:printf("三星武器 *** 翡玉法球\n");
break;
case 4:printf("三星武器 *** 讨龙英杰谭\n");
break;
case 5:printf("三星武器 *** 魔导绪论\n");
break;
case 6:printf("三星武器 *** 黑缨枪\n");
break;
case 7:printf("三星武器 *** 以理服人\n");
break;
case 8:printf("三星武器 *** 沐浴龙血的剑\n");
break;
case 9:printf("三星武器 *** 铁影阔剑\n");
break;
case 10:printf("三星武器 *** 飞天御剑\n");
break;
case 11:printf("三星武器 *** 黎明神剑\n");
break;
case 12:printf("三星武器 *** 冷刃\n");
break;
}
count1++;
count2++;
count3++;
total++;
}
//单次抽卡
void one()
{
int up = rand() % B;
if (count2 <= 73)
{
if (count1 <= 8)
{
if (up < 60)
{
wuxing();
}
else if (up >= 60 && up < 510 + 60)
{
sixing();
}
else
{
sanxing();
}
}
else if (count1 >= 9)
{
if (up < 60)
{
wuxing();
}
else if (up >= 60 && up < 510 + 60 + 5100 * (count1 - 8))
{
sixing();
}
else
{
sanxing();
}
}
}
else
{
if (count1 <= 8)
{
if (up < 60 + 600 * (count2 - 73))
{
wuxing();
}
else if (up >= 60 && up < 510 + 60)
{
sixing();
}
else
{
sanxing();
}
}
else if (count1 >= 9)
{
if (up < 60)
{
wuxing();
}
else if (up >= 60 && up < 510 + 60 + 5100 * (count1 - 8))
{
sixing();
}
else
{
sanxing();
}
}
}
}
int main()
{
while (1)
{
menu();//菜单展示
srand(time(0));//设置随机种子
int x = 0;
printf("请输入抽卡数:\n");
scanf("%d", &x);
if (x == 1)
{
one();
//printf("count1 = %d\n", count1);
printf("count2 = %d\n", count2);
}
else if (x == 10)
{
for (int i = 0; i < 10; i++)
{
one();
//printf("count1 = %d\n", count1);
printf("count2 = %d\n", count2);
}
}
else if (x == 0)
{
printf("总共抽取%d抽\n", total);
printf("五星共%d个\n", count5);
printf("四星共%d个\n", count4);
printf("三星共%d个\n", count3);
break;
}
system("pause");
system("cls");
}
return 0;
}