Heim  >  Artikel  >  Backend-Entwicklung  >  Wie schreibe ich dynamische Feuerwerke in C-Sprache?

Wie schreibe ich dynamische Feuerwerke in C-Sprache?

coldplay.xixi
coldplay.xixiOriginal
2020-10-30 09:55:5930917Durchsuche

So schreiben Sie dynamische Feuerwerkskörper in der Sprache C: Zeichnen Sie zuerst die Menüoberfläche, um den Text anzuzeigen, und legen Sie dann die Anstiegsstufe und die Explosionsstufe des Feuerwerks fest. Definieren Sie schließlich die Daten und laden Sie die Ressourcenkarte. und zufällig eine Zufallszahl starten.

Wie schreibe ich dynamische Feuerwerke in C-Sprache?

So schreiben Sie dynamische Feuerwerke in C-Sprache:

Effektanzeige

Wie schreibe ich dynamische Feuerwerke in C-Sprache?
Dynamisches Diagramm
Wie schreibe ich dynamische Feuerwerke in C-Sprache?

Gesamtrahmen

/*****************************************
*            项目名称:浪漫烟花
*            项目描述:贴图
*            项目环境:vs2019
*            生成日期:2020-9-7
*            作者所属:追梦
*****************************************/#include<graphics.h>#include<stdio.h>#include<stdlib.h>#include<windows.h>#define NUM 10			//烟花弹个数,烟花//烟花弹struct jet{
	int x, y;			//烟花弹坐标
	int hx, hy;			//烟花弹最高点坐标
	bool shoot;			//烟花弹是否处于发射状态
	DWORD t1, t2, dt;	//发射时间  引爆时间  间隔时间
	IMAGE img[2];		//2张图片 一明一暗 01下标
	byte n : 1;			//C结构体 位段	//n 变量 1个位	0,1 n++ 0,1,0,1}jet[NUM];				//烟花弹个数//烟花struct Fire{
	int x, y;				//烟花的坐标
	int r;					//烟花的半径
	int max_r;				//烟花的最大半径
	int cen_x, cen_y;		//中心距左上角的距离
	int width, height;		//长宽
	int xy[240][240];		//重要,像素,矩阵
	bool draw;				//画出
	bool show;				//显示
	DWORD t1, t2, dt;		//发射时间  引爆时间  间隔时间}fire[NUM];//初始化函数void FireInit(){}//加载资源void Load(){}//选择烟花弹void ChoiceJet(){}//判断发射void Shoot(){}//显示烟花void ShowFire(){}//菜单界面void welcome(){}//主函数int main(){
	//初始界面(1000,600)
	initgraph(1000, 600);
	welcome();
	Load();
	while (1)
	{
		ChoiceJet();
		Shoot();
		ShowFire();
	}
	system("pause");
	return 0;}</windows.h></stdlib.h></stdio.h></graphics.h>

Logische Beziehung

Zeichnen Sie zunächst den Anzeigetext der Menüoberfläche. Feuerwerkskörper haben eine Steigstufe und eine Explosionsstufe, die den Aufbau von Feuerwerkskörpern und Feuerwerksbomben definieren.
Feuerwerk: Koordinatenposition, Explosionsradius, maximaler Radius, Abstand von der Mitte zur oberen linken Ecke, Länge und Breite, Pixel, Zeit usw.
Feuerwerk: Koordinatenposition, höchster Punkt, ob abgefeuert werden soll, Zeit, Anzahl usw.
Daten initialisieren. Laden Sie Ressourcenkarten. Die Anzahl der zufälligen Starts ist zufällig,

Quellcode

/*****************************************
*            项目名称: 浪漫烟花
*            项目描述:贴图
*            项目环境:vs2019
*            生成日期:2020-9-7
*            作者所属:追梦
*****************************************/#include<graphics.h>#include<time.h>#include<stdlib.h>#include<math.h>#include<windows.h>#pragma comment(lib,"winmm.lib")#define NUM 10			//烟花弹个数,烟花#define PI 3.1415925//烟花弹struct jet{
	int x, y;			//烟花弹坐标
	int hx, hy;			//烟花弹最高点坐标
	bool shoot;			//烟花弹是否处于发射状态
	DWORD t1, t2, dt;	//发射时间  引爆时间  间隔时间
	IMAGE img[2];		//2张图片 一明一暗 01下标
	byte n : 1;			//C结构体 位段	//n 变量 1个位	0,1 n++ 0,1,0,1}jet[NUM];				//烟花弹个数//烟花struct Fire{
	int x, y;				//烟花的坐标
	int r;					//烟花的半径
	int max_r;				//烟花的最大半径
	int cen_x, cen_y;		//中心距左上角的距离
	int width, height;		//长宽
	int xy[240][240];		//重要,像素,矩阵
	bool draw;				//画出
	bool show;				//显示
	DWORD t1, t2, dt;		//发射时间  引爆时间  间隔时间}fire[NUM];</windows.h></math.h></stdlib.h></time.h></graphics.h>

Initialisierungsfunktion

