C语言实现放烟花的程序

这是一个利用C语言编写放烟花的程序(同时也可以播放音乐),供大家参考,具体内容如下

代码如下

#pragma once
#include<stdio.h>
#include<graphics.h>  //图形界面库头文件
#include<math.h>    //计算圆形的轨迹坐标
#include<conio.h>
#include<time.h>
#include<stdlib.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
//#include 包含头文件
//#pragma comment(lib."文件名称") 包含库文件

constexpr auto WND_WIDTH = 1000;
constexpr auto WND_HEIGHT = 600;
constexpr auto PI = 3.141592653589793238;
constexpr auto NUM = 14;

/***********结构****************/
struct JET //烟花弹
{
 int x, y;   //发射点坐标
 int hx, hy;  //最高点坐标 爆炸坐标
 int height;  //高度 最高点y 发射点y的差值
 bool isshoot; //是否发射状态

 DWORD t1, t2, dt;  //保存时间 时间可以用来描述发射速度
 IMAGE img[2];    //保存烟花一明一暗的图片
 byte n : 1;     //保存烟花弹的明暗状态 位段
 //字节为单位 int 4 char 1 n一个位 0-1
}jet[NUM];  //结构体数组13 img这个数组

struct FIRE
{
 int r;
 int max_r;
 int x, y;
 int cen_x, cen_y;
 int width, height;
 int xy[240][240];
 bool show;
 bool draw;
 DWORD t1, t2, dt;
}fire[NUM];

void welcome();
void init(int i);
void loadimages();
void choice(DWORD& t1);
void shoot();
void Show(DWORD* pMem);
void clss(int a);
void delay(int a);
void detabase(int a);
int main()
{
 //res 1.wav
 PlaySound(L"sound.dll", NULL, SND_LOOP | SND_FILENAME | SND_ASYNC);
 //mp3播放
 //mciSendString(L"open 1.mp3 alias bkmusic", NULL, 0, NULL);
 //mciSendString(L"play bkmusic repeat", NULL, 0, NULL);
 int a;
 for (a = 0; a < 5; a++)
 {
 detabase(a);
 delay(100000);
 clss(1);
 }
 delay(500000);
 initgraph(WND_WIDTH, WND_HEIGHT);    //init初始化 graph图形界面 窗口
 srand((unsigned int)time(NULL));
 DWORD t1 = timeGetTime();
 DWORD* pMem = GetImageBuffer();
 //第一个界面
 welcome();

 //初始化
 for (int i = 0; i < NUM; i++)
 {
 init(i);
 }

 loadimages();
 BeginBatchDraw();
 while (!_kbhit())
 {
 //Sleep(10);
 for (int i = 0; i < 1000; i++)
 {
  for (int j = 0; j < 3; j++)
  {

  int px1 = rand() % 1000;
  int py1 = rand() % 600;

  if (py1 < 599)
  {
   pMem[py1 * 1000 + px1] = pMem[py1 * 1000 + px1 + 1] = BLACK;
  }
  }
 }
 choice(t1);
 shoot();
 Show(pMem);
 EndBatchDraw();
 }
 return 0;
}

void welcome()
{
 settextcolor(YELLOW);

 for (int i = 0; i < 50; i++)
 {
 //圆心(500,300) 半径150 60个均匀点的x,y
 int x = 500 + int(150 * sin(PI * 2 * i / 60));
 int y = 300 + int(150 * cos(PI * 2 * i / 60));
 cleardevice();
 settextstyle(i, 0, L"微软雅黑");
 outtextxy(x - 100, y - 150, L"测试使用1234567890");   //在指定的位置去输出字符
 outtextxy(x, y - 100, L"测试1234567890");
 Sleep(25);
 }

 //_getch();  //接收字符 不回显 直接接收
 Sleep(2000);
 cleardevice();
 settextstyle(25, 0, L"宋体");
 outtextxy(400, 150, L"1,");
 outtextxy(400, 200, L"2");
 outtextxy(400, 250, L"3,");
 outtextxy(400, 300, L"4,");
 outtextxy(400, 350, L"5");
 outtextxy(560, 400, L"---6");

 Sleep(3000);
 //_getch();
}

