最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言實(shí)戰(zhàn)之浪漫煙花表白程序代碼

 更新時(shí)間:2021年04月24日 12:42:37   投稿:mdxy-dxy  
這篇文章主要介紹了C語(yǔ)言實(shí)戰(zhàn)之浪漫煙花表白程序代碼,需要的朋友可以參考下

創(chuàng)建win32控制臺(tái)應(yīng)用程序,選擇空項(xiàng)目。

創(chuàng)建完畢后,右擊頭文件新建一個(gè)頭文件(.h)。名字寫main.h

然后在源文件新建一個(gè)C++文件(.cpp)。名字寫main.cpp

如圖:

然后在main.h里面寫上如下代碼:

#include <stdio.h>
#include <graphics.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")

#define PI		3.1415926535
#define NUM		13 
//煙花彈
struct JET
{
	int		x, y;	//坐標(biāo)
	int		hx,hy; //最高點(diǎn)坐標(biāo)
	bool	shoot; //判斷煙花彈是不是發(fā)射狀態(tài)

	DWORD t1, t2, dt; //煙花彈發(fā)射的速度
	IMAGE img[2];    //圖片2張  一明一暗的兩張
	byte n : 1;   //結(jié)構(gòu)體 位段 變量 n   占用內(nèi)存的一個(gè)位!
}jet[NUM];

//煙花
struct FIRE
{
	int r;    //半徑
	int maxr;  //最大半徑
	int x, y;		//相對(duì)于窗口 中心點(diǎn)的坐標(biāo)
	int cenx, ceny; //相對(duì)于圖片本身 中心點(diǎn)的坐標(biāo)
	int width, height; 
	int xy[240][240];  //圖片 保存到一個(gè)像素矩陣。
	
	bool show;				//是否綻放
	bool draw;				//是否繪制
	DWORD t1, t2, dt;		//爆炸的速度
}fire[NUM];


void Init(int i);
void Load();
void Chose(DWORD& t1);
void Shoot();
void Show(DWORD* pem);
在main.cpp寫上如下代碼:
/****************************************************
*****************************************************
****************表白浪漫煙花項(xiàng)目開(kāi)發(fā)********************
****************主講人:三黑之毅************************
****************最后修改:2019年3月20日****************
*****************************************************
****************************************************/

#include "main.h"

int main()
{


	//打開(kāi)一個(gè)窗口 1200 800
	initgraph(1200, 800);
	srand((unsigned int)time(NULL));
	


	mciSendString(L"open ./fire/千年.mp3 alias bgm", 0, 0, 0);
	mciSendString(L"play bgm repeat", 0, 0, 0);
	DWORD t1 = GetTickCount();
	DWORD* pem = GetImageBuffer();
	
	for (int i = 0; i < NUM; i++)
	{
		Init(i);
	}
	Load();
	BeginBatchDraw();
	while (1)
	{
		Sleep(10);

		for (int clr = 0; clr < 1000; clr++)
		{
			for (int j = 0; j < 2; j++)
			{
				int px1 = rand() % 1200;
				int py1 = rand() % 800;

				if (py1 < 799)
				{
					pem[py1 * 1200 + px1] = pem[py1 * 1200 + px1 + 1] = BLACK;
				}
			}
		}

		Chose(t1);
		Shoot();
		Show(pem);
		FlushBatchDraw();
	}
	return 0;
}

//初始化 13個(gè)
void Init(int i)
{
	// 分別為:煙花中心到圖片邊緣的最遠(yuǎn)距離、煙花中心到圖片左上角的距離 (x、y) 兩個(gè)分量
	int r[15] = { 120, 120, 155, 123, 130, 147, 138, 138, 130, 135, 140, 132, 155, 145, 124 };
	int x[15] = { 120, 120, 110, 117, 110, 93, 102, 102, 110, 105, 100, 108, 110, 145, 124 };
	int y[15] = { 120, 120, 85, 118, 120, 103, 105, 110, 110, 120, 120, 104, 85, 145, 124 };

	fire[i].width = 500;
	fire[i].height = 500;
	fire[i].maxr = r[i];
	fire[i].cenx = x[i];
	fire[i].ceny = y[i];
	fire[i].show = false;
	fire[i].t1 = GetTickCount();
	fire[i].dt = 5;
	fire[i].r = 0;

	//初始化煙花彈的部分?jǐn)?shù)據(jù)
	jet[i].t1 = GetTickCount();  //定個(gè)時(shí)間點(diǎn)
	jet[i].dt = rand() % 10;     //0-9 ms
	jet[i].n = 0;
	jet[i].shoot = false;        //都是沒(méi)有發(fā)射的。
}

