原神抽卡模拟系统

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<time.h>
#define user_max_num 10
#define max_id 1999
#define min_id 1000
#define max_password_length 10


typedef struct user {
	int five_star_draw_num;//距上个五星的抽数
	int four_star_draw_num;//距上个四星的抽数
	int user_ID;//用户id 1000-1999
	char password[max_password_length];
}user;
user u[user_max_num];
int record_five_star[100];
int record_num=0;
int draw_count_num=0;

void ClearScreen()//清屏
{
	system("cls"); //for Windows
	//system("clear"); //for Linux
}

void FreeBuffer() //吸收输入选项的回车
{
	while (getchar() != '\n') {//抵消输入选项时的回车
		continue;
	}
}

void AnyContinue() //按任意键继续
{
	printf("按任意键继续...\n");
	getchar();
}

int StartInterface()//开始界面
{
	int s_id=0;
	char s_passw[max_password_length];
	int flag1 = 1;
	while (1) {
		if (flag1) {
			printf("---------------原神抽卡模拟系统-----------\n");
			printf("------------------------------------------\n");
			printf("-----------1.注册----------2.登录---------\n");
			printf("---------------------------0.退出---------\n");
			printf("------------------------------------------\n");
		}
		int choice = 0;
		int i = 0;
		int flag = 0;
		flag1 = 1;
		printf("夫君~~该做选择了:");
		scanf("%d", &choice);
		switch (choice)
		{
		case 1:
			while (1) {
				if (u[i].user_ID != 0) {
					i++;
				}
				else {
					break;
				}
			}
			u[i].user_ID = min_id + i;
			printf("-------------------------------------------------------------------------\n");
			printf("---------------------吾乃断罪之皇女,才...才不会告诉你~------------------\n");
			printf("-------------------------------你的ID是 %d 呢!-------------------------\n",u[i].user_ID);
			printf("-------------------------------------------------------------------------\n\n");
			printf("-------------------------------------------------------------------------\n");
			printf("----------------------------三二一,一二三,啊啊~——--------------------\n");
			printf("--------------------------小家伙,快告诉我你的密码:----------------------\n");
			printf("-------------------------------------------------------------------------\n");
			printf("密码:");
			scanf("%s", u[i].password);
			u[i].five_star_draw_num = 0;
			u[i].four_star_draw_num = 0;
			printf("-------------------------------------------------------------------------\n");
			printf("----------------------------------黑暗降临!------------------------------\n");
			printf("-------------------------------------------------------------------------\n");
			FreeBuffer();
			AnyContinue();
			ClearScreen();
			break;
		case 2:
			while (1) {
				printf("请输入您的ID:");
				scanf("%d", &s_id);
				if (s_id >= min_id && s_id <= max_id) {
					printf("请输入您的密码:");
					scanf("%s", &s_passw);
					if (strcmp(u[s_id - min_id].password, s_passw) == 0) {
						flag = 1;
						printf("------------------------------------------\n");
						printf("-----------------原神启动!----------------\n");
						printf("------------------------------------------\n");
						FreeBuffer();
						AnyContinue();
						ClearScreen();
					}
				}
				if (flag) {
					break;
				}
				else {
					printf("-----------------------------------\n");
					printf("----不对,不对,怎么想都不对嘛!----\n");
					printf("-----------------------------------\n");
				}
			}
			break;
		case 0:
			flag = 1;
			ClearScreen();
			printf("----------------------------------------------------------------\n");
			printf("-----------------求求你了,求求你了,再用一用嘛!----------------\n");
			printf("----------------------------------------------------------------\n");
			break;
		default:
			flag1 = 0;
			printf("Big 胆,竟敢乱输!\n");
			break;
		}
		if (flag) {
			break;
		}
	}
	return s_id - min_id;
}

void DrawMenu()//抽卡界面
{
	printf("---------------------------------------------\n");
	printf("-----------------还搁着抽卡呢!--------------\n");
	printf("---------------------------------------------\n");
	printf("-------1.单抽--------------2.十连抽----------\n");
	printf("-------3.抽卡记录----------4.用户退出--------\n");
	printf("---------------------------0.退出系统--------\n");
	printf("---------------------------------------------\n");
}

void draw(int index,int n)//抽卡
{
	srand(time(0));
	int num = 0;
	int flag = 1;
	int flag1 = 1;
	for (int i = 0; i < n; i++) {
		num = rand() % 100 + 1;
		if (u[index].five_star_draw_num < 72) {
			if (num == 1) {
				printf("五星 ");
				record_five_star[record_num] = u[index].five_star_draw_num;
				record_num++;
				u[index].five_star_draw_num = 0;
				u[index].four_star_draw_num++;
				flag = 0;
			}
			if (flag&&u[index].four_star_draw_num >= 9) {
				flag = 0;
				printf("四星 ");
				u[index].four_star_draw_num = 0;
				u[index].five_star_draw_num++;
			}else if (flag&&num >= 2 && num <= 6) {
				printf("四星 ");
				u[index].four_star_draw_num = 0;
				u[index].five_star_draw_num++;
			}else if(flag){
				printf("三星 ");
				u[index].four_star_draw_num++;
				u[index].five_star_draw_num++;
			}
			flag = 1;
		}
		else {
			if (num >= 1 && num <= u[index].five_star_draw_num-22) {
				printf("五星 ");
				record_five_star[record_num] = u[index].five_star_draw_num;
				record_num++;
				u[index].five_star_draw_num = 0;
				u[index].four_star_draw_num++;
			}
			if (flag1 && u[index].four_star_draw_num >= 9) {
				flag1 = 0;
				printf("四星 ");
				u[index].four_star_draw_num = 0;
				u[index].five_star_draw_num++;
			}
			else if (flag1 && num >= 2 && num <= 6) {
				printf("四星 ");
				u[index].four_star_draw_num = 0;
				u[index].five_star_draw_num++;
			}
			else if (flag1) {
				printf("三星 ");
				u[index].four_star_draw_num++;
				u[index].five_star_draw_num++;
			}
			flag1 = 1;
		}
	}
	printf("\n");
}

