C语言实现动态数字雨
生活随笔
收集整理的這篇文章主要介紹了
C语言实现动态数字雨
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這下面是源碼,資源是easyx
下載地址直接百度搜索就有了easyx
要可以直接運行的直接評論。
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #include<easyx.h> //多媒體設備頭文件 #include<mmsystem.h> #pragma comment(lib,"winmm.lib")#define RAIN_NUM 128 #define STR_NUM 20 #define screenw 640 #define screenh 960 #define ball_num 5 struct Rain {int x;int y;int speed;//速度char str[STR_NUM+1]; }rain[RAIN_NUM]; struct Ball {int ballx;int bally;int ballr;int movex;int movey; }ball[ball_num]; //隨機生成一個字符 大寫 小寫 數字 char cearteChr() {switch (rand() % 3)//隨機產生一個整數,如果沒有設置隨機數種子,那么就是一個固定的數{case 0:return 'a' + rand() % 26;case 1:return 'A' + rand() % 26;case 2:return '0' + rand() % 10;}//隨機產生一個數//返回大寫字符//返回小寫字符//返回數字字符return 0; } //隨機生成一段字符串 char* cearteStr(int len) {static char* str = (char*)calloc(len + 1, sizeof(char));for (int i = 0; i < len; i++){str[i]=cearteChr();}return str; } //初始化數字雨 void initRain(int i) {rain[i].x = i * 15;rain[i].y = rand()% getheight();rain[i].speed = rand() % 3 + 1;strncpy_s(rain[i].str, cearteStr(STR_NUM), STR_NUM); } //繪制字體 void drawRain(int i) {//outtextxy(rain[i].x,rain[i].y, rain[i].str);for (int k = 0; k < STR_NUM; k++){//設置文字顏色//settextcolor(RGB(0, rand() % 256, rand() % 256));settextcolor(RGB(0, 255-(k*12), 0));outtextxy(rain[i].x, rain[i].y - (k * 15), rain[i].str[k]);} } //隨機改變每串數字雨的字符 void chageChr(int i) {rain[i].str[rand() % STR_NUM] = cearteChr(); } //讓數字雨往下掉 void raining(int i) {rain[i].y += rain[i].speed;if (rain[i].y- STR_NUM *15 >= getheight()){//rain[i].x = i * 15;//rain[i].y = 0;//rain[i].speed = rand() % 3 + 1;initRain(i);} } //小球初始化 void ballinitialize(int i) {ball[i].ballx = screenh / 2;ball[i].bally = rand() % screenw;ball[i].ballr = rand() % 50;ball[i].movex = rand()%3+1;ball[i].movey = rand()%3+1; } //繪制小球 void drawball(int i) {setfillcolor(RGB(0, rand()%5, rand() % 255));solidcircle(ball[i].ballx, ball[i].bally, ball[i].ballr); } //小球移動 void ballrun(int i) {ball[i].ballx += ball[i].movex;ball[i].bally += ball[i].movey;if (ball[i].bally + ball[i].ballr > getheight() ||ball[i].bally - ball[i].ballr < 0 )ball[i].movey = -ball[i].movey;if(ball[i].ballx + ball[i].ballr > getwidth() || ball[i].ballx - ball[i].ballr < 0)ball[i].movex = -ball[i].movex; } int main() {initgraph(screenh, screenw);//設置窗口標題SetWindowText(GetHWnd(),L"裝逼數字雨");//設置背景顏色為透明setbkmode(TRANSPARENT);//設置隨機數種子srand((unsigned int)time(NULL));?? ?//播放背景音樂mciSendString(L"open ./1.mp3",NULL,NULL,NULL);mciSendString(L"play ./1.mp3", NULL, NULL, NULL);for (int i = 0; i < RAIN_NUM; i++){?? ?initRain(i);}//雙緩沖(批量繪圖)//把圖形會知道了內存里面,不直接繪制到窗口for (int i = 0; i < ball_num; i++){ballinitialize(i);}BeginBatchDraw();while (1)?{//清屏cleardevice();for (int i = 0; i < ball_num; i++){drawball(i);ballrun(i);}for (int i = 0; i < RAIN_NUM; i++){drawRain(i);chageChr(i);raining(i);?? ?}//立馬吧內存里面的圖形,全部顯示到窗口上面FlushBatchDraw();}//結束雙緩沖EndBatchDraw();closegraph();return 0; }?
?
總結
以上是生活随笔為你收集整理的C语言实现动态数字雨的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创建一个简单的MFC程序
- 下一篇: ERP接口介绍