【原创】烟花实现,基于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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGLM2-6B模型推理流程和模型架构详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1 ChatGLM是什么&#xff1f;2 一代GLM2.1 大模型架构2.2 GLM特点 2 二代GLM&#xff1a;ChatGLM2-6B为例拆解2.1 ChatGLM2-6B模型推理架构和流程2.2 细节详解第…

Linux network namespace 访问外网以及多命名空间通信(经典容器组网 veth pair + bridge 模式认知)

写在前面 整理K8s网络相关笔记博文内容涉及 Linux network namespace 访问外网方案 Demo实际上也就是 经典容器组网 veth pair bridge 模式理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼前的风景已…

笔记---dp---最长上升子序列模型

模型原始题目&#xff1a;AcWing.895.最长上升子序列 题目关系如下&#xff1a; 转化一 AcWing.1017.怪盗基德的滑翔翼 怪盗基德是一个充满传奇色彩的怪盗&#xff0c;专门以珠宝为目标的超级盗窃犯。 而他最为突出的地方&#xff0c;就是他每次都能逃脱中村警部的重重围堵…

mac无法往硬盘里存东西 Mac硬盘读不出来怎么办 Mac硬盘格式 硬盘检测工具

mac有时候会出现一些问题&#xff0c;比如无法往硬盘里存东西&#xff0c;或者无法往硬盘上拷贝文件。这些问题会给用户带来很大的困扰&#xff0c;影响正常的工作和学习。那么&#xff0c;mac无法往硬盘里存东西&#xff0c;mac无法往硬盘上拷贝怎么办呢&#xff1f;软妹子将为…

一、Docker/安装包部署ClickHouse

Docker/安装包部署ClickHouse 一、docker部署1.安装Docker2.拉取ClickHouse镜像2.1 选择拉取版本2.2 拉取镜像 3.启动ClickHouse3.1 确定好挂载目录3.2 测试环境3.3 生产环境3.1.1 获取配置文件3.1.2 配置文件中添加用户3.1.3 启动容器 4.使用DBeaver连接 二、安装包安装1.准备…

CTFshow web(php命令执行 55-59)

web55 <?php /* # -*- coding: utf-8 -*- # Author: Lazzaro # Date: 2020-09-05 20:49:30 # Last Modified by: h1xa # Last Modified time: 2020-09-07 20:03:51 # email: h1xactfer.com # link: https://ctfer.com */ // 你们在炫技吗&#xff1f; if(isset($_GET[…

春节过半,预定的计划还没有开始

春节前就立下雄心勃勃的计划&#xff0c;想利春节假期开始搭一个人脸通WEB管理软件。但眼看春节过半&#xff0c;自己还没有开始动手呦。哎&#xff0c;突然紧张起来了。初二初三身体都不太舒服&#xff0c;不知道是怎么回事就感冒了&#xff0c;今晚更是高烧39.5&#xff0c;感…

随机过程及应用学习笔记(一)概率论(概要)

概率是随机的基础&#xff0c;在【概率论&#xff08;概要&#xff09;】这个部分中仅记录学习随机过程及应用的基本定义和结果。 前言 首先&#xff0c;概率论研究的基础是概率空间。概率空间由一个样本空间和一个概率测度组成&#xff0c;样本空间包含了所有可能的结果&…

Pandas教程12:常用的pd.set_option方法,显示所有行和列+不换行显示等等...

---------------pandas数据分析集合--------------- Python教程71&#xff1a;学习Pandas中一维数组Series Python教程74&#xff1a;Pandas中DataFrame数据创建方法及缺失值与重复值处理 Pandas数据化分析&#xff0c;DataFrame行列索引数据的选取&#xff0c;增加&#xff0c…

Centos9部署LAMP

配置LAMP 参考文档 https://blog.csdn.net/weixin_51432789/article/details/112254685 首先安装 yum install -y libxml2-devel 安装apr-1.7.4 解压 tar xf apr-1.7.4.tar.gz 安装以来 yum -y install gcc cd apr-1.7.4/ 预编译 ./configure --prefix/usr/local/…

首次安装Mysql数据库

