【原创】烟花实现,基于windows操作系统

前言:

烟花的实现是我自己独立实现的第一个项目。那时离除夕只剩几天,我刚学完贪吃蛇。其实个人也很喜欢烟花。所以想送给朋友一份礼物。于是觉得可以一试。构思了一会后,就直接进行了。

成品:

思路:

1.vs2022很多特殊字符都打印不了。我首先把c语言本地化,然后复制了许多特殊字符,尝试它们在控制台能打印出来的结果,把能够打印出来的筛选字符都列出来。这样在烟花制作的过程中也许会用上。

2.烟花的画面是这样的。

下面是花筒,上面是烟花在上升时的花束和升到制高点时绽放的花体。

3.烟花如何实现

花筒直接用宽字符打印出来就可以,烟花的花束需要设置一个结构体,和贪吃蛇的蛇身一样(贪吃蛇的实现见上篇文章),只不过是单向向上移动,而且移动的速度要快许多。(睡眠的时间少很多)

烟花的花体也是一个结构体。这个结构体的构成也是一个个结点。你构建的结点个数,取决于一次绽放闪烁的火花有多少个。我尝试了一下,在9-15是最合适的,选择了12个结点。这些结点的坐标都用随机数设置。限制在上图的方体区域中。绽放一次睡眠一次。一个花筒得闪个四五次吧,在外面套上一层循环就可以了。

但是闪烁之后要消失,这个怎么处理?

借助贪吃蛇的删尾的思路,在原坐标处打印两个空格字符就可以覆盖掉。所以花体绽放之后还要写个循环来清理这些花体。

再来说花束的移动,花束升到至高点(指定坐标)后,再清理掉花束。

以上就可以完成简单的烟花播放了。(虽然是长方形的烟花)

如果要循环播放,就要在外面套个循环体。把烟花的初始化放在循环体外面。

4.代码附上

firework.h

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)
#pragma once#include <stdio.h>
#include <locale.h>
#include <windows.h>
#include <stdbool.h>
#include <stdlib.h>#define FIRE L'●'
#define ITEM L'█'
#define FLOWER L'﹡'typedef struct firenode
{int x;int y;struct firenode* next;
}firenode,*pfirenode;typedef struct firework
{pfirenode pf;
}firework,*pfirework;void SetPos(int x, int y);
void Initfirework(pfirework ps);void GameStart(pfirework ps,pfirework pflower);void GameRun(pfirework ps,pfirework pflower);

firework.c

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)
#include "firework.h"void SetPos(int x, int y)
{HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos = { x,y };SetConsoleCursorPosition(handle, pos);
}void Initfirework(pfirework ps)
{for (int i = 0; i < 3; i++){pfirenode node = (pfirenode)malloc(sizeof(firenode));if (node == NULL){perror("Initfirework::(malloc)");return;}if (ps->pf == NULL){node->x = 59;node->y = 31;node->next = NULL;ps->pf = node;}else{node->x = ps->pf->x;node->y = ps->pf->y - 1;node->next = ps->pf;ps->pf = node;}}}void Initfireflower(pfirework pflower)
{for (int i = 0; i < 12; i++){pfirenode node = (pfirenode)malloc(sizeof(firenode));if (node == NULL){perror("Initfirework::(malloc)");return;}pfirenode flower = pflower->pf;if (flower == NULL){node->x = 30;node->y = 30;node->next = NULL;pflower->pf = node;}else{node->x = flower->x;node->y = flower->y - 1;node->next = flower;pflower->pf = node;}}}
void WelcomeInfo()
{SetPos(52, 15);printf("请查收你的礼物.");SetPos(60, 17);printf("制作者:真白");}
void GameStart(pfirework ps,pfirework pflower)
{//修改控制台大小和隐藏光标system("mode con cols=120 lines=40");system("title 礼物");HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFO console;GetConsoleCursorInfo(handle, &console);console.bVisible = false;SetConsoleCursorInfo(handle, &console);WelcomeInfo();SetPos(100, 36);system("pause");system("cls");Initfirework(ps);Initfirework(pflower);
}void CreatFire(pfirework ps)
{//打印烟花pfirenode cur = ps->pf;while (cur){SetPos(cur->x,cur->y);wprintf(L"%lc", FIRE);cur = cur->next;}
}void FireMove(pfirework ps, pfirenode pnext)
{pnext->next = ps->pf;ps->pf = pnext;//尾删pfirenode cur = ps->pf;while (cur->next->next){SetPos(cur->x, cur->y);wprintf(L"%lc", FIRE);cur = cur->next;}SetPos(cur->next->x, cur->next->y);printf("  ");free(cur->next);cur->next = NULL;}void CreatNextnode(pfirework ps)
{pfirenode cur = (pfirenode)malloc(sizeof(firenode));if (cur == NULL){perror("CreatNextnode::malloc()");return;}//设置下一个结点的坐标pfirenode pnext = cur;pnext->x = ps->pf->x;pnext->y = ps->pf->y - 1;pnext->next = NULL;Sleep(50);FireMove(ps,pnext);
}void FireFlower(pfirework pflower)
{Initfireflower(pflower);pfirenode cur = pflower->pf;while (cur){cur->x = rand() % 20 + 50;cur->y = rand() % 12 + 2;cur = cur->next;}cur = pflower->pf;while (cur->next){SetPos(cur->x, cur->y);wprintf(L"%lc", FLOWER);cur = cur->next;}Sleep(200);cur = pflower->pf;while (cur->next){SetPos(cur->x, cur->y);printf("  ");cur = cur->next;}
}

test.c

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)
#include "firework.h"void test()
{firework fw = { 0 };firework Flower = { 0 };GameStart(&fw,&Flower);GameRun(&fw,&Flower);}
int main()
{setlocale(LC_ALL, "");test();return 0;
}

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

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