void show_draw_record() {
	printf("-------------------------------------------------------------------------\n");
	printf("--------------------------小家伙,告诉你一个秘密~------------------------\n");
	printf("------------------------你一共抽了 %d 抽,出了 %d 个五星------------------\n", draw_count_num,record_num);
	printf("-------------------------------------------------------------------------\n");
	printf("-----分别用了:");
	for (int i = 0; i < record_num; i++) {
		printf("%d ", record_five_star[i]);
		if (i == record_num - 1) {
			printf("抽!");
		}
	}
	printf("\n");
	printf("--------------------------小家伙,再接再厉哦~----------------------------\n");
}

int main()
{
	u[0].user_ID = min_id;
	strcpy(u[0].password, "123");
	u[0].five_star_draw_num = 0;
	u[0].four_star_draw_num = 0;
	int choice=0;
	int index = 0;//StartInterface()返回的用户下标
	int flag1 = 1;
	int flag2 = 1;
	do {
		if (flag1) {
			index = StartInterface();
		}
		flag1 = 1;
		if (index < 0) {
			break;
		}
		if (flag2) {
			DrawMenu();
		}
		flag2 = 1;
		printf("夫君~~该做选择了:");
		scanf("%d", &choice);
		switch(choice)
		{
		case 1:
			draw(index, 1);
			draw_count_num++;
			FreeBuffer();
			AnyContinue();
			ClearScreen();
			flag1 = 0;
			break;
		case 2:
			draw(index, 10);
			draw_count_num+=10;
			FreeBuffer();
			AnyContinue();
			ClearScreen();
			flag1 = 0;
			break;
		case 3:
			ClearScreen();
			show_draw_record();
			FreeBuffer();
			AnyContinue();
			ClearScreen();
			flag1 = 0;
			break;
		case 4:
			ClearScreen();
			printf("----------------------------------------------------------------\n");
			printf("---------------------哎嘿,又回到登录界面了!-------------------\n");
			printf("----------------------------------------------------------------\n");
			FreeBuffer();
			AnyContinue();
			ClearScreen();
			break;
		case 0:
			ClearScreen();
			printf("----------------------------------------------------------------\n");
			printf("-----------------求求你了,求求你了,再用一用嘛!----------------\n");
			printf("----------------------------------------------------------------\n");
			break;
		default:
			flag1 = 0;
			flag2 = 0;
			printf("Big 胆,竟敢乱输!\n");
			break;
		}
	} while (choice != 0);
}

没事写了一个原神抽卡模拟系统~~

是一款由中国游戏公司miHoYo开发的开放世界冒险游戏,其中包含一个元素主题的角色取系统,玩家可以通过包来获得新角色和武器。如果你想编写一个简单的模拟Python程序,你可以按照以下步骤来设计: 1. **定义变量**: - 设定次数、池概率和角色列表。 - 可能需要使用字典来存储每个池及其对应的稀有度和数量。 2. **创建函数**: - 使用随机数生成器(如`random.choices`)来模拟奖过程,根据池概率决定取结果。 3. **模拟过程**: - 在循环中调用函数,每次循环代表一次,直到达到预设的次数。 4. **结果展示**: - 显示取到的角色或物品,并可能记录稀有度和累积的好运值。 5. **可选功能**: - 可以添加可视化图表来展示数据,如直方图或柱状图。 - 可以让用户选择不同的池和次数。 以下是一个简化的代码示例: ```python import random # 假设池和稀有度数据 card_pools = { '普通': {'rare': 0.9, 'epic': 0.05, 'legendary': 0.05}, '五星': {'rare': 0.0, 'epic': 0.95, 'legendary': 0.05} } # 函数 def draw_card(pools): probabilities = [pool['epic'] + pool['legendary'] for _, pool in pools.items()] total = sum(probabilities) chance = random.random() * total cum_prob = 0 for key, prob in pools.items(): cum_prob += prob['epic'] + prob['legendary'] if chance <= cum_prob: return key # 用户次数和初始池 draw_count = 100 current_pool = '普通' for _ in range(draw_count): result = draw_card(card_pools[current_pool]) print(f"第 {draw_count} 次: {result}, 稀有度: {'普通': '白色', '五星': '金色'}") #
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值