1、预备知识

1.1 相关头文件

“#include”是c语言中用以申明所需调用的库函数或自定义函数的头文件路径及文件名。#include ""和#include <>存在区别,#include "" 当要调用某个函数时先在用户自已编写的文件中查找,如果找不到再到库文件里去找。而#include <>  是直接到库文件里去找,所以如果是调用自己写的函数的话就用#include ""这种形式,而调用标准库函数的话就用#include <> 这种形式,可以提高速度。

1.1.1 stdio.h

这个标准库的头文件定义了用于输入输出的宏和函数。从键盘上读取数据,将输入写入命令行上时,需要包含这个头文件。

1.1.2 stdlib.h

定义了许多一般用途的函数和宏。它包含将字符串转化为数值的函数,生成伪随机数的rand()函数,给数据动态分配和释放内存的函数,搜索和排序例程,整数算数函数,以及转换多字节和宽字节串的函数。

1.1.3 windows.h

系统头文件。

1.2 相关函数与结构

1.2.1 printf

1.2.2 循环结构

c语言有3种用于实现循环结构的语句,分别是for、while(先判断,后循环)和do-while(先循环,后判断)。使用格式如下:

(1)for循环

for(表达式1;表达式2;表达式3)
//表达式1为初值,表达式2为终止条件,表达式3为循环步长
{
//这里是循环体
}

(2)while循环

while(表达式)    //表达式即终止循环的条件
{
//这里是循环体
}

(3)do-while循环

do
{
//这里是循环体
}while(表达式)

1.2.3 system("cls")

这是VC环境下的清屏方法,隶属stdlib头文件库,属于调用格式为:

#include <stdlib.h>
system("cls");

1.2.4 Sleep函数

功 能: 执行挂起一段时间  

用 法: unsigned sleep(unsigned seconds);  

注意:  

在VC中使用带上头文件#include <windows.h>,在Linux下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include <unistd.h> ;

在VC中,Sleep中的第一个英文字符为大写的"S" ,在linux下不要大写,在标准C中是sleep, 不要大写,简单的说VC用Sleep, 别的一律使用sleep;

在VC中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000); 在Linux下,sleep()里面的单位是秒,而不是毫秒。

2、程序构建

2.1 显示静止的小球

// 在坐标(x,y)处输出一个小球
#include <stdio.h>
int main(void)
{
int i,j;
int x = ;
int y = ;
// 输出小球上面的空行
for(i=;i<x;i++)
printf("\n");
// 输出小球左边的空格
for (j=;j<y;j++)
printf(" ");
printf("o"); // 输出小球o
printf("\n");
}

2.2 通过改变小球坐标的变量,让小球下落

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i,j;
int x = ;
int y = ;
for (x=;x<;x++)
{
system("cls"); // 清屏函数
// 输出小球上面的空行
for(i=;i<x;i++)
printf("\n");
// 输出小球左边的空格
for (j=;j<y;j++)
printf(" ");
printf("o"); // 输出小球o
printf("\n");
}
}

这里利用了一个清屏函数system("cls");,只需要加上头文件#include <stdlib.h>即可。

2.3 实现小球的上下弹跳

在上面一步代码的基础上,增加记录速度的变量,小球的新位置=旧位置+速度。判断小球到达上下边界时,速度改变方向,即改变正负号。

#include <stdio.h>
#include <stdlib.h> void main()
{
int i,j;
int x = ;
int y = ; int hight = ;
int velocity = ; while ()
{
x=x+velocity;
system("cls"); // 清屏函数 // 输出小球前的空行
for(i=;i<x;i++)
printf("\n");
for (j=;j<y;j++)
printf(" ");
printf("o"); // 输出小球o
printf("\n"); //判断边界条件
if (x==hight)
velocity = -velocity;
if (x==)
{
velocity = -velocity;
}
}
}

2.4 实现小球斜跳

主要思路是增加x,y两个方向的速度控制变量,一个碰到上下边界后改变正负号,一个碰到左右边界后改变正负号。

#include <stdio.h>
#include <stdlib.h> void main()
{
int i,j;
int x = ;
int y = ; int velocity_x = ;
int velocity_y = ;
int left = ;
int right = ;
int top = ;
int bottom = ; while ()
{
x = x+velocity_x;
y = y+velocity_y; system("cls"); // 清屏函数
// 输出小球前的空行
for(i=;i<x;i++)
printf("\n");
for (j=;j<y;j++)
printf(" ");
printf("o"); // 输出小球o
printf("\n"); //判断边界条件
if ((x==top)||(x==bottom))
velocity_x = -velocity_x;
if ((y==left)||(y==right))
velocity_y = -velocity_y;
}
}

大家尽量养成良好的编码习惯,上面的边界坐标尽量不要在程序中写数字,可以用定义的变量或常量。这样程序可读性更好,后面也更容易调整。

2.5 控制小球弹跳速度

介绍一个Sleep函数,可以让游戏中间等待,从而可以控制小球弹跳的速度。使用这个函数,需要#include<windows.h>。

