当前位置:   article > 正文

EasyX快速入门

easyx

目录

前言

正文

一、介绍与安装

二、简易绘图

三、简单动画

写在最后


前言

之前我们编写了 贪吃蛇,飞机游戏,虽然实现了较多的功能,但还是不太美观。学习了EasyX后,可以为美化贪吃蛇、飞机游戏做铺垫。

基础C语言的可视化与交互功能较弱,printf 输出效果太简单,没有绘图、显示图片等功能;只有键盘交互,没有鼠标交互。学习EasyX插件,快速上手简易绘图游戏的开发。


正文

一、介绍与安装

EasyX是一套简单、易用的图形交互库,以教育为目的的应用可以免费使用,最新版本可从官方网站下载安装,也可以在我上传的资源中安装。如何配置,可以在csdn搜索,有详细的教程。

easyx大致功能如下

  1. 创建新项目,
  2. 简单绘图,学习单步执行。
  3. 熟悉更多的绘图语句。
  4. 结合流程控制语句来绘图。
  5. 数学知识在绘图中的运用。
  6. 实现简单动画。
  7. 捕获按键,实现动画的简单控制。
  8. 用函数简化相同图案的制作,
  9. 绘图中的位运算。
  10. 用鼠标控制绘图/游戏程序。
  11. 随机函数.
  12. 数组。
  13. getimage/putimage/loadimag/saveimage/IMAGE的用法。
  14. 通过位运算实现颜色的分离与处理。
  15. 窗体句柄(Windows 编程入门)。
  16. 设备上下文句柄(Windows 编程入门2)。

二、简易绘图

  • EasyX提供了很多绘图函数,例如:
  1. line(x1,y1,x2,y2); //画直线,(x1,y1)、(x2,y2)为直线的两个端点的坐标
  2. circle(x, y, r); //画圆,圆心为(x.y),半径为r
  3. putpixel(x,y,c); //画点(x,y),像素的颜色为c
  4. solidrectangle(x1,yl,x2,y2); //画填充矩形,(x1,y1)、(x2,y2))为左上角、右下角的坐标,
  • Easyx也可以设定绘制颜色,例如:
  1. setlinecolor(c); //设置线条颜色
  2. setfillcolor(c); //设置线条颜色
  3. setbkcolor(c); //设置背景颜色
  4. setcolor(c); //设置前景颜色

常用的颜色常量有 BLACK、WHITE、BLUE、GREEN、RED、BROWN、YELLOW等。

也可以通过设定RGB三原色的值进行更多颜色的设定,形式为RGB(r,g,b)。其中r、g、b分别表示红色、绿色、蓝色,范围都是0~255,例如RGB(255,255,255)表示白色、RGB(255,0,0)表示纯红色、RGB(255,255,0)表示黄色。例如:

画两条红色浓度为200的直线可以写为:

  1. setlinecolor(RGB(200, 0,0));
  2. line(0,100,640100);
  3. line(0150640150);

下面利用循环语句画10条平行直线:

  1. #include<graphics.h>
  2. #include<conio.h>
  3. int main()
  4. {
  5. initgraph(640, 480);
  6. for(int y=0;y<=480;y=y+48)
  7. line(0,y,640,y);
  8. getch();
  9. closegraph();
  10. return 0;
  11. }

7a8276772f904ffab9f0018cbde4db2a.gif

 我们也可以将颜色变量循环改变,画出多条颜色渐变的直线,接着实现红色、蓝色交替画线

  1. #include<graphics.h>
  2. #include<conio.h>
  3. int main()
  4. {
  5. initgraph(640, 200);
  6. for (int y = 0; y <=250; y = y+5)
  7. {
  8. if(y/5%2==1)
  9. setcolor(RGB(0, 0, 255));
  10. else
  11. setcolor(RGB(255, 0, 0));
  12. line(0, y, 640, y);
  13. }
  14. _getch();
  15. closegraph();
  16. return 0;
  17. }

d2715942ac834c2c898c4dc6ff78adba.gif

 我们还可以尝试用EasyX绘制国际象棋棋盘

  1. #include<graphics.h>
  2. #include<conio.h>
  3. int main()
  4. {
  5. int step = 50;
  6. initgraph(500, 500);
  7. setbkcolor(YELLOW);
  8. cleardevice();//用背景色清空屏幕
  9. int i, j;
  10. for (i = 1; i <= 8; i++)
  11. {
  12. for (j = 1; j <= 8; j++)
  13. {
  14. if ((i + j) % 2 == 1)
  15. {
  16. setfillcolor(BLACK);
  17. solidrectangle(i * step, j * step, (i + 1) * step,(j+1)*step);
  18. }
  19. else
  20. {
  21. setfillcolor(WHITE);
  22. solidrectangle(i * step, j * step, (i + 1) * step, (j + 1) * step);
  23. }
  24. }
  25. }
  26. _getch();
  27. closegraph();
  28. return 0;
  29. }

