




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C语言实现简单弹跳小球本文实例为大家分享了C语言实现简单弹跳小球的具体代码,供大家参考,具体内容如下
本节利用printf函数实现一个在屏幕上弹跳的小球,内容简单容易入门,这也是以后我们在设计更多游戏中可能用到的东西。
绘制静止的小球
我们将以如图坐标系进行游戏,即以窗口左上角为原点。
我们希望在坐标(x,y)处显示静止的小球:
#includestdio.h
intmain(){
inti,j;//这两个量是循环中要使用的,一定先声明
intx=5;
inty=10;
//输出小球上方空行【x坐标】
for(i=0;ii++)
printf("\n");
//输出小球左边的空格【y坐标】
for(j=0;jj++)
printf("");
printf("o");
printf("\n");
return0;
}
随后我们可以将此文件命名为ball.c
再使用GCC编译:
gccball.c-oball.out
可以直接用cc来代替gcc
-oball.out表示输出文件为ball.out
当然可以不写这些,输出会成为a.out
如果是Windows系统,会输出exe文件
这里是我编译成功的结果:
里面的CGame.c是源文件,而那个绿油油的ball.out就是编译输出的文件。
然后运行它就可以了。
小球下落
如何让小球下落?根据我们之前规定的坐标系,可以知道只需让小球x坐标不断增加即可。但我们同时不想让每个x坐标上都留着原来的小球,所以需要使用清屏函数system(cls)
注意要包含头文件stdlib.h
#includestdio.h
#includestdlib.h
intmain(){
inti,j;
intx=1;
inty=10;
for(x=1;xx++)
{
system("cls");//每次循环先清屏
//输出小球上方空行【x坐标】
for(i=0;ii++)
printf("\n");
//输出小球左边的空格【y坐标】
for(j=0;jj++)
printf("");
printf("o");
printf("\n");
}
return0;
}
同样我们编译、运行。
上下弹跳的小球
接下来,我们要在上一步代码的基础上增加一个记录小球速度的变量velocity从而把小球的下落从简单的循环改为小球坐标x=x+velocity,当速度为正值时小球下落(x坐标增加),反之小球上升(x坐标减小)。
#includestdio.h
#includestdlib.h
intmain(){
inti,j;//这两个量是循环中要使用的,一定先声明
intx=5;
inty=10;
intheight=20;//边界高度,到达边界时改变方向
intvelocity=1;
while(1){
x=x+velocity;
system("cls");//每次循环先清屏
//输出小球上方空行【x坐标】
for(i=0;ii++)
printf("\n");
//输出小球左边的空格【y坐标】
for(j=0;jj++)
printf("");
printf("o");
printf("\n");
if(x==height)
//到达下边界
velocity=-velocity;//下落改为上升
if(X==0)
//到达上边界
velocity=-velocity;//上升改为下落
}
return0;
}
注意这里是个死循环,小球不断在x=0到x=20中间上下弹跳,并且保持恒定速度。
斜方向弹跳
既然已经实现了上下弹跳,那么如何实现斜方向弹跳呢?
这只是很简单的速度合成而已,我们上一步已经使用velocity来表示小球在x方向的速度了,那么我们只要再加一个y方向的速度即可。
用什么来表示呢?speed
一定注意,为了确保代码可读性,也就是说让别人好接手的情况下,注释是一方面,变量命名也是很重要的一方面。
我们可以使用velocity_x表示x方向速度,用velocity_y表示y方向速度。
那么速度控制就会变成:到达上、下边界改变x速度(即velocity_x的符号),到达左、右边界改变y速度(即velocity_y的符号)。
#includestdio.h
#includestdlib.h
intmain(){
inti,j;
intx=1;
inty=5;
intvelocity_x=1;
intvelocity_y=1;
intleft=0;//左边界坐标
intright=20;//右边界坐标
inttop=0;//上边界坐标
intbottom=10;//下边界坐标
while(1)
{
x=x+velocity_x;
y=y+velocity_y;
system("cls");//每次循环先清屏
//输出小球上方空行【x坐标】
for(i=0;ii++)
printf("\n");
//输出小球左边的空格【y坐标】
for(j=0;jj++)
printf("");
printf("o");
printf("\n");
if((x==top)||(x==bottom))
velocity_x=-velocity_x;
if((y==left)||(y==right))
velocity_y=-velocity_y;
}
return0
}
然后你就可以得到一个十分鬼畜(事实如此)的小球弹跳动画了。
控制小球弹跳速度
我们刚才说过,编译之后运行我们会得到一个十分鬼畜的小球弹跳动画,那么为了减缓这个动画的刷新速度(至少不会快到抽象),我们将使用sleep函数来在每个循环建立一个暂停机制。
sleep(50);//表示到达此处程序暂停50ms
小结
完整代码:
#includestdio.h
#includestdlib.h
intmain(){
inti,j;
intx=1;
inty=5;
intvelocity_x=1;
intvelocity_y=1;
intleft=0;//左边界坐标
intright=20;//右边界坐标
inttop=0;//上边界坐标
intbottom=10;//下边界坐标
while(1)
{
x=x+velocity_x;
y=y+velocity_y;
system("cls");//每次循环先清屏
//输出小球上方空行【x坐标】
for(i=0;ii++)
printf("\n");
//输出小球左边的空格【y坐标】
for(j=0;jj++)
printf("");
printf("o");
printf("\n");
sleep(50);
//到达此处程序暂停50ms
if((x==top)||(x==bottom))
velocity_x=-velocity_x;
if((y==left)||(y==right))
velocity_y=-vel
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水利水电项目管理技巧试题及答案
- 行政管理经济法评估标准试题及答案
- 2025牲畜买卖合同范本版
- 工程经济的文献研究回顾试题及答案
- 2025年工程项目管理模拟试题及答案攻略
- 遗产继承动产管理合同(2篇)
- 2025租赁合同补充协议书格式
- 2024年梅州市蕉岭县专场招聘教师真题
- 经济法概论真题与模拟试题及答案
- 2024年水利水电工程项目招投标与试题及答案
- DL∕T 995-2016 继电保护和电网安全自动装置检验规程
- DL∕T 771-2014 发电厂水处理用离子交换树脂选用导则
- 农村房修建合同范本
- JT-T-1230-2018机动车发动机冷却液无机阴离子测定法离子色谱法
- GB/T 2039-2024金属材料单轴拉伸蠕变试验方法
- DL-T684-2012大型发电机变压器继电保护整定计算导则
- 跨界产品研发与实战智慧树知到期末考试答案章节答案2024年深圳职业技术大学
- 任务三 撰写直播脚本-活动2 商品直播脚本
- 艺术中国智慧树知到期末考试答案2024年
- 提高卧床患者踝泵运动的执行率
- JGJ7-91网架结构设计与施工规程
评论
0/150
提交评论