文章目录
下载安装图形库
在此不多赘述点EasyX链接
一、仿真“自由落体小球”
1.显示小球
(1)、显示小球(常量)
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
int main()
{
initgraph(800, 600); //开一个画布x轴800,y轴为600
fillcircle(400, 300, 100);//填充圆x坐标400,y坐标300,半径100
_getch();
return 0;
}
效果如下:
数字常量不方便阅读
(2)、显示小球(变量)
(1)
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
int main()
{
int 画布宽度 = 800;
int 画布高度 = 600;
initgraph(画布宽度, 画布高度); //开一个画布x轴800,y轴为600
fillcircle(400, 300, 100);//填充圆x坐标400,y坐标300,半径100
_getch();
return 0;
}
(2)
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
int main()
{
int 画布宽度 = 800;
int 画布高度 = 600;
int x = 400;
int y = 300;
int 半径 = 100;
initgraph(画布宽度, 画布高度); //开一个画布x轴800,y轴为600
fillcircle(x, y, 半径);//填充圆x坐标400,y坐标300,半径100
_getch();
return 0;
}
2.小球自动居中(运算符)
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
int main()
{
int 画布宽度 = 800;
int 画布高度 = 600;
int x = 画布宽度 / 2;
int y = 画布高度 / 2;
int 半径 = 100;
initgraph(画布宽度, 画布高度); //开一个画布x轴800,y轴为600
fillcircle(x, y, 半径);//填充圆x坐标400,y坐标300,半径100
_getch();
return 0;
}
效果图
4.小球下落(运算符)
每按下个键小球下落10(共十次)
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
int main()
{
int 画布宽度 = 800;
int 画布高度 = 600;
int x = 400;
int y = 300;
int 半径 = 50;
initgraph(画布宽度, 画布高度);
y = y + 10;
fillcircle(x, y, 半径);
_getch();
y = y + 10;
fillcircle(x, y, 半径);
_getch();
y = y + 10;
fillcircle(x, y, 半径);
_getch();
y = y + 10;
fillcircle(x, y, 半径);
_getch();
y = y + 10;
fillcircle(x, y, 半径);
_getch();
y = y + 10;
fillcircle(x, y, 半径);
_getch();
y = y + 10;
fillcircle(x, y, 半径);
_getch();
y = y + 10;
fillcircle(x, y, 半径);
_getch();
y = y + 10;
fillcircle(x, y, 半径);
_getch();
y = y + 10;
fillcircle(x, y, 半径);
_getch();
return 0;
}
按了六次之后的效果图
每按一个键之后生成一个新的小球(y+10之后的小球)
问题:小球重叠了
解决方案:cleardevice();//清除小球
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
int main()
{
int 画布宽度 = 800;
int 画布高度 = 600;
int x = 400;
int y = 300;
int 半径 = 50;
initgraph(画布宽度, 画布高度);
y = y + 10;
fillcircle(x, y, 半径);
cleardevice();//清除小球
_getch();
y = y + 10;
fillcircle(x, y, 半径);
_getch();
return 0;
}
5.小球下落(while循环)
(1)、添加速度(常量)
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
int main()
{
int 画布宽度 = 800;
int 画布高度 = 600;
int x = 400;
int y = 300;
int 半径 = 50;
initgraph(画布宽度, 画布高度);
while (1)//括号里为1(真)无限循环
{
y = y + 2;
cleardevice();//清除小球
fillcircle(x, y, 半径);
Sleep(30); //每30毫秒执行一次
}
return 0;
}
(2)、添加速度(变量)
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
int main()
{
int 画布宽度 = 800;
int 画布高度 = 600;
int x = 400;
int y = 300;
int 半径 = 50;
int 速度 = 2;
initgraph(画布宽度, 画布高度);
while (1)
{
y = y + 速度;
cleardevice();//清除小球
fillcircle(x, y, 半径);
Sleep(30); //每30毫秒执行一次
}
return 0;
}
6.小球落地反弹(if语句)
先建一个简单的数学模型
当
画布高度 - 半径>y
的时候 速度反转速度=-速度
代码如下:
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
int main()
{
int 画布宽度 = 800;
int 画布高度 = 600;
int x = 400;
int y = 300;
int 半径 = 50;
int 速度 = 2;
initgraph(画布宽度, 画布高度);
while (1)
{
y = y + 速度;
if (y > 画布高度 - 半径)
{
速度 = -速度;
}
cleardevice();//清除小球
fillcircle(x, y, 半径);
Sleep(30); //每30毫秒执行一次
}
return 0;
}
这样做有一个问题:小球会一直往上走
解决方案:
先做个数学模型
这样子就懂了,当
y<半径
的时候"反弹"(速度=-速度
);
代码如下
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
int main()
{
int 画布宽度 = 800;
int 画布高度 = 600;
int x = 400;
int y = 300;
int 半径 = 50;
int 速度 = 2;
initgraph(画布宽度, 画布高度);
while (1)
{
y = y + 速度;
if (y<半径||y > 画布高度 - 半径)
{
速度 = -速度;
}
cleardevice();//清除小球
fillcircle(x, y, 半径);
Sleep(30); //每30毫秒执行一次
}
return 0;
}
7.斜着跳的小球
()加上x速度,和y的速度)加上碰到画布高度和宽度的反弹判别式
接下来:看代码
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
int main()
{
int 画布宽度 = 800;
int 画布高度 = 600;
int x = 400;
int y = 300;
int 半径 = 50;
int x速度 = 2;//小球X轴的速度
int y速度 = 3;//小球Y轴的速度
initgraph(画布宽度, 画布高度);
while (1)//一直循环
{
//根据速度,更新小球的位置
x = x + x速度;
y = y + y速度;
//小球碰到左右边界,x速度反向
if (x <= 半径)
{
x速度 = -x速度;
}
if (x >= 画布宽度 - 半径)
{
x速度 = -x速度;
}
//小球碰到上下边界,y轴的速度反向
if (y <= 半径)
{
y速度 = -y速度;
}
if (y >= 画布高度 - 半径)
{
y速度 = -y速度;
}
cleardevice();//清除小球
fillcircle(x, y, 半径);//画小球
Sleep(30); //每30毫秒执行一次
}
return 0;
}