491386dbfa05404c940343ca4f5004f3.gif


三、简单动画

和之前用printf 函数实现动画的思路一致,用EasyX实现动画一般需要绘制新图形,延时、清除旧图形3个步骤。首先实现小球向右移动的动画效果。由于画面默认背景为黑色,因此在原位置上绘制黑色的圆就会清除旧图形。

  1. #include <graphics.h>
  2. #include <conio.h>
  3. int main()
  4. {
  5. initgraph(640, 480);
  6. for (int x = 100; x < 540; x += 20)
  7. {
  8. // 绘制黄线、绿色填充的圆
  9. setcolor(YELLOW);
  10. setfillcolor(GREEN);
  11. fillcircle(x, 100, 20);//画圆,半径20
  12. // 延时
  13. Sleep(150);
  14. // 绘制黑线、黑色填充的圆
  15. setcolor(BLACK);
  16. setfillcolor(BLACK);
  17. fillcircle(x, 100, 20);
  18. }
  19. closegraph();
  20. return 0;
  21. }

910ce50b68d94f45b5eb5cb92dab95b5.gif


下面我们写一个反弹球代码

  1. #include <graphics.h>
  2. #include <conio.h>
  3. #define High 320 // 游戏画面尺寸
  4. #define Width 480
  5. int main()
  6. {
  7. float ball_x, ball_y; // 小球的坐标
  8. float ball_vx, ball_vy; // 小球的速度
  9. float radius; // 小球的半径
  10. initgraph(Width, High);
  11. ball_x = Width / 2;
  12. ball_y = High / 2;
  13. ball_vx = 1;
  14. ball_vy = 1;
  15. radius = 20;
  16. while (1)
  17. {
  18. // 绘制黑线、黑色填充的圆
  19. setcolor(BLACK);
  20. setfillcolor(BLACK);
  21. fillcircle(ball_x, ball_y, radius);
  22. // 更新小圆坐标
  23. ball_x = ball_x + ball_vx;
  24. ball_y = ball_y + ball_vy;
  25. if ((ball_x <= radius) || (ball_x >= Width - radius))
  26. ball_vx = -ball_vx;
  27. if ((ball_y <= radius) || (ball_y >= High - radius))
  28. ball_vy = -ball_vy;
  29. // 绘制黄线、绿色填充的圆
  30. setcolor(YELLOW);
  31. setfillcolor(GREEN);
  32. fillcircle(ball_x, ball_y, radius);
  33. // 延时
  34. Sleep(3);
  35. }
  36. closegraph();
  37. return 0;
  38. }

sleep()函数的延时越小,动画效果越细腻,但会出现明显的画面闪烁,这时需要借助批量绘图函数 BeginBatchDraw()、FlushBatchDraw()、EndBatchDraw()。

  1. BeginBatchDraw()用于开始批量绘图,执行后任何绘图操作都将暂时不输出到屏幕上,直到执行 FlushBatchDraw()或 EndBatchDraw()才将之前的绘图输出;
  2. FlushBatchDraw()用于执行未完成的绘制任务,执行批量绘制;
  3. EndBatchDraw()用于结束批量绘制,并执行未完成的绘制任务。以下为改进的反弹球动画的代码。
  1. #include <graphics.h>
  2. #include <conio.h>
  3. #define High 480 // 游戏画面尺寸
  4. #define Width 640
  5. int main()
  6. {
  7. float ball_x,ball_y; // 小球的坐标
  8. float ball_vx,ball_vy; // 小球的速度
  9. float radius; // 小球的半径
  10. initgraph(Width, High);
  11. ball_x = Width/2;
  12. ball_y = High/2;
  13. ball_vx = 1;
  14. ball_vy = 1;
  15. radius = 20;
  16. BeginBatchDraw();
  17. while (1)
  18. {
  19. // 绘制黑线、黑色填充的圆
  20. setcolor(BLACK);
  21. setfillcolor(BLACK);
  22. fillcircle(ball_x, ball_y, radius);
  23. // 更新小圆坐标
  24. ball_x = ball_x + ball_vx;
  25. ball_y = ball_y + ball_vy;
  26. if ((ball_x<=radius)||(ball_x>=Width-radius))
  27. ball_vx = -ball_vx;
  28. if ((ball_y<=radius)||(ball_y>=High-radius))
  29. ball_vy = -ball_vy;
  30. // 绘制黄线、绿色填充的圆
  31. setcolor(YELLOW);
  32. setfillcolor(GREEN);
  33. fillcircle(ball_x, ball_y, radius);
  34. FlushBatchDraw();
  35. // 延时
  36. Sleep(3);
  37. }
  38. EndBatchDraw();
  39. closegraph();
  40. return 0;
  41. }

写在最后

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/93997
推荐阅读