1.“仿真小球“(C语言基础)

下载安装图形库

在此不多赘述点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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值