C语言数字雨小项目
视频教程在B站“蒸汽小毛”
编译工具:vs、图形库easyX
该程序在VS上可完美运行。
项目源码:
#include<stdio.h>#include<graphics.h> //图形库头文件#include<Windows.h>#define WIDTH 1615//960#define HEIGTH 1006//640#define STR_SIZE 20 //数字雨数组最大存储#define STR_NUM 128 //数字雨的串数#define STR_WIDTH 15 //字符串struct Rain //雨的结构{int x; //数字雨横向位置int y; //y坐标int speed; //下降速度char str[STR_SIZE]; //数字雨数组}rain[STR_NUM];char CreateCh(){char temp = 0;int flag = rand() % 3;//0 1 2if (flag == 0){temp = rand() % 26 + 'a';}else if (flag == 1){temp = rand() % 26 + 'A';}else{temp = rand() % 10 + '0';}return temp;}void GameInit(){//初始化基础数据for (int i = 0; i < STR_NUM; i++){rain[i].x = i*STR_WIDTH;rain[i].y = rand() % HEIGTH;rain[i].speed = rand() % 5 + 5;//5 6 7 8 9 10}//初始化字符串for (int i = 0; i < STR_NUM; i++){for (int j = 0; j < STR_SIZE; j++){rain[i].str[j] = CreateCh();}}}void GameDraw(){cleardevice();for (int i = 0; i < STR_NUM; i++){for (int j = 0; j < STR_SIZE; j++){outtextxy(rain[i].x, rain[i].y-STR_WIDTH*j, rain[i].str[j]);settextcolor(RGB(0,255-13*j,0));}}}void GamePlay(){for (int i = 0; i < STR_NUM; i++){rain[i].y += rain[i].speed;if (rain[i].y-STR_SIZE*STR_WIDTH>HEIGTH){rain[i].y = 0;}}}void ChangeCh(){for (int i = 0; i < STR_NUM; i++){rain[rand()%STR_NUM].str[rand()%STR_SIZE] = CreateCh();}}int main(){initgraph(WIDTH,HEIGTH);srand(GetTickCount());GameInit();DWORD t1, t2;t1 = t2 = GetTickCount();while (1){BeginBatchDraw();GameDraw();ChangeCh();if (t2 - t1 > 20)//使游戏下落延时{GamePlay();t1 = t2;}t2 = GetTickCount();EndBatchDraw();//Sleep(20); //使整个程序延时}getchar();closegraph();return 0;}
这是简易版本的,以后大概会发复杂炫酷点的。
对于刚学完C语言的初学者,直接做这种小项目也是一件非常困难的事情,中间还有很大的鸿沟。老师上课讲授的知识非常有限,大部分知识还需要同学们自己去探索。程序的写法也有很多很多种,不必拘于一种,也期待各位写出更加简练高效的程序。个人小白,如有错误也希望各位大佬能够指出。需要源码的可以来我的学习群里领取,八零六零,四一,五久久。更多学习资料和小游戏源码都有,还有一群一起学习C语言C++的好兄弟!