#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <Windows.h>
#include "unistd.h"
///注意,该项目规定输出区域为第三行以后(不包括第三行),前两行用于常驻简介与目前大保底的抽数
#define TimeInterval 25 //预定的动画时间间隔
#define ChangeColor_Purple printf("\033[35m")//将颜色换成紫色
#define ChangeColor_Green_ printf("\033[32m")//将颜色换成绿色
#define ChangeColor_Red___ printf("\033[31m")//将颜色换成红色
#define ChangeColor_Yellow printf("\033[33m")//将颜色换成黄色
#define ChangeColor_Whilt_ printf("\033[0m") //将颜色换成白色
#define ChangeColor_Blue__ printf("\033[36m")//将颜色换成蓝色
#define MoveTheLocation printf("\033[%d;%dH",4,0)//移动光标保证输出位置一样
#define MoveToChangeTheNumber printf("\033[%d;%dH",2,NumberOutput_X)//移动光标保证输出位置一样
#define HideCursor printf("\033[?25l")//隐藏光标
#define ShowCursor printf("\033[?25h")//隐藏光标
int Number_Big = 0;//分别记录目前大保底抽了多少抽,90就是小保底,180是大保底
int N_History = 0;//记录总共可查询的历史记录数量(不一定等于Number_Big)
char UPer_5_Stars[25] = "Furina"; //五星Up角色的名称,此处为芙宁娜
char FiveStars[7][25] = {"Tighnari", "Dehya", "Keqing", "Mona", "Qiqi", "Diluc", "Jean"};
//分别对应提纳里、迪希雅、刻晴、莫娜、七七、迪卢克、琴
int NumberOutput_X;
char History[500][100];//最多可查询500条历史记录
struct InformationForTenPrayer {//用于储存十连抽的数据,便于排序显示
int StarNumber;
char Name[25];
};
void CleanTheScreen(void);
void InputTheOperate();
void Welcome();
void Prayer(char Oper);
void Output(int n, int Cod[10]);
void EditTheSmokedNumber();
void EditShowedSmokedNumber();
void SearchTheHistory();
void History_CleanThePanel();
int main(void)
{
NumberOutput_X = 1 + strlen(UPer_5_Stars) + 16 + 16 + 14;
Welcome();//输出欢迎页面与顶部栏
char CharToContinue;
do {
InputTheOperate();
ChangeColor_Purple; printf("\n>");
ChangeColor_Green_; printf("Operation completed.Press [Enter] to continue...");//提示用户操作完毕
ChangeColor_Whilt_;
CharToContinue = getchar();
do { CharToContinue = getchar(); } while (CharToContinue != '\n');//持续读取直到输入回车
} while (1);
return 0;
}
void InputTheOperate()
{//用于简单介绍如何操作并要求用户输入操作
///总共A、B、C、D三种操作,分别对应单抽、十连抽、查看历史记录、修改已垫抽数量
CleanTheScreen();
ChangeColor_Whilt_; Sleep(25); printf("\n");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ Please input the Operate you want: ┃\n");
printf("┃ A.Prayer B.Prayer * 10 ┃\n");
printf("┃ C.History D.Edit Smoked Number ┃\n");
printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
printf("┃ Personal blog homepage:\033[36msherrychou.blog.csdn.net \033[0m┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
ChangeColor_Purple; printf(">");
ChangeColor_Green_; printf("Please input A,B,C or D:");
ChangeColor_Whilt_;
char Operate = ' ';//储存用户需要进行的操作
do {
scanf("%c", &Operate);
if (!(Operate == 'A' || Operate == 'B' || Operate == 'C' || Operate == 'D'))
{
HideCursor; printf("\033[%d;%dH", 12, 26);
ChangeColor_Whilt_; printf(" ");
ShowCursor; printf("\033[%d;%dH", 12, 26);
}
} while (!(Operate == 'A' || Operate == 'B' || Operate == 'C' || Operate == 'D'));
//持续读取直到输入A或B或C或D
switch (Operate)
{
case 'A'://单抽
case 'B'://十连抽
Prayer(Operate);//并列
break;
case 'C'://查看历史记录
SearchTheHistory();
break;
case 'D'://修改垫抽次数
EditTheSmokedNumber();
break;
}
return;
}
void Prayer(char Oper)
{//进行祈愿并输出的函数
srand((unsigned int)time(NULL));
switch (Oper)
{
case 'A'://进行单抽
{
Number_Big++;
N_History++;
int CodeNumber = rand() % 10000 + 1;
/*对获得物品进行分段
*1-60为5星角色(0.6%)
*61-315为4星角色(2.55%)
*316-570为4星物品(2.55%)
*剩下的全是3星
*/
int Temp_1[1];
if (Number_Big % 10 != 0)//没有保底的情况
{
if (CodeNumber >= 1 && CodeNumber <= 60)
{
Temp_1[0] = rand() % 2;//50%概率为up角色
if (Temp_1[0] == 0) Number_Big = 0;//如果抽中了UP那么大保底累计抽数归零
}
else if (CodeNumber >= 61 && CodeNumber <= 315)
Temp_1[0] = 2;//四星角色
else if (CodeNumber >= 316 && CodeNumber <= 570)
Temp_1[0] = 3;//四星物品
else Temp_1[0] = 4;//三星
}
else {
switch (Number_Big)
{
case 90://小保底
{
Temp_1[0] = rand() % 2;//50%概率为up角色
if (Temp_1[0] == 0) Number_Big = 0;//如果抽中了UP那么大保底累计抽数归零
break;
}
case 180://大保底
Temp_1[0] = Number_Big = 0;
break;
default://剩下的就是四星保底
Temp_1[0] = rand() % 2 + 2;//50%概率为四星角色,得到2或3
break;
}
}
EditShowedSmokedNumber();
Output(1, Temp_1);
break;
}
case 'B'://进行十连抽
{
N_History += 10;
int Temp_1[10];
for (int i = 0; i < 10; i++)
{
Number_Big ++;
int CodeNumber = rand() % 10000 + 1;
if (Number_Big % 10 != 0)//没有保底的情况
{
if (CodeNumber >= 1 && CodeNumber <= 60)
{
Temp_1[i] = rand() % 2;//50%概率为up角色
if (Temp_1[i] == 0) Number_Big = 0;//如果抽中了UP那么大保底累计抽数归零
}
else if (CodeNumber >= 61 && CodeNumber <= 315)
Temp_1[i] = 2;//四星角色
else if (CodeNumber >= 316 && CodeNumber <= 570)
Temp_1[i] = 3;//四星物品
else Temp_1[i] = 4;//三星
}
else {
switch (Number_Big)
{
case 90://小保底
{
Temp_1[i] = rand() % 2;//50%概率为up角色
if (Temp_1[i] == 0) Number_Big = 0;//如果抽中了UP那么大保底累计抽数归零
break;
}
case 180://大保底
Temp_1[i] = Number_Big = 0;
break;
default://剩下的就是四星保底
Temp_1[i] = rand() % 2 + 2;//50%概率为四星角色,得到2或3
break;
}
}
}
EditShowedSmokedNumber();
Output(10, Temp_1);
break;
}
}
return;
}
void Output(int n, int Cod[10])
{//输出动画与结果的函数
///n为祈愿次数,cod[]储存的是抽中的编号,0为五星UP角色,1为五星常驻角色,2为四星角色,3为四星物品,4为三星
CleanTheScreen();
HideCursor;
printf("\n");
switch (n)
{
case 1://单抽
switch (Cod[0])
{
case 0:
ChangeColor_Yellow;
for (int i = 1; i <= 5; i++)
{
printf("*");
Sleep(200);
}
printf("\t:%s\n", UPer_5_Stars);
//接下来写历史记录
for (int i = N_History - 1; i > 0; i--)
strcpy(History[i], History[i - 1]);//把历史记录往后推
sprintf(History[0], "\033[33m*****\t%s", UPer_5_Stars);
ChangeColor_Whilt_;
break;
case 1:
ChangeColor_Yellow;
for (int i = 1; i <= 5; i++)
{
printf("*");
Sleep(200);
}
srand((unsigned int)time(NULL));
int FiveSt
没有合适的资源?快使用搜索试试~ 我知道了~
C语言:原神角色UP池祈愿模拟器
共25个文件
tlog:6个
ipch:3个
pdb:2个
需积分: 0 5 下载量 129 浏览量
2023-12-01
15:40:11
上传
评论
收藏 27.36MB ZIP 举报
温馨提示
看到原神BWiki里有抽卡模拟器,便自己根据游戏内的描述用C语言编写了一个简单的模拟器,供参考使用。 作者注: 普通C语言编程是没有图形化界面的,只看见原神两个字就点进来的请不要随便喷。 因为三星、四星物品实在过多,对于这两种星级,程序只分4星角色、4星物品、3星这三类,不具体到名称,不然会导致程序代码大大增长且无实际意义。
资源推荐
资源详情
资源评论
收起资源包目录
原神-UP角色池抽卡模拟.zip (25个子文件)
原神-UP角色池抽卡模拟
原神-UP角色池抽卡模拟
原神-UP角色池抽卡模拟.vcxproj.user 165B
unistd.h 83B
原神-UP角色池抽卡模拟.vcxproj 8KB
原神-UP角色池抽卡模拟.c 19KB
原神-UP角色池抽卡模拟.vcxproj.filters 1KB
Debug
vc141.pdb 100KB
vc141.idb 251KB
原神-UP角色池抽卡模拟.tlog
CL.write.1.tlog 552B
原神-UP角色池抽卡模拟.lastbuildstate 230B
CL.command.1.tlog 790B
link.command.1.tlog 1KB
link.read.1.tlog 2KB
link.write.1.tlog 518B
CL.read.1.tlog 20KB
原神-UP角色池抽卡模拟.log 180B
原神-UP角色池抽卡模拟.obj 66KB
原神-UP角色池抽卡模拟.sln 1KB
.vs
原神-UP角色池抽卡模拟
v15
Browse.VC.db 32.05MB
.suo 30KB
ipch
AutoPCH
6a100108ddbe2a08
原神-UP角色池抽卡模拟.ipch 29.19MB
879391d38c7e34a5
UNISTD.ipch 2.25MB
67b246105630f888
原神-UP角色池抽卡模拟.ipch 39.69MB
Debug
原神-UP角色池抽卡模拟.ilk 441KB
原神-UP角色池抽卡模拟.pdb 620KB
原神-UP角色池抽卡模拟.exe 52KB
共 25 条
- 1
资源评论
青が絶える(青绝悲)
- 粉丝: 611
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功