void FireInit(int i){
	//初始化烟花弹
	jet[i].t1 = GetTickCount();	//GetTickCount()返回从操作系统启动到当前所经过的毫秒数。使用前包含windows.h。
	jet[i].shoot = false;		//未发射
	jet[i].dt = 10;				//上升时间
	jet[i].n = 0;				//初始化烟花
	fire[i].show = false;		//未引爆
	fire[i].r = 0;
	fire[i].dt = 5;				//上升时间
	fire[i].t1 = GetTickCount();
	fire[i].max_r = rand() % 50 + 100;	//100-149
	fire[i].cen_x = rand() % 30 + 80;	//中心距左上角的距离
	fire[i].cen_y = rand() % 30 + 80;	//
	fire[i].width = 240;				//宽
	fire[i].height = 240;				//长}

Laden

void Load(){
	//加载烟花弹
	IMAGE jetimg;
	loadimage(&jetimg, L"./fire/shoot.jpg", 200, 50);
	SetWorkingImage(&jetimg);
	for (int i = 0; i <p>Feuerwerkspatronen auswählen</p><pre class="brush:php;toolbar:false">void ChoiceJet(DWORD& t1){
	DWORD t2 = GetTickCount();
	if (t2 - t1 > 100)		//烟花弹出现的时间间隔100ms
	{
		//烟花弹个数
		int i = rand() % 10;
		//不处于发射状态
		if (jet[i].shoot == false && fire[i].show == false)
		{
			//烟花弹
			jet[i].x = rand() % 1000;
			jet[i].y = rand() % 100 + 450;	//450-549
			jet[i].hx = jet[i].x;
			jet[i].hy = rand() % 300;		//0-299
			jet[i].shoot = true;			//发射状态

			putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n], SRCINVERT);
		}
		t1 = t2;
	}}

Start beurteilen

void Shoot(){
	for (int i = 0; i = jet[i].dt && jet[i].shoot == true)
		{
			putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n], SRCINVERT);
			if (jet[i].y >= jet[i].hy)
			{
				jet[i].n++;			//闪烁
				jet[i].y -= 5;
			}
			putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n], SRCINVERT);

			if (jet[i].y <pre class="brush:php;toolbar:false">//显示烟花void ShowFire(DWORD* pMem){
	int drt[16] = { 5, 5, 5, 5, 5, 10, 25, 25, 25, 25, 55, 55, 55, 55, 55, 65 };

	for (int i = 0; i = fire[i].dt && fire[i].show == true)
		{
			if (fire[i].r = fire[i].max_r - 1)
			{
				fire[i].draw = false;
				FireInit(i);
			}
			fire[i].t1 = fire[i].t2;
			// 如果该号炮花可爆炸,根据当前爆炸半径画烟花,颜色值接近黑色的不输出。
			if (fire[i].draw)
			{
				for (double a = 0; a  0 && x1 0 && y1 > 8) & 0xff;
						int r = (fire[i].xy[x1][y1] >> 16);
						// 烟花像素点在窗口上的坐标
						int xx = (int)(fire[i].x + fire[i].r * cos(a));
						int yy = (int)(fire[i].y - fire[i].r * sin(a));
						//较暗的像素点不输出、防止越界
						if (r > 0x20 && g > 0x20 && b > 0x20 && xx > 0 && xx 0 && yy <p>Menüoberfläche</p><pre class="brush:php;toolbar:false">void welcome(){
	setcolor(YELLOW);
	for (int i = 0; i <p>Hauptfunktion </p><pre class="brush:php;toolbar:false">int main(){
	//初始界面(1000,600)
	initgraph(1000, 600);
	//初始化种子
	srand((unsigned int)time(NULL));
	//音乐 爱的翅膀
	mciSendString(L"open ./fire/bk1.mp3 alias music", 0, 0, 0);	//send(发送)	string(字符串)
	mciSendString(L"play music", 0, 0, 0);
	//其它音乐类型 wav PlaySound()
	//0,0,0 音乐播放器时:播放设备,快进设备 快退 暂停
	welcome();
	DWORD t1 = GetTickCount();
	DWORD* pMem = GetImageBuffer();
	for (int i = 0; i <h1>Material</h1><p>zwei Bilder werden im Brandordner abgelegt. Was die Musik angeht, können Sie einfach ein Musikstück finden und einfügen, und dann kann es abgespielt werden. <br><img src="https://img.php.cn/upload/article/000/000/052/1cf72c8ff7116152eb2b0bd02d2b2411-3.bmp" alt="Wie schreibe ich dynamische Feuerwerke in C-Sprache?"><br><img src="https://img.php.cn/upload/article/000/000/052/e224e28aabb9f24626bf28cc71eab482-4.jpg" alt="Wie schreibe ich dynamische Feuerwerke in C-Sprache?"></p><h1>Zusammenfassung</h1><p>Sie müssen die Grafikbibliothek installieren und das entsprechende Wissen verstehen. Der Materialpfad muss korrekt geschrieben sein, sonst hat er keine Wirkung. </p><link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css" rel="stylesheet"><link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css" rel="stylesheet"><svg xmlns="http://www.w3.org/2000/svg"   style="max-width:90%"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg><blockquote><p><strong>Verwandte Lernempfehlungen: </strong><a href="https://www.php.cn/course/list/37.html" target="_blank"><strong>C-Video-Tutorial</strong></a></p></blockquote>

Das obige ist der detaillierte Inhalt vonWie schreibe ich dynamische Feuerwerke in C-Sprache?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn