当前位置:   article > 正文

经典代码雨----C语言实现

代码雨

代码架构

1、初始化窗口(窗口大小信息)

2、描绘雨点信息(颜色,数字)

3、初始化雨(雨点位置变化)

4、下雨操作(坐标更新)

5、更新窗口(场景描绘)

  1. #include<stdio.h>
  2. #include<Windows.h>
  3. #include<graphics.h>
  4. #include<conio.h>
  5. #include<time.h>
  6. void init_window();
  7. void hua_rain(int n);
  8. void down_rain();
  9. void date_windows();
  10. void init_rain();

预备工作:

定义雨点结构体:主要包含坐标信息、雨点数量。

1、初始化窗口信息。

2、描绘雨点信息。

3、初始化雨(雨点位置变化)

  1. #define rain_num 100
  2. #define WIN_HEIGHT 640
  3. #define WIN_WIDTH 1080
  4. typedef struct Rain
  5. {
  6. int x;
  7. int y;
  8. }rain;
  9. rain rains[rain_num];
  10. void init_window()
  11. {
  12. system("title 黑客帝国-代码雨");
  13. initgraph(WIN_WIDTH, WIN_HEIGHT);
  14. }
  15. void init_rain()
  16. {
  17. for (int i = 0; i < rain_num; i++)
  18. {
  19. rains[i].x = rand() % WIN_WIDTH;
  20. rains[i].y = rand() % WIN_HEIGHT;
  21. }
  22. }
  23. void hua_rain(int n)
  24. {
  25. for (int i = 0; i < n; i++)
  26. {
  27. settextcolor(RGB(0, 255, 0));
  28. outtextxy(rains[n].x, rains[n].y, rand() % 2 + 48);
  29. }
  30. }

 4、下雨操作:

雨点 X , Y 坐标变换,重复实验得到数据 Y+=25; X+=1;

让雨点在窗口内坐标不断变化----从而实现雨点下落。

  1. void down_rain()
  2. {
  3. for (int i = 0; i < rain_num; i++)
  4. {
  5. hua_rain(i);
  6. rains[i].y += 25;
  7. rains[i].x += 1;
  8. if (rains[i].y > WIN_HEIGHT)
  9. {
  10. rains[i].x = rand() % WIN_WIDTH;
  11. rains[i].y = rand() % 50;
  12. }
  13. }
  14. }

5、更新窗口(场景描绘):

BeginBatchDraw():开始工作区----EndBatchDraw():结束工作区

GetTickCount是一种函数。GetTickCount返回 从操作系统启动所经过(elapsed)的毫秒数,它的是DWORD。

  1. void date_windows()
  2. {
  3. BeginBatchDraw();
  4. DWORD t1, t2;
  5. t1 = GetTickCount64();
  6. while (1)
  7. {
  8. t2 = GetTickCount64();
  9. if (t2 - t1 > 20)
  10. {
  11. cleardevice();
  12. down_rain();
  13. EndBatchDraw();
  14. t1 = t2;
  15. }
  16. }
  17. }

总结代码:

  1. int main()
  2. {
  3. srand(time(NULL));
  4. init_window();
  5. init_rain();
  6. date_windows();
  7. return 0;
  8. }

效果呈现:

 以下就是全部源码分享了:

  1. #include<stdio.h>
  2. #include<Windows.h>
  3. #include<graphics.h>
  4. #include<conio.h>
  5. #include<time.h>
  6. #define rain_num 100
  7. #define WIN_HEIGHT 640
  8. #define WIN_WIDTH 1080
  9. typedef struct Rain
  10. {
  11. int x;
  12. int y;
  13. }rain;
  14. rain rains[rain_num];
  15. void hua_rain(int n)
  16. {
  17. for (int i = 0; i < n; i++)
  18. {
  19. settextcolor(RGB(0, 255, 0));
  20. outtextxy(rains[n].x, rains[n].y, rand() % 2 + 48);
  21. }
  22. }
  23. void init_window()
  24. {
  25. system("title 黑客帝国-代码雨");
  26. initgraph(WIN_WIDTH, WIN_HEIGHT);
  27. }
  28. void down_rain()
  29. {
  30. for (int i = 0; i < rain_num; i++)
  31. {
  32. hua_rain(i);
  33. rains[i].y += 25;
  34. rains[i].x += 1;
  35. if (rains[i].y > WIN_HEIGHT)
  36. {
  37. rains[i].x = rand() % WIN_WIDTH;
  38. rains[i].y = rand() % 50;
  39. }
  40. }
  41. }
  42. void date_windows()
  43. {
  44. BeginBatchDraw();
  45. DWORD t1, t2;
  46. t1 = GetTickCount64();
  47. while (1)
  48. {
  49. t2 = GetTickCount64();
  50. if (t2 - t1 > 20)
  51. {
  52. cleardevice();
  53. down_rain();
  54. EndBatchDraw();
  55. t1 = t2;
  56. }
  57. }
  58. }
  59. void init_rain()
  60. {
  61. for (int i = 0; i < rain_num; i++)
  62. {
  63. rains[i].x = rand() % WIN_WIDTH;
  64. rains[i].y = rand() % WIN_HEIGHT;
  65. }
  66. }
  67. int main()
  68. {
  69. srand(time(NULL));
  70. init_window();
  71. init_rain();
  72. date_windows();
  73. return 0;
  74. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/85115
推荐阅读
相关标签
  

闽ICP备14008679号