相关文章

利用Windows10漏洞破解密码(保姆级教学)

前言: 本篇博客只是技术分享并非非法传播知识,实验内容均是在虚拟机中进行,并非真实环境 正文: 一.windows10电脑密码破解 1)开启windows10虚拟机,停留在这个页面 2&#xff09;按5次Shift键,出现这个粘滞键,如果没有出现的,则说明漏洞已经修复 3)重新启动,在这个页面的时候…

VTK 三维场景的基本要素(相机) vtkCamera 相机的运动

相机的运动 当物体在处于静止位置时&#xff0c;相机可以在物体周围移动&#xff0c;摄取不同角度的图像 移动 移动分为相机的移动&#xff0c;和相机焦点的移动&#xff1b;移动改变了相机相对焦点的位置&#xff0c;离焦点更近或者更远&#xff1b;这样就会改变被渲染的物体…

Java实现陕西非物质文化遗产网站 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与过程2.3.1 系统设计2.3.2 查阅文献2.3.3 网站分析2.3.4 网站设计2.3.5 网站实现2.3.6 系统测试与效果分析 三、系统展示四、核心代码4.1 查询民间文学4.2 查询传统音乐4.3 增改传统舞…

前端滚动组件分享

分享一个前端可视化常用的卡片列表滚动组件&#xff0c;常用于可视化项目左右两侧的卡片列表的滚动。效果如下图所示&#xff1a; 组件描述 当鼠标移入滚动区域时&#xff0c;滚动行为停止当鼠标再次离开时&#xff0c;滚动继续 源码展示 <template><div ref"…

mac电脑如何批量删除文档软件?

在现代职场中&#xff0c;电脑成为了我们工作的延伸。但当职场生涯迎来转折点&#xff0c;比如离职时&#xff0c;我们往往需要把公司的设备——比如Mac电脑&#xff0c;清理干净再交还。这就涉及到一个问题&#xff1a;mac 删除软件如何高效、彻底地完成&#xff1f;这不仅是尊…

以谷歌浏览器为例 讲述 JavaScript 断点调试操作用法

今天来说个比较实用的东西 用浏览器开发者工具 对 javaScript代码进行调试 我们先创建一个index.html 编写代码如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content&…

书生谱语-大语言模型测试demo

课程内容简介 通用环境配置 开发机 InterStudio pip 换源 临时使用镜像源安装&#xff0c;如下所示&#xff1a;some-package 为你需要安装的包名 pip install -i https://mirrors.cernet.edu.cn/pypi/web/simple some-package设置pip默认镜像源&#xff0c;升级 pip 到最新…

[Python进阶] 识别验证码

11.3 识别验证码 我们再开发某些项目的时候&#xff0c;如果遇到要登录某些网页&#xff0c;那么会经常遇到输入验证码的情况&#xff0c;而每次人工输入验证码的话&#xff0c;比较浪费时间。于是&#xff0c;可以通过调用某些接口进行识别。 11.3.1 调用百度文字识别接口 …

【开源】SpringBoot框架开发木马文件检测系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 木马分类模块2.3 木马软件模块2.4 安全资讯模块2.5 脆弱点模块2.6 软件检测模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 木马分类表3.2.2 木马软件表3.2.3 资讯表3.2.4 脆弱点表3.2.5 软件检测表…

一、Docker部署MySQL

Docker部署MySQL 一、安装Docker二、拉取MySQL镜像1.选择拉取版本2.拉取镜像 三、启动MySQL1.确定好挂载目录2.启动3.查看是否启动4.开启远程访问权限 一、安装Docker 安装教程&#xff1a;https://qingsi.blog.csdn.net/article/details/131270071 二、拉取MySQL镜像 1.选择…

探索Redis特殊数据结构:Geospatial(地理位置)在实际中的应用

一、概述 Redis官方提供了多种数据类型&#xff0c;除了常见的String、Hash、List、Set、zSet之外&#xff0c;还包括Stream、Geospatial、Bitmaps、Bitfields、Probabilistic&#xff08;HyperLogLog、Bloom filter、Cuckoo filter、t-digest、Top-K、Count-min sketch、Confi…

【Java程序设计】【C00260】基于Springboot的企业客户信息反馈平台(有论文)

基于Springboot的企业客户信息反馈平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的企业客户信息反馈平台 本系统分为平台功能模块、管理员功能模块以及客户功能模块。 平台功能模块&#xff1a;在平台首页可…