#include <stdio.h>
#include <stdlib.h>
#include<windows.h> void main()
{
int i,j;
int x = ;
int y = ; int velocity_x = ;
int velocity_y = ;
int left = ;
int right = ;
int top = ;
int bottom = ; while ()
{
x = x + velocity_x;
y = y + velocity_y; system("cls"); // 清屏函数
// 输出小球前的空行
for(i=;i<x;i++)
printf("\n");
for (j=;j<y;j++)
printf(" ");
printf("o"); // 输出小球o
printf("\n");
Sleep(); // 等待若干毫秒 if ((x==top)||(x==bottom))
velocity_x = -velocity_x;
if ((y==left)||(y==right))
velocity_y = -velocity_y;
}
}

3 参考文献

[1]陈萌.C语言编程思维[M].北京:清华大学出版社,2014.

[2]Ivor Horton.C语言入门经典[M].第5版.北京:清华大学出版社,2013.

c语言编程实例——小球跳动的更多相关文章

  1. linux下C语言多线程编程实例

    用一个实例.来学习linux下C语言多线程编程实例. 代码目的:通过创建两个线程来实现对一个数的递加.代码: //包含的头文件 #include <pthread.h> #include ...

  2. PHP多进程编程实例

    这篇文章主要介绍了PHP多进程编程实例,本文讲解的是在Linux下实现PHP多进程编程,需要的朋友可以参考下 羡慕火影忍者里鸣人的影分身么?没错,PHP程序是可以开动影分身的!想完成任务,又觉得一个进 ...

  3. 第二章 C语言编程实践

    上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...

  4. linux 操作系统下c语言编程入门

    2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理  ...

  5. Python进阶:函数式编程实例(附代码)

    Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...

  6. The MySQL C API 编程实例

    在网上找了一些MYSQL C API编程的文章,看了后认为还是写的不够充分,依据自己经验写了这篇<The MySQL C API 编程实例>,希望对须要调用到MYSQL的C的API的朋友有 ...

  7. linux下socket编程实例

    linux下socket编程实例一.基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.s ...

  8. Linux Kernel C语言编程范式

    介绍 不同的编程语言具有不同的抽象原语(如下),有的原语抽象层次低,有的原语抽象层次高.其中函数式.DSL是这几年十分热门的编程语言概念. 过程式抽象原语:变量 对象式抽象原语:对象 函数式抽象原语: ...

  9. shell及编程实例

    1.shell简介 1) 概念--命令解释器 2) 常见shell bash linux标准shell sh 早期shell,较简单 csh ksh tcsh unix  shell vi  /etc ...

随机推荐

  1. 个推 Spark实践教你绕过开发那些“坑”

    Spark作为一个开源数据处理框架,它在数据计算过程中把中间数据直接缓存到内存里,能大大提高处理速度,特别是复杂的迭代计算.Spark主要包括SparkSQL,SparkStreaming,Spark ...

  2. ModelBinder——ASP.NET MVC Model绑定的核心

    ModelBinder——ASP.NET MVC Model绑定的核心 Model的绑定体现在从当前请求提取相应的数据绑定到目标Action方法的参数.通过前面的介绍我们知道Action方法的参数通过 ...

  3. Object C和C#的差异

    从C#到Object C,循序渐进学习苹果开发(1)--准备开发账号和开发环境 本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台开发苹果开发的一系列感想和体验历程,本系列文章是在起步 ...

  4. SQLSERVER数据库学习总结七(视图,索引)

    --视图的主意点:不能和表的名称相同,如果某一列为函数,表达式,常量或者与来自多张表的列名相同,必须为列定义名称,不能在试图上创建索引 if exists(select 1 from sys.syso ...

  5. 定义 ICache 接口,以及实现默认的 ASP.NET 缓存机制

    本文定义 ICache 接口,以及实现默认的 ASP.NET 缓存机制(即通过 System.Web.Caching.Cache)来缓存,将来也可以通过扩展,替换默认实现. 下面直接贴代码了: ICa ...

  6. 由link()和symlink()谈到软链接与硬链接

    任何一个文件可以有多个目录项指向其i节点.创建一个向现存文件连接的方法是使用l i n k函数. #include <unistd.h> int link(const char * e x ...

  7. [转]unload dynamic library needs two dlclose() calls?

    src: http://stackoverflow.com/questions/8793099/unload-dynamic-library-needs-two-dlclose-calls Quest ...

  8. 关于C#中readonly

    关于C#中readonly的一点小研究 关于C#中readonly的一点小研究   可能园子里有不少文章已经说明了这个问题了,但是我在这里写这篇博客只是写写自己的一些体会,也权当是整理归纳,高手莫见笑 ...

  9. vs2015开发Windows服务

    工作已经很久,时隔这么长时间写这篇文章是给自己以后做参考.也不至于以后长时间不写Windows服务而忘记整个开发过程.windows服务开发,基础的就不说了,直接上过程. 1.新建windows服务项 ...

  10. Myeclipse 10 for mac 破解版下载安装及破解方法

    下载地址:http://pan.baidu.com/share/link?shareid=463687&uk=1798617416 解压下载好的压缩包Myeclipse 10 for mac+ ...