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. JS事件调试

    JS事件调试 - 查找HTML元素绑定的事件以及绑定代码所在位置   日常的网页开发调试工作中,经常需要知道指定的某个网页元素绑定了哪些事件以及绑定代码的位置,下面介绍三种用来跟踪页面中的事件的方法. ...

  2. 【Oracle】-【插入读取顺序】-插入读取之间的顺序关系

    Oracle插入记录的顺序是否是读取的顺序? 通过一个简单的实验验证: SQL> create table t ( x int, a char(2000) default 'x', b char ...

  3. DOM(二) 判断节点包含关系

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. 浅谈DevExpress<二>:设计一个完整界面(1)

    昨天谈了界面的换肤问题,今天拿一个简单的界面来介绍一下怎么设计一个五脏俱全的界面,总体效果如下图(种类的图片随便找的^^):

  5. Model Binding To A List

    [文章来源see here] Using the DefaultModelBinder in ASP.NET MVC, you can bind submitted form values to ar ...

  6. Private和Protected方法

    .NET中如何测试Private和Protected方法   TDD是1)写测试2)写通过这些测试的代码,3)然后重构的实践.在,NET社区中, 这个概念逐渐变得非常流行,这归功于它所增加的质量保证. ...

  7. DSP TMS320C6000基础学习(4)—— cmd文件分析

    DSP中的CMD文件是链接命令文件(Linker Command File),以.cmd为后缀. 在分析cmd文件之前,必需先了解 (1)DSP具体芯片的内存映射(Memory Map) (2)知道点 ...

  8. 讲讲Linq to SQL映射(基础篇)

    讲讲Linq to SQL映射(基础篇) 这篇主要讲Linq to  SQL基于属性的映射.即映射数据库,映射表,映射列,映射关系,映射存储过程, 映射函数.然而创建这种映射有三种方法,他们分别是OR ...

  9. svn签出单个文件

    ) { return new string[]{ string.Format("cd /d \"{0}\"",System.IO.Path.GetDirecto ...

  10. web.xml加载过程

    web.xml加载过程:1 启动WEB项目的时候,容器(如:Tomcat)会读他的配置文件web.xml读两个节点  <listener></listener>和<con ...