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 ...
随机推荐
- jsp解决kindeditor在线编辑器struts图片上传问题
1.下载 官网下载ckeditor,解压后去掉不需要的部分,仅需保留plugin,lang,theme文件夹,这三个文件夹中用不到的东西可以删除, 比如lang文件下存放所有语言文件js,仅仅 保留e ...
- 10.26最后的模拟DAY2 数字对[暴力]
数字对 [题目描述] 小H是个善于思考的学生,现在她又在思考一个有关序列的问题. 她的面前浮现出一个长度为n的序列{ai},她想找出一段区间[L, R](1 <= L <= R <= ...
- IL代码完结篇
读懂IL代码就这么简单(三)完结篇 一 前言 写了两篇关于IL指令相关的文章,分别把值类型与引用类型在 堆与栈上的操作区别详细的写了一遍这第三篇也是最后一篇,之所以到第三篇就结束了,是因为以我现在 ...
- [原]Escape From the iOS Sanbox on Jailbreak Device
just my thinking, 3 ways to escape from sandbox on jailbreak device, to do file copying or execute s ...
- BroadcastReceiver基础总结
BroadcastReceiver基础总结 BroadcastReceiver是Android四大组件之一,主要负责接收系统或其他程序发出的广播,在开发中,通常用做事件驱动的起源,比如开机就要开启一个 ...
- ios缩放图片
http://blog.csdn.net/yanfangjin/article/details/7456681
- 基于Hadoop开发网络云盘系统客户端界面设计初稿
基于Hadoop开发网络云盘系统客户端界面设计初稿 前言: 本文是<基于Hadoop开发网络云盘系统架构设计方案>的第二篇,针对界面原型原本考虑有两个方案:1.类windows模式,文件夹 ...
- CVPR 2013
CVPR2013大部分文章都已经公开了,大家可以通过下面的网址访问: http://www.cv-foundation.org/openaccess/CVPR2013.py# 还有一篇根据CVPR20 ...
- java并发之固定对象与实例
java并发之固定对象与实例 Immutable Objects An object is considered immutable if its state cannot change after ...
- 使用WPF教你一步一步实现连连看
使用WPF教你一步一步实现连连看(一) 第一步: 问题,怎样动态的建立一个10*10的grid(布局) for (int i = 0; i < 10; i++){ RowDefinition r ...