再能实现小球的下落、斜着运动之后,这节我们来实现让小球实现碰墙自动改变方向。那么接着上回的代码大家想想应该如何调整代码
首先,考虑到小球碰到墙之后(这个墙就是窗口的边界),方向是不是要改变,类似光的反射一样,
大家注意观察和思考,当球碰到墙(边界)之后,这个球的方向改如何改变?
通过观察可以发现,当球碰撞底部之后,小球的x轴方向其实是没有变化的!而y轴方向变成的反方向!
继续想象,如果是碰到上顶呢?是一样的!
那么上下考虑之后,再考虑左右墙碰撞时候,类似的,小球的y轴方向是没有变化的,而x轴方向变成的反方向!
这个时候,思路基本就清晰了,按照这个思路,我们稍作修改,加一个if边界的判断,将原先的循环改为while死循环使得小球会不停的碰撞运动。
完整代码如下:
//弹球游戏 //www.dotcpp.com #include <graphics.h> // 引用图形库头文件 #include <conio.h> #define WIDTH 640 #define HIGH 480 #define R 10 int main() { int i; int Vx=5,Vy=5; int x=WIDTH/2,y=HIGH/2; //表示小球的圆心坐标 initgraph(WIDTH, HIGH); // 创建绘图窗口,大小为 640x480 像素 while(1) { //绘制小球图案 setfillcolor(GREEN); fillcircle(x,y,R); Sleep(50); //原位置擦除小球图案 setcolor(BLACK); setfillcolor(BLACK); fillcircle(x,y,R); x=x+Vx; y=y+Vy; if(x<=R || x>=WIDTH-R) Vx=-Vx; if(y<=R || y>=HIGH-R) Vy=-Vy; } getch(); // 按任意键继续 closegraph(); // 关闭绘图窗口 return 0; }
代码将原先固定的数值改成了变量,并增加了宏定义规范了代码,运行后效果如下图:
怎么样,是不是可以了?
请大家理解代码,并上机实验~
本文固定URL:https://www.dotcpp.com/course/1182