編譯環境:Mictosoft Visual Studio 2022, EasyX_2021
作 者:代碼騎士<1696297834@qq.com>
最后修改:2021-12-16
演示:
(多看一眼,圖片會動……)
?
========================================================================
目錄:
1、黑夜
2、畫樹
3、飄雪
4、燈光閃閃
5、退出
=======================================================================
思路:
1、黑夜:非常簡單,創建一個黑色畫布即可,
2、畫樹:陣列畫樹,顏色填充,老方法了,也很簡單,
3、飄雪:創建結構體陣列存盤雪花,使雪花隨機產生并使其向下運動,參考檔案: EasyX 檔案 - Stars
4、燈光閃閃:在樹葉上面掛上彩燈,同樣對二維陣列進行操作,并獲取延時,能使燈光閃爍,
5、開關陳述句控制功能實作與退出,
========================================================================
原始碼:
#include<graphics.h>
#include<time.h>
#include<conio.h>
#include<iostream>
using namespace std;
#pragma comment(lib,"Winmm.lib")
const int width = 600;
const int length = 600;
const int MAXSNOW = 200;
const int MAXLIGHT = 20;
const int BOUNDS = 20;
//const int SZ = 10;
int key = 0;//功能選擇鍵:2下雪,3點燈
IMAGE gift;
struct SNOW
{
int x;
double y;//沿y軸下落
double step;//下落速度
int color;
};
SNOW snow[MAXSNOW];//結構體陣列(200顆雪花)
int TREE[BOUNDS][BOUNDS] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//15-x
{0,0,0,0,0,0,0,7,0,0,0,0,0,0,0},
{0,0,0,0,0,0,1,1,1,0,0,0,0,0,0},
{0,0,0,0,0,7,7,7,7,7,0,0,0,0,0},
{0,0,0,0,1,1,1,1,1,1,1,0,0,0,0},
{0,0,0,0,0,7,7,7,7,7,0,0,0,0,0},
{0,0,0,0,1,1,1,1,1,1,1,0,0,0,0},
{0,0,0,7,7,7,7,7,7,7,7,7,0,0,0},
{0,0,0,0,1,1,1,1,1,1,1,0,0,0,0},
{0,0,0,7,7,7,7,7,7,7,7,7,0,0,0},
{0,0,1,1,1,1,1,1,1,1,1,1,1,0,0},
{0,0,0,0,0,0,0,2,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,2,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,2,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,2,0,0,0,0,0,0,0}//15-y
};
class christmasTree
{
public:
void Initialize();//黑夜
//
void drawTree();//圣誕樹
void drawTree2();//2tree
void drawTree3();//3tree
//
void initSnow(int i);//雪花初始化
void moveSnow(int i);//下雪
void Snow(christmasTree CT);//飛雪
//
void yellowLight(int i, int j, int SZ);
void redLight(int i, int j, int SZ);
void Light(int i, int j, int SZ);//閃燈
//
void Surprise();//驚喜
};
void christmasTree::Initialize()
{
initgraph(width, length);
//setbkcolor(WHITE);
//cleardevice();
loadimage(&gift, "gift.jpg", 300, 300);
putimage(150, 150, &gift);
_getch();
closegraph();
}
void christmasTree::yellowLight(int i, int j, int SZ)
{
if (TREE[i][j] == 7)
{
int x = ((j + 0) * SZ + (j + 1) * SZ) / 2;
int y = ((i + 0) * SZ + (i + 1) * SZ) / 2;
int r = SZ / 4;
setlinecolor(YELLOW);
setfillcolor(YELLOW);
fillcircle(x, y, r);//圓心公式(x1+x2)/2
Sleep(1);
setlinecolor(RGB(9, 163, 67));
setfillcolor(RGB(9, 163, 67));
fillrectangle(j * SZ, i * SZ, (j + 1) * SZ, (i + 1) * SZ);
}
}
void christmasTree::redLight(int i, int j, int SZ)
{
if (TREE[i][j] == 1)
{
int x = ((j + 0) * SZ + (j + 1) * SZ) / 2;
int y = ((i + 0) * SZ + (i + 1) * SZ) / 2;
int r = SZ / 4;
setlinecolor(RED);
setfillcolor(RED);
fillcircle(x, y, r);//圓心公式(x1+x2)/2
Sleep(1);
setlinecolor(GREEN);
setfillcolor(GREEN);
fillrectangle(j * SZ, i * SZ, (j + 1) * SZ, (i + 1) * SZ);
}
}
void christmasTree::Light(int i, int j, int SZ)
{
yellowLight(i, j, SZ);
redLight(i, j, SZ);
}
void christmasTree::drawTree()
{
int i, j;
setlinestyle(PS_SOLID, 36);
int SZ = width / BOUNDS*1.25;
for (int i = 0; i < BOUNDS; i++)
{
for (int j = 0; j < BOUNDS; j++)
{
if (TREE[i][j] == 1)
{
setlinecolor(GREEN);
setfillcolor(GREEN);
fillrectangle(j * SZ, i * SZ, (j + 1) * SZ, (i + 1) * SZ);
Sleep(1);
}
if (TREE[i][j] == 2)
{
setlinecolor(RGB(95, 41, 31));
setfillcolor(RGB(95,41,31));
fillrectangle(j * SZ, i * SZ, (j + 1) * SZ, (i + 1) * SZ);
Sleep(1);
}
if (TREE[i][j] == 7)
{
setlinecolor(RGB(9, 163, 67));
setfillcolor(RGB(9, 163, 67));
fillrectangle(j * SZ, i * SZ, (j + 1) * SZ, (i + 1) * SZ);
Sleep(1);
}
if(key == 3)
Light(i, j, SZ);//閃燈
}
}
}
void christmasTree::drawTree2()
{
int i, j;
int SZ = width / BOUNDS * 1.25;
for (int i = 0; i < BOUNDS; i++)
{
for (int j = 0; j < BOUNDS; j++)
{
if (TREE[i][j] == 1)
{
setlinecolor(GREEN);
setfillcolor(GREEN);
fillrectangle(j * SZ, i * SZ, (j + 1) * SZ, (i + 1) * SZ);
}
if (TREE[i][j] == 2)
{
setlinecolor(RGB(95, 41, 31));
setfillcolor(RGB(95, 41, 31));
fillrectangle(j * SZ, i * SZ, (j + 1) * SZ, (i + 1) * SZ);
}
if (TREE[i][j] == 7)
{
setlinecolor(RGB(9, 163, 67));
setfillcolor(RGB(9, 163, 67));
fillrectangle(j * SZ, i * SZ, (j + 1) * SZ, (i + 1) * SZ);
}
if (key == 3)
Light(i, j, SZ);//閃燈
}
}
}
void christmasTree::initSnow(int i)
{
snow[i].y = 0;
snow[i].x = rand() % width;
snow[i].step = (rand() % 5000) / 1000.0 + 1;
snow[i].color = (int)(snow[i].step * 255 / 6.0 + 0.5);
snow[i].color = RGB(snow[i].color, snow[i].color, snow[i].color);
}
void christmasTree::moveSnow(int i)//下雪
{
setlinestyle(PS_SOLID, 36);
putpixel((int)snow[i].x, snow[i].y, 0);//畫雪
snow[i].y += snow[i].step;
if (snow[i].y > length) initSnow(i);//生成新雪花
putpixel((int)snow[i].x, snow[i].y, snow[i].color);//再畫雪
}
void christmasTree::Snow(christmasTree CT)
{
srand((unsigned)time(NULL));
for (int i = 0; i < MAXSNOW; i++)
{
CT.initSnow(i);
snow[i].y = rand() % length;
}
while (!_kbhit())
{
drawTree2();//畫樹
for (int i = 0; i < MAXSNOW; i++)
CT.moveSnow(i);
Sleep(20);
}
}
int main()
{
christmasTree CT;
CT.Initialize();
initgraph(width, length);
mciSendString(_T("open 123.mp3 alias bkmusic"), NULL, 0, NULL);//播放音樂
mciSendString(_T("play bkmusic repeat"), NULL, 0, NULL);//回圈播放
CT.drawTree();
while (cin>>key)
{
switch (key)
{
case 2:
CT.Snow(CT);
break;
case 3:
CT.Snow(CT);
break;
case 4:
return 0;
}
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/382970.html
標籤:其他
下一篇:悼念毛星云(淺墨)老師
