#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);
}
没事写了一个原神抽卡模拟系统~~