C++抽卡模拟器

近日在学校无聊,写了个抽卡模拟器供大家娱乐。

代码实现以下功能:抽卡界面,抽卡判定、动画播放、存档。

1.抽卡界面及判定

技术有限,不可能做的和原神一样精致。代码如下(注:这不是完整代码,别复制错了)

printf("enter your name:");cin >> username;HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFO CursorInfo;GetConsoleCursorInfo(handle, &CursorInfo);CursorInfo.bVisible = false;SetConsoleCursorInfo(handle, &CursorInfo);printf("For each time : 0.6%% for gold and 6%% for purple\n");printf("P(gold) will increase After 73 times until 90 to 100%\n");printf("10 purples , as well as 1 gold, provides another chance\n");system("pause");char kk = _getch();if (kk == 'c')change();int r, waidegold = 0, ggold = 0, pple = 0;READ();srand(time(0));int n, m, i, j, gold = 0, pp = 0, big = 0, cnt = 0, total = 30;while (cnt < total) {system("cls");printf("Press 1.10\n");printf("You've rolled %d times rest:%d\n", cnt * 10, (total - cnt) * 10);printf("WAI:%d GOLD:%d PP:%d\n", waidegold, ggold, pple);++cnt;char k;bool chu = 0;k = _getch();Sleep(5);for (i = 1; i <= 10; ++i) {int r = random();++gold, ++pp;if (r <= p[gold] *MAXX ) {total++;//goldPlay(1);chu = 1;if ((rand() % 2  ) && !big) {//waibig = 1;string tmp = changzhu[rand() % 8];printf("%d times 恭喜你歪%s了\n", gold, tmp.c_str());DATA[++cnttt] = username;DATA[cnttt]  += ( gold / 10 + '0');DATA[cnttt] += (gold % 10 + '0' );DATA[cnttt] += "times : ";DATA[cnttt] += tmp;//printf("DATA[%d]= %s\n", cnttt, DATA[cnttt].c_str());Sleep(2000);system("pause");waidegold++;} else {big = 0;printf("%d times %s\n", gold, UP.c_str());DATA[++cnttt] = username;DATA[cnttt]  += ( gold / 10 + '0');DATA[cnttt] += (gold % 10 + '0' );DATA[cnttt] += "times : ";DATA[cnttt] += UP;//printf("DATA[%d]= %s\n", cnttt, DATA[cnttt].c_str());Sleep(2000);system("pause");ggold++;}gold = 0;}if (r >= MAXX * 0.94 || pp == 10) {//purpleif (!chu)Play(0);chu = 1;printf("%d times a purple\n", pp);system("pause");pp = 0;pple++;if (pple % 10 == 0)total++;}}}

2.存档

包括时间获取以及存储结果

获取时间:

struct Time {int year, month, day, hour, minute, second;
};Time gottime() {Time TIME;time_t now = time(0);tm *ltm = localtime(&now);TIME.year = 1900 + ltm->tm_year;TIME.month = 1 + ltm->tm_mon;TIME.day = ltm->tm_mday;TIME.hour = ltm->tm_hour;TIME.minute = ltm->tm_min;TIME.second = ltm->tm_sec;return TIME;
}

存储:

void read() {freopen("ouhuang.txt", "r", stdin);scanf("%d %d %d", &mxxwdgd, &mxxggd, &mxxple);fclose(stdin);
}
void putt(int waidegold, int ggold, int pple) {freopen("ouhuang.txt", "w", stdout);printf("%d %d %d", waidegold, ggold, pple);fclose(stdout);
}
void save(int waidegold, int ggold, int pple) {read();printf("RECORD: waide:%d not:%d ple:%d\n", mxxwdgd, mxxggd, mxxple);if (ggold > mxxggd) {printf("NEW RECORD!!!\n");putt(waidegold, ggold, pple);Sleep(3000);}}
string changzhu[8] ;
string UP;
void READ() {freopen("text.txt", "r", stdin);cin >> UP;for (int i = 0; i <= 7; i++)cin >> changzhu[i];fclose(stdin);
}
void change() {freopen("text.txt", "w", stdout);string st;cin >> st;cout << st << endl;for (int i = 1; i <= 8; i++) {cin >> st;cout << st << endl;}fclose(stdout);
}
void read1() {freopen("data.txt", "r", stdin);char tmp[500];while (~scanf("%s", &tmp)) {DATA[++cnttt] = tmp;}fclose(stdin);
}
void data1(string stt) {freopen("data.txt", "w", stdout);Time s = gottime();printf("\n%d/%d/%d,%d:%d:%d\n", s.year, s.month, s.day, s.hour, s.minute, s.second);printf("%s\n", username.c_str());for (int i = 1; i <= cnttt; i++) {if (DATA[i] == ":" || DATA[i + 1] == ":")printf("%s", DATA[i].c_str());elseprintf("%s\n", DATA[i].c_str());}fclose(stdin);fclose(stdout);
}

对了,由于不是很信任rand(),自己造了一个随机函数

int random() {int a[6], k = 0;for (int i = 0; i < 6; ++i)a[i] = rand() % 10;for (int i = 0; i < 6; ++i)k = k * 10 + a[i];return k;
}

3.动画播放

十分简陋。

void Play(bool ggg) {system("cls");if (ggg == 0) {setcolor(purple, white);} else {setcolor(black, yellow);}int i, j, k;for (i = 1; i <= 20; i++) {GoToxy(i, i + 20) ;printf("\\");Sleep(40);if (ggg == 1)Sleep(15);}i = 20, j = 50, k = 1;int r = 1;if (ggg == 1)for (; r <= 10; r += k, ++k) {GoToxy(i - r, i + 20 - r);for (int i1 = i - r; i1 <= i + r; ++i1)printf("_");for (int i1 = i - r + 1; i1 <= i + r - 1; ++i1) {GoToxy(i1, i + 20 - r);printf("|");GoToxy(i1, i + 20 + r);printf("|");}GoToxy(i + r, i + 20 - r);for (int i1 = i - r; i1 <= i + r; ++i1)printf("_");Sleep(55);}system("cls");setcolor(white, black);
}

就是这样,完整代码如下。使用教程

抽卡模拟器~_哔哩哔哩_bilibili

#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
using namespace std;
const int MAXX = 1e6;
string username;
string DATA[500000];
int cnttt = 0;struct Time {int year, month, day, hour, minute, second;
};Time gottime() {Time TIME;time_t now = time(0);tm *ltm = localtime(&now);TIME.year = 1900 + ltm->tm_year;TIME.month = 1 + ltm->tm_mon;TIME.day = ltm->tm_mday;TIME.hour = ltm->tm_hour;TIME.minute = ltm->tm_min;TIME.second = ltm->tm_sec;return TIME;
}enum Colour {black, blue, green, palegreen, red, purple, yellow, white, gray, light_blue, light_palegreen, light_red, light_purple, light_yellow, light_white}; //注:有些是词生造出来的,可能与实际不符,仅供参数使用,切勿实际使用,否则后果自负
const Colour Const[16] = {black, blue, green, palegreen, red, purple, yellow, white, gray, light_blue, light_palegreen, light_red, light_purple, light_yellow, light_white};
double p[90] = {};
void GoToxy(int y, int x) {COORD  coord;coord.X = x;coord.Y = y;HANDLE a = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(a, coord);
}void color(int x) {int typeface = x / 16, background = x % 16;char command_typeface[2], command_background[2];string command = "color ";string change = "0123456789abcdef";command = command + change[typeface] + change[background];char cmd[9];for (int i = 0; i < 9; i++)cmd[i] = command[i];system(cmd);
}
void setcolor(Colour x, Colour y) {int i, j;for (i = 0; i < 16; i++)if (x == Const[i])break;for (j = 0; j < 16; j++)if (y == Const[j])break;color(i + y * 16);
}
int random() {int a[6], k = 0;for (int i = 0; i < 6; ++i)a[i] = rand() % 10;for (int i = 0; i < 6; ++i)k = k * 10 + a[i];return k;
}
int mxxwdgd, mxxggd, mxxple;
void Play(bool ggg) {system("cls");if (ggg == 0) {setcolor(purple, white);} else {setcolor(black, yellow);}int i, j, k;for (i = 1; i <= 20; i++) {GoToxy(i, i + 20) ;printf("\\");Sleep(40);if (ggg == 1)Sleep(15);}i = 20, j = 50, k = 1;int r = 1;if (ggg == 1)for (; r <= 10; r += k, ++k) {GoToxy(i - r, i + 20 - r);for (int i1 = i - r; i1 <= i + r; ++i1)printf("_");for (int i1 = i - r + 1; i1 <= i + r - 1; ++i1) {GoToxy(i1, i + 20 - r);printf("|");GoToxy(i1, i + 20 + r);printf("|");}GoToxy(i + r, i + 20 - r);for (int i1 = i - r; i1 <= i + r; ++i1)printf("_");Sleep(55);}system("cls");setcolor(white, black);
}
void read() {freopen("ouhuang.txt", "r", stdin);scanf("%d %d %d", &mxxwdgd, &mxxggd, &mxxple);fclose(stdin);
}
void putt(int waidegold, int ggold, int pple) {freopen("ouhuang.txt", "w", stdout);printf("%d %d %d", waidegold, ggold, pple);fclose(stdout);
}
void save(int waidegold, int ggold, int pple) {read();printf("RECORD: waide:%d not:%d ple:%d\n", mxxwdgd, mxxggd, mxxple);if (ggold > mxxggd) {printf("NEW RECORD!!!\n");putt(waidegold, ggold, pple);Sleep(3000);}}
string changzhu[8] ;
string UP;
void READ() {freopen("text.txt", "r", stdin);cin >> UP;for (int i = 0; i <= 7; i++)cin >> changzhu[i];fclose(stdin);
}
void change() {freopen("text.txt", "w", stdout);string st;cin >> st;cout << st << endl;for (int i = 1; i <= 8; i++) {cin >> st;cout << st << endl;}fclose(stdout);
}
void read1() {freopen("data.txt", "r", stdin);char tmp[500];while (~scanf("%s", &tmp)) {DATA[++cnttt] = tmp;}fclose(stdin);
}
void data1(string stt) {freopen("data.txt", "w", stdout);Time s = gottime();printf("\n%d/%d/%d,%d:%d:%d\n", s.year, s.month, s.day, s.hour, s.minute, s.second);printf("%s\n", username.c_str());for (int i = 1; i <= cnttt; i++) {if (DATA[i] == ":" || DATA[i + 1] == ":")printf("%s", DATA[i].c_str());elseprintf("%s\n", DATA[i].c_str());}fclose(stdin);fclose(stdout);
}
int main() {for (int i = 1; i <= 72; ++i)p[i] = 0.006;p[73] = 0.01;p[74] = 0.05;p[75] = 0.21;p[76] = 0.3;p[77] = 0.33;p[78] = 0.36;p[79] = 0.40;p[80] = 0.5;p[81] = 0.6;p[82] = 0.7;p[83] = 0.8;p[84] = 0.82;p[85] = 0.9;p[86] = 0.95;p[87] = 0.989;p[88] = 0.999;p[89] = 0.999;p[90] = 1;printf("enter your name:");cin >> username;HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFO CursorInfo;GetConsoleCursorInfo(handle, &CursorInfo);CursorInfo.bVisible = false;SetConsoleCursorInfo(handle, &CursorInfo);printf("For each time : 0.6%% for gold and 6%% for purple\n");printf("P(gold) will increase After 73 times until 90 to 100%\n");printf("10 purples , as well as 1 gold, provides another chance\n");system("pause");char kk = _getch();if (kk == 'c')change();int r, waidegold = 0, ggold = 0, pple = 0;READ();srand(time(0));int n, m, i, j, gold = 0, pp = 0, big = 0, cnt = 0, total = 30;while (cnt < total) {system("cls");printf("Press 1.10\n");printf("You've rolled %d times rest:%d\n", cnt * 10, (total - cnt) * 10);printf("WAI:%d GOLD:%d PP:%d\n", waidegold, ggold, pple);++cnt;char k;bool chu = 0;k = _getch();Sleep(5);for (i = 1; i <= 10; ++i) {int r = random();++gold, ++pp;if (r <= p[gold] *MAXX ) {total++;//goldPlay(1);chu = 1;if ((rand() % 2  ) && !big) {//waibig = 1;string tmp = changzhu[rand() % 8];printf("%d times 恭喜你歪%s了\n", gold, tmp.c_str());DATA[++cnttt] = username;DATA[cnttt]  += ( gold / 10 + '0');DATA[cnttt] += (gold % 10 + '0' );DATA[cnttt] += "times : ";DATA[cnttt] += tmp;//printf("DATA[%d]= %s\n", cnttt, DATA[cnttt].c_str());Sleep(2000);system("pause");waidegold++;} else {big = 0;printf("%d times %s\n", gold, UP.c_str());DATA[++cnttt] = username;DATA[cnttt]  += ( gold / 10 + '0');DATA[cnttt] += (gold % 10 + '0' );DATA[cnttt] += "times : ";DATA[cnttt] += UP;//printf("DATA[%d]= %s\n", cnttt, DATA[cnttt].c_str());Sleep(2000);system("pause");ggold++;}gold = 0;}if (r >= MAXX * 0.94 || pp == 10) {//purpleif (!chu)Play(0);chu = 1;printf("%d times a purple\n", pp);system("pause");pp = 0;pple++;if (pple % 10 == 0)total++;}}}read1();save(waidegold, ggold, pple);data1("\n");return 0;
}

点个赞再走吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解相机的内参和外参,以及内外参的标定方法

1 四个坐标系 要想深入搞清楚相机的内参和外参含义&#xff0c; 首先得清楚以下4个坐标系的定义&#xff1a; 世界坐标系&#xff1a; 名字看着很唬人&#xff0c; 其实没什么大不了的&#xff0c; 这个就是你自己定义的某一个坐标系。 比如&#xff0c; 你把房间的某一个点定…

学透Spring Boot — 011. 一篇文章学会Spring Test

系列文章目录 这是学透Spring Boot的第11篇文章。更多系列文章请关注 CSDN postnull 用户的专栏 文章目录 系列文章目录Spring Test的依赖Spring Test的核心功能SpringBootTest 加载Spring上下文依赖注入有问题时Spring配置有问题时 WebMvcTest 测试Web层&#xff08;Controll…

Mysql 数据库编程技术01

一、数据库基础 1.1 认识数据库 为什么学习数据库 瞬时数据&#xff1a;比如内存中的数据&#xff0c;是不能永久保存的。持久化数据&#xff1a;比如持久化至数据库中或者文档中&#xff0c;能够长久保存。 数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长…

新一代AI架构实践:数字大脑AI+智能调度MCP+领域执行APP的黄金金字塔体系

新一代AI架构实践&#xff1a;数字大脑智能调度领域执行的黄金金字塔体系 一、架构本质的三层穿透性认知 1.1 核心范式转变&#xff08;CPS理论升级&#xff09; 传统算法架构&#xff1a;数据驱动 → 特征工程 → 模型训练 → 业务应用 新一代AI架构&#xff1a;物理规律建…

macOS可视化桌面配置docker加速器

macOS可视化桌面配置docker加速器 在镜像settings->docker Engine改为国内镜像修改为国内镜像重启docker(可视化界面启动或者使用命令行)使用命令重启可视化界面重启 在镜像settings->docker Engine改为国内镜像 修改为国内镜像 {"registry-mirrors": ["…

Nginx 基础使用(2025)

一、Nginx目录结构 [rootlocalhost ~]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp # POST 大文件暂存目录 ├── conf # Nginx所有配置文件的目录 │ ├── fastcgi.conf # fastcgi相…

用spring-webmvc包实现AI(Deepseek)事件流(SSE)推送

前后端&#xff1a; Spring Boot Angular spring-webmvc-5.2.2包 代码片段如下&#xff1a; 控制层&#xff1a; GetMapping(value "/realtime/page/ai/sse", produces MediaType.TEXT_EVENT_STREAM_VALUE)ApiOperation(value "获取告警记录进行AI分析…

基于Python的招聘推荐数据可视化分析系统

【Python】基于Python的招聘推荐数据可视化分析系统&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 &#x1f680;&#x1f31f; 基于Python的招聘推荐数据可视化分析系统&#xff01;&#x1…

使用注解开发springMVC

引言 在学习过第一个springMVC项目建造过后&#xff0c;让我们直接进入真实开发中所必需的注解开发&#xff0c; 是何等的简洁高效&#xff01;&#xff01; 注&#xff1a;由于Maven可能存在资源过滤的问题&#xff0c;在maven依赖中加入 <build><resources>&l…

linux专题3-----禁止SSH的密码登录

要在linux系统中禁止密码登录&#xff0c;您可以通过修改 SSH 配置来实现。请按照以下步骤操作(此处以 Ubuntu为例)&#xff1a; 1、SSH 登录到您的服务器&#xff08;或直接在命令行模式下&#xff09;。 2、备份 SSH 配置文件&#xff1a; 在终端中运行以下命令以备份现有的…

基于LangChain和通义(Tongyi)实现NL2SQL的智能检索(无需训练)

在数据驱动的时代,如何高效地从数据库中获取信息成为了一个重要的挑战。自然语言到SQL(NL2SQL)技术提供了一种便捷的解决方案,使用户能够用自然语言查询数据库,而无需深入了解SQL语法。本文将探讨如何利用LangChain和通义(Tongyi)实现NL2SQL的智能检索,具体步骤如下: …

深度学习处理文本(10)

保存自定义层 在编写自定义层时&#xff0c;一定要实现get_config()方法&#xff1a;这样我们可以利用config字典将该层重新实例化&#xff0c;这对保存和加载模型很有用。该方法返回一个Python字典&#xff0c;其中包含用于创建该层的构造函数的参数值。所有Keras层都可以被序…

机器视觉3D中激光偏镜的优点

机器视觉的3D应用中,激光偏镜(如偏振片、波片、偏振分束器等)通过其独特的偏振控制能力,显著提升了系统的测量精度、抗干扰能力和适应性。以下是其核心优点: 1. 提升3D成像精度 抑制环境光干扰:偏振片可滤除非偏振的环境杂光(如日光、室内照明),仅保留激光偏振信号,大…

线程同步的学习与应用

1.多线程并发 1).多线程并发引例 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <assert.h> #include <pthread.h>int wg0; void *fun(void *arg) {for(int i0;i<1000;i){wg;printf("wg%d\n",wg);} } i…

写.NET可以指定运行SUB MAIN吗?调用任意一个里面的类时,如何先执行某段初始化代码?

VB.NET 写.NET可以指定运行SUB MAIN吗?调用任意一个里面的类时,如何先执行某段初始化代码? 分享 1. 在 VB.NET 中指定运行 Sub Main 在 VB.NET 里&#xff0c;你能够指定 Sub Main 作为程序的入口点。下面为你介绍两种实现方式&#xff1a; 方式一&#xff1a;在项目属性…

【AI插件开发】Notepad++ AI插件开发实践(代码篇):从Dock窗口集成到功能菜单实现

一、引言 上篇文章已经在Notepad的插件开发中集成了选中即问AI的功能&#xff0c;这一篇文章将在此基础上进一步集成&#xff0c;支持AI对话窗口以及常见的代码功能菜单&#xff1a; 显示AI的Dock窗口&#xff0c;可以用自然语言向 AI 提问或要求执行任务选中代码后使用&…

关联容器-模板类pair数对

关联容器 关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。 关联容器支持高效的关键字查找和访问。 两个主要的关联容器(associative-container),set和map。 set 中每个元素只包…

京东运维面试题及参考答案

目录 OSPF 实现原理是什么? 请描述 TCP 三次握手的过程。 LVS 的原理是什么? 阐述 Nginx 七层负载均衡的原理。 Nginx 与 Apache 有什么区别? 如何查看监听在 8080 端口的是哪个进程(可举例:netstat -tnlp | grep 8080)? OSI 七层模型是什么,请写出各层的协议。 …

输入框输入数字且保持精度

在项目中如果涉及到金额等需要数字输入且保持精度的情况下&#xff0c;由于输入框是可以随意输入文本的&#xff0c;所以一般情况下可能需要监听输入框的change事件&#xff0c;然后通过正则表达式去替换掉不匹配的文本部分。 由于每次文本改变都会被监听&#xff0c;包括替换…

使用 requests 和 BeautifulSoup 解析淘宝商品

以下将详细解释如何通过这两个库来实现按关键字搜索并解析淘宝商品信息。 一、准备工作 1. 安装必要的库 在开始之前&#xff0c;确保已经安装了 requests 和 BeautifulSoup 库。如果尚未安装&#xff0c;可以通过以下命令进行安装&#xff1a; bash pip install requests…