C语言--原神角色抽卡模拟

抽卡模拟

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;
}

 

 

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值