昨天在一个公众号上看到用C++实现的一场流星雨场景图,惊艳到了一直没怎么接触过图形库的我,于是想着自己实现一个类似的场景,不知道是codeblocks本身的原因还是我安装图形库的过程出了点问题,反正就是好多错误,于是弃用CB改用VS2013进行编程了,下面先归纳一下用到的一些东西:
图形库
头文件:grphics.h
创建图形窗口:initgraph(int width,int height);
画点:putpixel(int x,int y,color);
音乐
头文件:mmsystem.h
加载静态库:#pragma comment(lib,"winmm.lib")
打开音乐:mciSendString("open 音乐路径 alias music", 0, 0, 0);
播放音乐:mciSendString("play music repeat", 0, 0, 0);
贴图
设置图片变量:IMAGE
加载图片:loadimage(&img, 图片路径, 长, 宽);
输出图片:putimage(0, 0, &img, SRCPAINT);
随机数
随机数种子:srand((unsigned int)time(NULL));
使用:rand()函数
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
写的真的很一般的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
#include<time.h> //#include<mmsystem.h>此头文件有些问题..... #include <graphics.h>//图形库头文件 #pragma comment(lib,"winmm.lib") #define MAXStar 1000 //星星 #define MAXStar0 300 //流星 IMAGE img1, img2, img3, img4; void initData(); void initStar(int i); void initStar0(int i); void moveStar(int i); void moveStar0(); void drawStar0(); struct STAR//星星 { int x, y; int v; int color; }star[MAXStar]; struct STAR0//流星 { int x, y; int v; int style;//图片样式 }star0[MAXStar0]; int main() { initData(); mciSendString("open 666.mp3 alias music", 0, 0, 0);//背景音乐 mciSendString("play music repeat", 0, 0, 0); while (1) { BeginBatchDraw();//开始绘图界面 cleardevice();//刷新窗口 for (int i = 0; i < MAXStar; i++) { moveStar(i); } moveStar0(); drawStar0(); Sleep(100); EndBatchDraw();//结束绘图界面,绘制上面所有操作 } closegraph(); return 0; } void initData() { srand((unsigned int)time(NULL)); initgraph(980,720); //初始化数据 loadimage(&img1, "P1.jpg", 50, 50); loadimage(&img2, "P2.jpg", 50, 50); loadimage(&img3, "P3.jpg", 50, 50); loadimage(&img4, "P4.jpg", 50, 50); //初始化星星 int i; for (i = 0; i<MAXStar; i++) { initStar(i); star[i].x = rand() % 640; } //初始化流星 for (i = 0; i<MAXStar0; i++) { initStar0(i); star0[i].x = rand() % 640; } } void initStar(int i) { star[i].x = 0; star[i].y = rand() % 480; star[i].v = rand() % 5; star[i].color = RGB(star[i].v * 51, star[i].v * 51, star[i].v * 51);//255/5=51; } void initStar0(int i) { star0[i].x = rand() % 1280 - 2080; star0[i].y = -100; do { star0[i].v = rand() % 30 + 1; } while (star0[i].v<5);//避免出现速度过慢的 star0[i].style = rand() % 4 + 1;//1-4 } void moveStar(int i) { putpixel(star[i].x, star[i].y, 0); star[i].x += star[i].v; if (star[i].x>640) initStar(i); putpixel(star[i].x, star[i].y, star[i].color); } void moveStar0( ) { for (int i = 0; i < MAXStar0; i++) { star0[i].x += star0[i].v; star0[i].y += star0[i].v; } } void drawStar0() { for (int i = 0; i < MAXStar0; i++) { switch (star0[i].style) { case 1: putimage(star0[i].x, star0[i].y, &img1, SRCPAINT); break; case 2: putimage(star0[i].x, star0[i].y, &img2, SRCPAINT); break; case 3: putimage(star0[i].x, star0[i].y, &img3, SRCPAINT); break; case 4: putimage(star0[i].x, star0[i].y, &img4, SRCPAINT); break; } } } |
附上一张效果图
随手将最后的可执行文件拉到了百度云里 链接:https://pan.baidu.com/s/1P4NHMVMn7pRTP272ujOhug 密码:m1qu
好多事情,做起来真的没有看起来那么简单(っ ̯ -。) ......
1 条咸鱼在这里躺着