void init(int i)
{
 int r[14] = { 120,120,155,123,130,147,138,138,130,135,140,132,155,160 };
 int x[14] = { 120,120,110,117,110,93,102,102,110,105,100,108,110,132 };
 int y[14] = { 120,120,85,118,120,105,103,110,110,120,1201,04,85,145 };

 fire[i].x = 0;
 fire[i].y = 0;
 fire[i].width = 240;
 fire[i].height = 240;
 fire[i].max_r = r[i];
 fire[i].cen_x = x[i];
 fire[i].cen_y = y[i];
 fire[i].show = false;
 fire[i].dt = 5;
 fire[i].t1 = timeGetTime();
 fire[i].r = 0;

 //初始化 烟花弹
 jet[i].x = 0;
 jet[i].y = 0;
 jet[i].hx = 0;
 jet[i].hy = 0;
 jet[i].height = 0;
 jet[i].t1 = timeGetTime();  //获取系统时间
 jet[i].dt = rand() % 10;  //0-9的随机时间
 jet[i].n = 0;
 jet[i].isshoot = false;
}

void loadimages()
{
 IMAGE fm, gm;
 loadimage(&fm, L"flower.dll", 3120, 240);
 for (int i = 0; i < NUM; i++)
 {
 SetWorkingImage(&fm);
 getimage(&gm, i * 240, 0, 240, 240);
 SetWorkingImage(&gm);

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

 IMAGE jetimg;
 loadimage(&jetimg, L"shoot.dll", 200, 50);

 //set设置 working正在工作的 image图片
 SetWorkingImage(&jetimg);

 for (int i = 0; i < NUM; i++)
 {
 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);
}

void choice(DWORD& t1)
{
 DWORD t2 = timeGetTime();

 if (t2 - t1 > 2)  //2ms产生一个烟花弹
 {
 int n = rand() % 200;   //0-199
 if (n < NUM && jet[n].isshoot == false && fire[n].show == false)
 {
  //重置烟花弹
  jet[n].x = rand() % (WND_WIDTH - 20);
  jet[n].y = rand() % 100 + 400;  //450-549
  jet[n].hx = jet[n].x;
  jet[n].hy = rand() % 400;    //0-399
  jet[n].height = jet[n].y - jet[n].hy;
  jet[n].isshoot = true;
  //n
  putimage(jet[n].x, jet[n].y, &jet[n].img[jet[n].n]);
 }
 t1 = t2;
 }
}

void shoot()
{
 for (int i = 0; i < NUM; i++)
 {
 jet[i].t2 = timeGetTime();
 if (jet[i].t2 - jet[i].t1 > jet[i].dt && jet[i].isshoot == true)
 {
  putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n]);

  if (jet[i].hy < jet[i].y)
  {
  jet[i].n++; //0-1 明暗交替
  jet[i].y -= 5;
  }
  putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n]);

  if (jet[i].y <= jet[i].hy)
  {
  fire[i].y = jet[i].hy;
  fire[i].x = jet[i].hx;
  fire[i].show = true;
  jet[i].isshoot = false;
  }
  jet[i].t1 = jet[i].t2;
 }
 }
}

