c语言编程实例——小球跳动
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语言编程实例——小球跳动的更多相关文章
- linux下C语言多线程编程实例
用一个实例.来学习linux下C语言多线程编程实例. 代码目的:通过创建两个线程来实现对一个数的递加.代码: //包含的头文件 #include <pthread.h> #include ...
- PHP多进程编程实例
这篇文章主要介绍了PHP多进程编程实例,本文讲解的是在Linux下实现PHP多进程编程,需要的朋友可以参考下 羡慕火影忍者里鸣人的影分身么?没错,PHP程序是可以开动影分身的!想完成任务,又觉得一个进 ...
- 第二章 C语言编程实践
上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...
- linux 操作系统下c语言编程入门
2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 ...
- Python进阶:函数式编程实例(附代码)
Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...
- The MySQL C API 编程实例
在网上找了一些MYSQL C API编程的文章,看了后认为还是写的不够充分,依据自己经验写了这篇<The MySQL C API 编程实例>,希望对须要调用到MYSQL的C的API的朋友有 ...
- linux下socket编程实例
linux下socket编程实例一.基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.s ...
- Linux Kernel C语言编程范式
介绍 不同的编程语言具有不同的抽象原语(如下),有的原语抽象层次低,有的原语抽象层次高.其中函数式.DSL是这几年十分热门的编程语言概念. 过程式抽象原语:变量 对象式抽象原语:对象 函数式抽象原语: ...
- shell及编程实例
1.shell简介 1) 概念--命令解释器 2) 常见shell bash linux标准shell sh 早期shell,较简单 csh ksh tcsh unix shell vi /etc ...
随机推荐
- poj2488骑士之旅
题目大意:国际象棋里面的马,有那么8种跳法,然后题目给出一个棋盘的大小p*q, 求有没有路线可以使得这个马能把整个棋盘的格全部走一遍,有的话按照字典序将第一条路线打印出来. 注意:国际象棋是行是数字, ...
- TOGAF架构能力框架之架构委员会和架构合规性
TOGAF架构能力框架之架构委员会和架构合规性 3. 架构委员会 正如前面所说,一个用来对架构治理策略的实现进行监督的跨组织的架构委员会是架构治理策略成功的主要要素之一.架构委员会应该能够代表所有主要 ...
- 如何理解signal函数声明
Signal函数用起来其实很简单,但是回头看看他的声明,相信会有很多人表示费解.自己也在这个问题中纠结了好几年了,今天终于弄明白,很是兴奋,一起分享一下. 先看函数原型:void (*signal(i ...
- 自用类库整理之SqlHelper和MySqlHelper
自用类库整理之SqlHelper和MySqlHelper 自用的SQLHelper和MySqlHelper,除一些通用方法外,封装了一些很实用的批量操作方法,简单介绍下 SqlHelper Execu ...
- js的onclick和jquery的bind事件执行先后顺序
近期在项目中为每一个ajax触发按钮写正在加载的效果,用的是bootstarp 代码如下 $(function(){ $('.btn').bind('click',function(e){ var $ ...
- WP自定义字体
IOS7的数字真的很好看啊,于是想放在自己的应用中.在网上找了下,发现这个字体叫HelveticaNeueLTPro-UltLt,于是随便在某个字体网站下了这个字体.拖到项目里换字体,但是,悲剧开始了 ...
- C# 代理应用 - Cachable
C# 代理应用 - Cachable 放心,这次不是说设计模式中的代理模式,说的是C#的RealProxy的用法,主要用于:通过给class贴标签,让class做更多的工作,比如判断是否存在缓存,有则 ...
- openssh6.7.deb download packed for debian7/ubuntu12.04 amd64
openssh the openssh-server on debian7/ubuntu12.04 is too old and out of date. so now we replace and ...
- python alembic which comes from SQLalchemy
alembic it's tutorial: http://alembic.readthedocs.org/en/latest/tutorial.html
- python实现基于CGI的Web应用
python实现基于CGI的Web应用 本文用一个“网上书店”的web应用示例,简要介绍如何用Python实现基于CGI标准的Web应用,介绍python的cgi模块.cigtb模块对编写CGI脚本提 ...