当前位置: 首页 > news >正文

Easyx使用(番外篇)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们设计了一个程序,就是移动的小球。这个小球可以上下、左右移动。如果是碰到左边,就会向右弹回来;如果碰到右边,就会向左弹回来,上下也是这样。这个小球虽然看上去好玩,但是没有交互性,其实可以以此为基础做成一个小游戏。

1、游戏改进

        如果需要改进为游戏,那么需要在下面添加一个横条,这个横条可以左右移动。这样小球快落到底部的时候,就可以用横条接住这个小球,让小球弹回去。如果小球不小心,没有接住,那么游戏结束。

2、设置状态

        按照游戏的规则,这里需要增加一个状态。一个是正常运行的状态,一个是结束的状态。结束的时候,可以做的比较简单一点,即显示游戏结束。

			// check whether ball already reached groundif ((ball_y + RADIUS) >= 480){state = 1;continue;}

        如果state为1,代表游戏结束,

		else if (state == 1){outtextxy(280, 220, "Game Over!!!");}

3、添加横条

        为了防止小球落下,这里需要添加一个横条,其实就是一个长方形,

			// draw rectanglesetfillcolor(BLUE);solidrectangle(bar_x, bar_y, bar_x + 100, bar_y + 10);

        横条本身是需要左右移动的,那么这部分就需要引入按键事件。另外,如果按键按下去,我们是希望事件本身可以一直被触发,那么就可以换种其他的写法,

			// check press keyboard continuously, adjust x valueif (GetAsyncKeyState(VK_LEFT) & 0x8000){bar_x -= SPEED;}if (GetAsyncKeyState(VK_RIGHT) & 0x8000) {bar_x += SPEED;}if (bar_x < 0){bar_x = 0;}else if (bar_x > (640 - 100)){bar_x = 640 - 100;}

4、更新小球的位置

        小球的更新主要就是x和y的更新,所以这部分代码其实和之前是一样的。需要判断x有没有超出范围、y有没有超出范围。唯一需要注意的,就是判断下小球下落的时候,有没有落在横条之上。落在横条上面的话,就可以让小球弹回去,如果不是,就让小球继续往下坠落,直到出错为止。

			// collision check, very importantif ((((ball_x - RADIUS) >= bar_x && (ball_x - RADIUS) <= (bar_x + 100)) || ((ball_x + RADIUS) >= bar_x && (ball_x + RADIUS) <= (bar_x + 100))) && \(ball_y + RADIUS) >= 400 && (ball_y + RADIUS) < 410){direction_y = 1;}

        接不到,就会结束程序,

5、测试和验证

        本身代码的内容不复杂,只需要在原来小球的code之上,稍作修改即可。有兴趣的同学可以参考下这个完整代码。很多的工具和软件,本身不复杂,几百行或者1~2千行代码,就可以解决大问题。

#define _CRT_SECURE_NO_WARNINGS
#include <graphics.h>
#include <conio.h>
#include <stdio.h>#define WIDTH  640
#define HEIGHT 480
#define RADIUS 20
#define START_X 100
#define START_Y 100	
#define SPEED 8// main functionint main()
{int bar_x = 10; // position of rectangleint bar_y = 400;int ball_x = START_X; // position of ballint ball_y = START_Y;int direction_x = 0; // direction of ballint direction_y = 0;int state = 0; // game state// init graph hereinitgraph(WIDTH, HEIGHT);// start batch draw BeginBatchDraw();while (1){cleardevice();if (state == 0){// check whether ball already reached groundif ((ball_y + RADIUS) >= 480){state = 1;continue;}// update ball_xif (ball_x <= RADIUS){direction_x = 1;}if (ball_x >= (640- RADIUS)){direction_x = 0;}if (direction_x == 0){ball_x -= SPEED;}else{ball_x += SPEED;}// collision check, very importantif ((((ball_x - RADIUS) >= bar_x && (ball_x - RADIUS) <= (bar_x + 100)) || ((ball_x + RADIUS) >= bar_x && (ball_x + RADIUS) <= (bar_x + 100))) && \(ball_y + RADIUS) >= 400 && (ball_y + RADIUS) < 410){direction_y = 1;}// update ball_yif (ball_y <= RADIUS){direction_y = 0;}if (direction_y == 0){ball_y += SPEED;}else{ball_y -= SPEED;}// draw ballsetfillcolor(RED);solidcircle(ball_x, ball_y, RADIUS);// check press keyboard continuously, adjust x valueif (GetAsyncKeyState(VK_LEFT) & 0x8000){bar_x -= SPEED;}if (GetAsyncKeyState(VK_RIGHT) & 0x8000) {bar_x += SPEED;}if (bar_x < 0){bar_x = 0;}else if (bar_x > (640 - 100)){bar_x = 640 - 100;}// draw rectanglesetfillcolor(BLUE);solidrectangle(bar_x, bar_y, bar_x + 100, bar_y + 10);}else if (state == 1){outtextxy(280, 220, "Game Over!!!");}FlushBatchDraw();Sleep(50);}// ready to close graphEndBatchDraw();closegraph();return 0;
}

http://www.dtcms.com/a/446714.html

相关文章:

  • 【LaTeX】 10 LaTeX 数学公式笔记
  • 早熟收敛(Premature Convergence):遗传算法中的局部最优陷阱
  • 设计网站平台风格网站扫码怎么做的
  • 【Redis】免费Redis图形化客户端全攻略
  • Socket网络编程(1)——Echo Server
  • 怎么自己做企业网站建网站 京公网安
  • python如何把图片二值化
  • 网站建设课程设计目的和内容泰州专业网站建设公司
  • ClaudeCode真经第五章:最佳实践与高效工作流
  • Python脚本shebang写法推荐
  • 如何使用Python实现本地缓存
  • 建设自己的企业网站需要什么外贸建站哪个好
  • 电视直播网站怎么做wp商城
  • CMakeLists.txt用法备忘
  • 【文献笔记】AAAI 2018 | DGCNN
  • 网站建设费可以计业务费吗电商网站系统
  • vue2.0网站开发广东装修公司排名前十强
  • docker入门(保姆级)
  • 微表单网站大丰有没有做网站
  • 【打造你的全栈 AI 中控台】一文拆解 Open WebUI:从多模型聚合、RAG 引擎到未来 Agent 化的演进密码
  • 网站建设的基本话术天津软件设计公司
  • Maven多模块项目MyMetaObjectHandler自动填充日期未生效
  • 自己做网站教学视频网站为什么要备案
  • 大模型学习周报十六
  • 网站建设时间规划出入东莞最新通知今天
  • 彩票网站建设柏镇江网友之家
  • ESP32-S3入门第九天:摄像头入门与应用
  • 泰宁县建设局网站泰达人才网招聘网
  • 桂林网站推广深圳辰硕网站优化
  • 内网 渗透