void Show(DWORD* pMem)
{
 int drt[16] = { 5,5,5,5,5,6,25,25,25,25,25,55,55,55,55,55 };  //dt

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

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

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

 if (fire[i].draw)
 {
  for (double a = 0; a <= 6.28; a += 0.01)
  {
  int x1 = (int)(fire[i].cen_x + fire[i].r * cos(a));
  int y1 = (int)(fire[i].cen_y + 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 < 1000 && yy < 600 && yy>0)
   {
   pMem[yy * 1000 + xx] = BGR(fire[i].xy[x1][y1]);
   }
  }
  }
  fire[i].draw = true;
 }
 }

}
void clss(int a)
{
 system("cls");
}
void delay(int a)
{
 while (a)
 {
 a--;
 }
}
void detabase(int a)
{
 switch (a)
 {
 case 1:
 {
  //printf("■■■■■■■■■■■■■■■■■■■■■■■■■\n");
 printf("      ■■              ■■ \n");
 printf("      ■■       ■■■■■■■■■■\n");
 printf("      ■■■      ■■■■■■■■  \n");
 printf(" ■■■■■■■■■■■■  ■■        \n");
 printf(" ■■■■■■■■■■■■  ■■        \n");
 printf("         ■     ■■        \n");
 printf("   ■■    ■■    ■■        \n");
 printf("   ■■    ■■    ■■        \n");
 printf("   ■■   ■■     ■■        \n");
 printf("■■■■■■■■■■■■■  ■■■■■■■■■■\n");
 printf("■■■■■■■■■■■■■■ ■■■■■■■■■■\n");
 printf("      ■■       ■■    ■■  \n");
 printf("      ■■       ■■    ■■  \n");
 printf(" ■■■■■■■■■■■■  ■■    ■■  \n");
 printf(" ■■■■■■■■■■■■  ■■    ■■  \n");
 printf("      ■■       ■■    ■■  \n");
 printf("   ■  ■■  ■    ■■    ■■  \n");
 printf("  ■■■ ■■ ■■   ■■     ■■  \n");
 printf("  ■■  ■■  ■■  ■■     ■■  \n");
 printf(" ■■   ■■  ■■■ ■■     ■■  \n");
 printf("■■■   ■■   ■  ■■     ■■  \n");
 printf("■■    ■■     ■■      ■■  \n");
 printf("    ■■■■    ■■■      ■■  \n");
 printf("    ■■■■     ■       ■■  \n");
 }
 break;
 case 2:
 {
  //printf("■■■■■■■■■■■■■■■■■■■■■■■■\n");
 printf("      ■■■               \n");
 printf("      ■■■               \n");
 printf("      ■■                \n");
 printf("     ■■■                \n");
 printf("    ■■■■■■■■■■■■■■■■■■■ \n");
 printf("    ■■■     ■■■       ■ \n");
 printf("   ■■■       ■■         \n");
 printf("  ■■■        ■■         \n");
 printf(" ■■■■        ■■         \n");
 printf("■■■■         ■■         \n");
 printf(" ■■  ■■■■■■■■■■■■■■■■■  \n");
 printf("     ■■■■■■■■■■■■■■■■■  \n");
 printf("     ■■      ■■         \n");
 printf("     ■■      ■■         \n");
 printf("     ■■      ■■         \n");
 printf("     ■■      ■■         \n");
 printf("     ■■      ■■         \n");
 printf("■■■■■■■■■■■■■■■■■■■■■■■■\n");
 printf("■■■■■■■■■■■■■■■■■■■■■■■■\n");
 printf("             ■■         \n");
 printf("             ■■         \n");
 printf("             ■■         \n");
 printf("             ■■         \n");
 printf("             ■■         \n");
 printf("             ■■         \n");
 printf("             ■■         \n");
 }
 break;
 case 3:
 {
  //printf("■■■■■■■■■■■■■■■■■■■■■■■■■\n");
 printf("    ■■         ■■        \n");
 printf("    ■■         ■■        \n");
 printf("    ■■         ■■        \n");
 printf("    ■■         ■■        \n");
 printf("    ■■     ■■■■■■■■■■■   \n");
 printf("    ■■     ■■■■■■■■■■■■  \n");
 printf(" ■■ ■■ ■■      ■■   ■■   \n");
 printf(" ■■ ■■  ■■     ■■   ■■   \n");
 printf("■■  ■■  ■■     ■■   ■■   \n");
 printf("■■  ■■  ■■■    ■■   ■■   \n");
 printf("■■  ■■         ■■   ■■   \n");
 printf("■■  ■■         ■■   ■■   \n");
 printf("■■  ■■         ■■   ■■■  \n");
 printf("    ■■   ■■■■■■■■■■■■■■■■\n");
 printf("    ■■   ■■■■■■■■■    ■■■\n");
 printf("    ■■         ■■■       \n");
 printf("    ■■        ■■■■       \n");
 printf("    ■■        ■■ ■■      \n");
 printf("    ■■       ■■  ■■      \n");
 printf("    ■■       ■■   ■■     \n");
 printf("    ■■      ■■    ■■■    \n");
 printf("    ■■     ■■■     ■■■   \n");
 printf("    ■■    ■■■       ■■■■ \n");
 printf("    ■■   ■■■■        ■■■■\n");
 printf("    ■■   ■■■          ■■ \n");
 printf("    ■■    ■              \n");
 }
 break;
 case 4:
 {
 //不用                       不用
   //printf("■■■■■■■■■■■■■■■■■■■■■■■■■\n");
 printf("                  ■■     \n");
 printf("    ■■ ■■■■■■■■■■■■■■    \n");
 printf("   ■■■■■■■■■■■■■■■■■■■   \n");
 printf("   ■■■                   \n");
 printf("   ■■                    \n");
 printf("   ■■       ■■           \n");
 printf("   ■■       ■■           \n");
 printf("   ■■       ■■           \n");
 printf("   ■■       ■■           \n");
 printf("  ■■■       ■■           \n");
 printf("  ■■■       ■■           \n");
 printf("  ■■■■■■■■■■■■■■■■■■■■■  \n");
 printf("  ■■■■      ■■■       ■  \n");
 printf("            ■■           \n");
 printf("            ■■           \n");
 printf("      ■     ■■           \n");
 printf("     ■■■■   ■■   ■■■     \n");
 printf("     ■■■    ■■   ■■■■    \n");
 printf("    ■■■     ■■    ■■■■   \n");
 printf("   ■■■      ■■     ■■■■  \n");
 printf("  ■■■       ■■      ■■■■ \n");
 printf(" ■■■        ■■           \n");
 printf(" ■■■        ■■           \n");
 printf("         ■■■■■           \n");
 printf("          ■■■■           \n");
 printf("          ■■             \n");
 }
 break;
 case 5:
 {
 printf("happy spring festival!");
 }
 break;
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 非常漂亮的新年祝福!C语言实现漂亮的烟花效果

    本文实例为大家分享了C语言实现漂亮的烟花效果展示的具体代码,供大家参考,具体内容如下 程序名称:祝福烟花,祝福朋友 编译环境:VC++6.0 && easyx(立冬版) #include <graphics.h> #include <conio.h> #include <iostream.h> #include <math.h> #include <time.h> #include <stdio.h> #include

  • C语言实现放烟花的程序

    这是一个利用C语言编写放烟花的程序(同时也可以播放音乐),供大家参考,具体内容如下 代码如下 #pragma once #include<stdio.h> #include<graphics.h> //图形界面库头文件 #include<math.h> //计算圆形的轨迹坐标 #include<conio.h> #include<time.h> #include<stdlib.h> #include<mmsystem.h>

  • JS基于面向对象实现的放烟花效果

    本文实例讲述了JS基于面向对象实现的放烟花效果.分享给大家供大家参考.具体实现方法如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> &l

  • 实现让易语言编译的32位程序在64位Windows7系统非管理员帐户中执行

    昨天有易语言开发者向我求助,说他用易语言编译的32位程序软件,发布给64位操作系统Win 7用户使用,因为该用户确定没有管理员权限,而程序启动时又要求必须输入管理员密码,如此陷入困境. 目标企业用户管理严格,要求为普通用户分配管理员权限是不切实际的,只能开发人员从软件开发的角度在技术上解决. 我听到这个问题后,第一感觉是微软用户帐户控制(UAC)引发的,估计通过给 exe 添加特定的 manifest 资源应该可以解决.于是我给了他一段代码,让他用 ResHacker 之类的软件添加到软件里面去

  • C语言实现歌手大奖赛计分程序

    本文实例为大家分享了C语言实现歌手大奖赛计分程序的具体代码,供大家参考,具体内容如下 1. 题目描述 编写一个程序,用户输入评委人数和分数后,程序可以计算去掉一个最高分和最低分后的平均成绩.可多次输入选手成绩,输入N时退出程序. 2. 源代码 #include <stdio.h> #include <stdlib.h> float score[99];//成绩数据 int num=0;//评委数目 float sum=0;//总分 //输入打分数据并输出结果 void inputS

  • JS实现放烟花效果

    本文实例为大家分享了JS实现放烟花效果的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>放烟花--欣欣博客</title> <style> html,body{overflow:hidden;} body,div,p{margin:0;padding:0;} body{background:#00

  • C语言编写洗牌发牌程序

    用C语言编写洗牌发牌程序,供大家参考,具体内容如下 题目 现在只有一套扑克牌中52张副牌(无大王小王),包含了4种花色的牌 现在打乱顺序后分给甲乙丙丁四人 全部分配完毕后,输出甲乙丙丁四人所获得的扑克大小及花色 再经过排序,将甲乙丙丁四人的牌按由大到小顺序输出到屏幕上 要素提取 略 补充 牌面上的数字/字母由小到大为: 3 4 5 6 7 8 9 10 J Q K A 2 牌面上的花色由小到大为: 方块 梅花 红桃 黑桃 思路 略 可能出现的问题 略 代码 #include<stdio.h>

  • c语言实现整蛊朋友小程序(附源码)

    前言 感觉学了c语言后仍然一无是处?!!想要整蛊一下朋友仍然不会?!! 别慌,看完这篇文章,你就会了. 下面给大家分享两个基础的整蛊小程序 1.我是猪关机程序 2.无限弹窗程序 一.我是猪关机程序 效果:运行程序后电脑在60s后关机,如果输入"我是猪"则取消关机:如果输入"你是猪"则立即关机:输入其他文字会提示重新输入:若强行关闭程序电脑仍会关机. 本程序基于控制台,其功能是通过dos命令来实现. 那么就先讲一下所用到的dos命令(shutdown -s -t 60

  • 易语言编程入门第一个程序

    目录 易语言的优点: 最早接触易语言是三年前的事情了,那时候是因为DNF这个游戏我才知道了易语言这个编程语言,当时对他就非常的憧憬.只不过那时候易语言的学习资源比较少,而且自身的学业比较重就没有仔细的了解了. 最近几日再回归DNF的时候突然想到了易语言,所以决定抽点空闲时间学习一下,先定一个小目标:做一个DNF的辅助工具!(也许最终都无法完成也说不定) 这是第一天学习的内容 易语言的优点: 1.     代码是中文的,降低了学习的门槛 2.     全可视化编程,即输即画减少了代码出错的可能 3

  • 基于Html+CSS+JS实现手动放烟花效果

    目录 效果展示 实现代码 Html Css JavaScript 雷迪森安的乡亲们,欢迎来到老实人的前端课堂,上次写了一个新春小盲盒,这大过年的,我把烟花都给你们准备好了,今天我们来写个小烟花吧. 效果展示 注意看有两种模式哦,可以自由切换,鼠标点哪里哪里有烟花,还可以自动放烟花 视频演示:html+css写一个烟花,源码请你直接拿走! 实现代码 Html <div id="tips"> <a id="manual" href="java

  • Windows系统下使用C语言编写单线程的文件备份程序

    写在最前方 源路径:即 From-Path,你准备要备份的资料 目的路径: 即 To-Path,你准备要存储备份的资料的地方 稍微回想一下,上一次写的代码,本次的任务是遍历目录及其子目录,那么这回要干的就是将上次遍历过的数据,挪一下窝,到我们想要他们去的位置. 这涉及到两个操作,遍历 和 拷贝,前一个动作我们在上一回已经实现了,只需做小小的改动,就能够使用.后一个动作也是需要靠 Windows API来完成,至于哪些,稍后再提. 现在先让我们完成一个魔法,3, 2, 1!: do{ puts("

随机推荐