//加載圖片
void Load()  //加載到哪里去?
{
	IMAGE fm, gm;
	loadimage(&fm, L"./fire/flower.jpg", 3120, 240);
	for (int i = 0; i < NUM; i++)
	{
		SetWorkingImage(&fm); //fm去拿
		getimage(&gm,i*240, 0, 240, 240);  //gm
		SetWorkingImage(&gm); //gm去拿

		for (int a = 0; a < 240; a++)
		{
			for (int b = 0; b < 240; b++)
			{
				fire[i].xy[a][b] = getpixel(a, b);
			}
		}
	}

	//文件夾
	IMAGE sm;
	loadimage(&sm, L"./fire/shoot.jpg", 200, 50);
	//保存在sm
	for (int i = 0; i < NUM; i++)
	{
		SetWorkingImage(&sm); //sm去拿
		int n = rand() % 5;  //0-4
		getimage(&jet[i].img[0], n*20,0,20,50);  //暗的
		getimage(&jet[i].img[1], (n + 5) * 20, 0, 20, 50);  //亮的
	}
	SetWorkingImage(NULL);			//sm去拿
}

//選擇煙花彈  煙花彈產(chǎn)生的速度?。。?
void Chose(DWORD& t1)
{
	DWORD t2 = GetTickCount();   //13個(gè)

	if (t2 - t1 > 1)  //每隔1個(gè)ms  產(chǎn)生一個(gè)煙花彈
	{
		int n = rand() % NUM;  //0-12
		if (jet[n].shoot == false&&fire[n].show == false) //非發(fā)射狀態(tài)
		{
			jet[n].x = rand()%1200;
			jet[n].y = rand() % 100 + 600; //600-699之間
			jet[n].hx = jet[n].x;
			jet[n].hy = rand()%400;			//0-399
			jet[n].shoot = true;            //發(fā)射狀態(tài)

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

void Shoot()
{
	for (int i = 0; i < NUM; i++)
	{
		jet[i].t2 = GetTickCount();
		if (jet[i].t2 - jet[i].t1 >= 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 <= jet[i].hy)  //到達(dá)最高點(diǎn)了
			{
				//擦除煙花彈
				putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n], SRCINVERT);
				//煙花彈最高點(diǎn)的 hx hy  -----》煙花
				fire[i].x = jet[i].hx;
				fire[i].y = jet[i].hy;
				//改變煙花彈的狀態(tài)
				jet[i].shoot = false;
				fire[i].show = true;
			}

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

void Show(DWORD* pem)
{
	int dir[16] = { 5, 5, 5, 5, 5, 8, 25, 25, 25, 55, 55, 55, 55, 65, 65, 66 };

	for (int i = 0; i < NUM; i++)
	{
		fire[i].t2 = GetTickCount();

		if (fire[i].t2 - fire[i].t1>fire[i].dt&&fire[i].show == true)
		{
			if (fire[i].r < fire[i].maxr)
			{
				fire[i].r++;
				fire[i].dt = dir[fire[i].r / 10];
				fire[i].draw = true;
			}

			if (fire[i].r >= fire[i].maxr - 1)
			{
				fire[i].draw = false;
				Init(i);
			}
			fire[i].t1 = fire[i].t2;
		}

		if (fire[i].draw == true)
		{
			//圓  PI
			for (double a = 0; a <= 6.28; a += 0.01)
			{
				int x1 = (int)(fire[i].cenx + fire[i].r*cos(a));
				int y1 = (int)(fire[i].ceny - fire[i].r*sin(a));
				if (x1 > 0 && x1<fire[i].width&&y1>0 && y1 < fire[i].height)
				{
					int b = fire[i].xy[x1][y1] & 0xff;
					int g = (fire[i].xy[x1][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<1200 && yy>0 && yy < 800)
						pem[yy * 1200 + xx] = BGR(fire[i].xy[x1][y1]);
				}
			}
			fire[i].draw = false;
		}
	}
}

注:音樂(lè):千年.mp3,自己去網(wǎng)上下載,然后放到程序fire目錄下。
注:圖片素材就是這兩張:

自己下載一下這兩圖,也放到fire目錄下。
學(xué)習(xí)c語(yǔ)言:
幼兒園英語(yǔ)水平 初中數(shù)學(xué)水平 高中語(yǔ)文水平
也就是說(shuō)只要會(huì)記單詞就行?。?!
業(yè)務(wù)邏輯
寫程序的順序
這是最主要的,而并不是代碼
會(huì)了所有代碼,腦子里沒(méi)有業(yè)務(wù)邏輯,還是沒(méi)用,被稱為“碼農(nóng)”
還是不懂的聯(lián)系q:2060164008或進(jìn)q群:706625210。
今天直播到此結(jié)束?。?!三黑之毅!

相關(guān)文章

  • C語(yǔ)言超詳細(xì)講解指針的概念與使用

    C語(yǔ)言超詳細(xì)講解指針的概念與使用

    本文主要講解C語(yǔ)言中指針和字符串的關(guān)系以及指針和數(shù)組的關(guān)系,在看本文之前大家可以先看看博主之前的C語(yǔ)言基礎(chǔ)篇,先對(duì)C語(yǔ)言指針先有個(gè)基礎(chǔ)的了解,有助于對(duì)本文章有更深一步的了解
    2022-05-05
  • QT 如何實(shí)現(xiàn)時(shí)間的獲取

    QT 如何實(shí)現(xiàn)時(shí)間的獲取

    這篇文章主要介紹了QT 如何實(shí)現(xiàn)時(shí)間的獲取,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • 詳解C++中構(gòu)造函數(shù),拷貝構(gòu)造函數(shù)和賦值函數(shù)的區(qū)別和實(shí)現(xiàn)

    詳解C++中構(gòu)造函數(shù),拷貝構(gòu)造函數(shù)和賦值函數(shù)的區(qū)別和實(shí)現(xiàn)

    這篇文章主要介紹了C++中構(gòu)造函數(shù),拷貝構(gòu)造函數(shù)和賦值函數(shù)的區(qū)別和實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • C++中如何實(shí)現(xiàn)回調(diào)的方法示例

    C++中如何實(shí)現(xiàn)回調(diào)的方法示例

    這篇文章主要給大家介紹了關(guān)于C++中如何實(shí)現(xiàn)回調(diào)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • C++?多態(tài)虛函數(shù)的底層原理深入理解

    C++?多態(tài)虛函數(shù)的底層原理深入理解

    這篇文章主要介紹了C++?多態(tài)虛函數(shù)的底層原理深入理解,多態(tài)是在不同繼承關(guān)系的類對(duì)象,去調(diào)用同一函數(shù),產(chǎn)生了不同的行為,通常是父類調(diào)用子類的重寫函數(shù),在C++中就是?父類指針指向子類對(duì)象,此時(shí)父類指針的向下引用就可以實(shí)現(xiàn)多態(tài)
    2022-08-08
  • C語(yǔ)言中free函數(shù)的使用詳解

    C語(yǔ)言中free函數(shù)的使用詳解

    free函數(shù)是釋放之前某一次malloc函數(shù)申請(qǐng)的空間,而且只是釋放空間,并不改變指針的值。下面我們就來(lái)詳細(xì)探討下
    2017-05-05
  • C語(yǔ)言實(shí)現(xiàn)進(jìn)程5狀態(tài)模型的狀態(tài)機(jī)

    C語(yǔ)言實(shí)現(xiàn)進(jìn)程5狀態(tài)模型的狀態(tài)機(jī)

    狀態(tài)機(jī)在實(shí)際工作開(kāi)發(fā)中應(yīng)用非常廣泛,用這幅圖就可以很清晰的表達(dá)整個(gè)狀態(tài)的流轉(zhuǎn)。本篇通過(guò)C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的進(jìn)程5狀態(tài)模型的狀態(tài)機(jī),讓大家熟悉一下?tīng)顟B(tài)機(jī)的魅力,需要的可以參考一下
    2022-10-10
  • C++之多態(tài)(內(nèi)容不錯(cuò))

    C++之多態(tài)(內(nèi)容不錯(cuò))

    什么是多態(tài)?顧名思義就是同一個(gè)事物在不同場(chǎng)景下的多種形態(tài),需要的朋友可以參考下
    2020-01-01
  • Matlab實(shí)現(xiàn)將圖像序列合并為視頻的方法詳解

    Matlab實(shí)現(xiàn)將圖像序列合并為視頻的方法詳解

    MATLAB是一種高性能語(yǔ)言,用于操縱矩陣、執(zhí)行技術(shù)計(jì)算、繪圖等。它代表矩陣實(shí)驗(yàn)室。借助這個(gè)軟件,我們可以從圖像中創(chuàng)建視頻。這篇文章主要介紹了Matlab實(shí)現(xiàn)將圖像序列合并為視頻的四個(gè)方法,希望對(duì)大家有所幫助
    2023-03-03
  • C++中的模板template小結(jié)

    C++中的模板template小結(jié)

    這篇文章主要介紹了C++中的模板template的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評(píng)論

通州区| 藁城市| 陇南市| 长白| 秭归县| 瑞安市| 红河县| 太谷县| 永城市| 元江| 黑山县| 郑州市| 延安市| 兰溪市| 凭祥市| 西昌市| 广河县| 刚察县| 西乡县| 竹北市| 蓬安县| 乐平市| 阜新市| 建昌县| 松桃| 沙坪坝区| 田林县| 朝阳区| 保山市| 楚雄市| 色达县| 通化市| 岳阳市| 通海县| 司法| 九龙城区| 十堰市| 南川市| 吐鲁番市| 名山县| 紫云|