1、在mysql官网下载自己需要的版本 2、选择安装类型 3、 检查一下需求版本 4、 这里可能会弹出如下信息&#xff0c;先不用管这一步&#xff0c;点击Yes继续即可 5、 安装需要的环境&#xff0c;点击执行就可以&#xff0c;此过程会比较慢 如下就是全面安装完成了&#xff0c;点…

【原创 附源码】Flutter安卓及iOS海外登录--Apple登录最详细流程

最近接触了几个海外登录的平台&#xff0c;踩了很多坑&#xff0c;也总结了很多东西&#xff0c;决定记录下来给路过的兄弟坐个参考&#xff0c;也留着以后留着回顾。更新时间为2024年2月12日&#xff0c;后续集成方式可能会有变动&#xff0c;所以目前的集成流程仅供参考&…

Google Cloud 2024 年报告重点介绍了关键的网络威胁和防御

Google Cloud 的 2024 年威胁范围报告预测了云安全的主要风险&#xff0c;并提出了加强防御的策略。 该报告由 Google 安全专家撰写&#xff0c;为寻求预测和应对不断变化的网络安全威胁的云客户提供了宝贵的资源。 该报告强调&#xff0c;凭证滥用、加密货币挖矿、勒索软件和…

HTML 超文本标记语言

超文本标记语言 HTML 在一个客户程序主窗口上显示出的万维网文档称为页面 (page)。 页面制作的标准语言&#xff1a;HTML。 超文本标记语言 HTML (HyperText Markup Language) 是一种制作万维网页面的标准语言&#xff0c;它消除了不同计算机之间信息交流的障碍&#xff0c…

2024-02-08 Unity 编辑器开发之编辑器拓展1 —— 自定义菜单栏

文章目录 1 特殊文件夹 Editor2 在 Unity 菜单栏中添加自定义页签3 在 Hierarchy 窗口中添加自定义页签4 在 Project 窗口中添加自定义页签5 在菜单栏的 Component 菜单添加脚本6 在 Inspector 为脚本右键添加菜单7 加入快捷键8 小结 1 特殊文件夹 Editor ​ Editor 文件夹是 …

例38:使用Frame(分组框)

建立一个EXE工程&#xff0c;在窗体上放两个Frame框。分别放两组单选按钮表示性别和收入&#xff0c;注意每组单选按钮的组名要一样。在按钮中输入代码&#xff1a; Sub Form1_Command1_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd)If Frame1.Visible ThenFrame1.Visib…

3D高斯溅射:面向三维场景的实时渲染技术

1. 前言 高斯溅射技术【1】一经推出&#xff0c;立刻引起学术界和工业界的广泛关注。相比传统的隐式神经散射场渲染技术&#xff0c;高斯溅射依托椭球空间&#xff0c;显性地表示多目图像的三维空间关系&#xff0c;其计算效率和综合性能均有较大的提升&#xff0c;且更容易理…

LocalAI 部署(主要针对 mac m2 启动)

LocalAI 部署 介绍 LocalAI 是免费的开源 OpenAI 替代方案。 LocalAI 充当 REST API 的直接替代品&#xff0c;与本地推理的 OpenAI API 规范兼容。 它无需 GPU&#xff0c;还有多种用途集成&#xff0c;允许您使用消费级硬件在本地或本地运行 LLM、生成图像、音频等等&#…

字串变换(AcWing, NOIP2002提高组)

题目描述: 题目链接: https://www.acwing.com/problem/content/192/ 思路: 这个题是要求“最小步数”&#xff0c;比较容易想到是用BFS来进行搜索&#xff0c;但是直接BFS的话状态数太多了&#xff0c;时间复杂度会到:,其中L是字符串的长度,N是一个字符串的可能变换到的后继…

X图形

1.题目 这道题是蓝桥云课上面的一道题目&#xff0c;它是2022年蓝桥杯省模拟题&#xff0c;题目难度为简单。 考察的知识点为递归。 题目链接&#xff1a;X图形 2.思路 如何理解题意&#xff1f; 蓝桥杯的题目和Leetcode题目最大的不同点在于&#xff0c;蓝桥杯的题目大部…