前面CodeBlocks的初步,已经写了一个球的程序,下面加入一个功能。即:让球的位置能够按照一定的时间周期打印出来,可能要涉及时间函数()。
提一个问题:怎么实现定时打印呢?
如果是while(1)里写球的所有动作,那么可以在while(1)里开始写一个软件延时,比如:for(t=0;t<xxx;t++);
最后在while(1)结尾处把t=0;
这就实现一个最基本的定时输出打印,但这样是一个无限运行的机制。
//***********************************************************
版本02
程序功能:实现一个球的随机运动
显示方式:实时打印球的坐标和速度
增加内容:软件延时代码
//***********************************************************
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
Int main()
{
//定义边框的宽
Int TableWidth = 100;
//定义边框的高
int TableHight = 100;
//定义球的尺寸
int BallSize = 10;
//定义球纵坐标的速度
Int ySpeed = 5;
//使用time(0)作为随机数种子
Srand((int) time(0));
//定义球横坐标的速度
Int xSpeed = 1+(int)(10.0*rand()/(RAND_MAX+1.0));
//定义球的横坐标
Int BallX = 1+(int)(20.0*rand()/(RAND_MAX+1.0));
//定义球的纵坐标
Int BallY = 1+(int)(20.0*rand()/(RAND_MAX+1.0));
Unsigned Int t;
While(1){
for(t=0;t<600000000;t++);//软件延时
If(BallX<0 ||BallX >= TableWidth - BallSize)
xSpeed =-xSpeed;
if(BallY<0 ||BallX >=TableHight - BallSize)
ySpeed = -ySpeed;
BallX += xSpeed;
BallY +=ySpeed;
Printf(“BallX is%d,BallY is %d”,Ballx ,BallY);
Printf(“xSpeed is%d,ySpeed is %d\n”,xSpeed,ySpeed);
Printf(“\n”);
t=0;
}
}
以上程序仔细看有不好的地方,这个地方就是:
xSpeed的取值是直接取的一个随机数,这样取值,可能一个明显的问题就是速度变化的幅度不大,而借鉴java的那个程序,是首先定义了一个双精度的比率:
// privatedouble xyRate = random.nextDouble() - 0.5;(java 代码)
// privateint xSpeed01 = (int)(ySpeed01*xyRate*2);
而random.nextDouble()的作用就是产生一个0.0-1.0之间的浮点随机数。所以,可以借鉴该思路进行修改
在《Linux函数库详解词典》 徐千洋编著一书中,
随机数函数
1、drand48
功能说明:产生一个正的浮点随机数
相关函数:rand.erand48,lrand48, nrand48, mrand48, jrand48, srand48
头文件 :#include<stdlib.h>
函数声明:double drand48(void);
函数说明:drand48()返回一个正的浮点随机数值,范围在0.0-1.0
返回值 :返回0.0-1.0之间的随机数值。
实例:
#include<stdlib.h>
Int main()
{
Int i;
for(i=0;i<10;i++)
{
Printf(“%f\n”,drand48());
}
}
//***********************************************************
版本03
程序功能:实现一个球的随机运动
显示方式:实时打印球的坐标和速度
增加内容:软件延时代码
修改说明:利用随机数函数创建一个双精度比率,来设置ySpeed用以控制小球的运动方向
//***********************************************************
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
Int main()
{
//定义边框的宽
Int TableWidth = 100;
//定义边框的高
int TableHight = 100;
//定义球的尺寸
int BallSize = 10;
//定义球纵坐标的速度
Int ySpeed = 5;
//使用time(0)作为随机数种子
Srand((int) time(0));
//定义球横坐标的速度
//这里用到了drand48()函数,用以产生一个正的浮点随机数
Int xSpeed = ySpeed*(drand48()-0.5)*2;
//定义球的横坐标
Int BallX = 1+(int)(20.0*rand()/(RAND_MAX+1.0));
//定义球的纵坐标
Int BallY = 1+(int)(20.0*rand()/(RAND_MAX+1.0));
Unsigned Int t;
While(1){
for(t=0;t<600000000;t++);//软件延时
If(BallX<0 ||BallX >= TableWidth - BallSize)
xSpeed =-xSpeed;
if(BallY<0 ||BallX >=TableHight - BallSize)
ySpeed = -ySpeed;
BallX += xSpeed;
BallY +=ySpeed;
Printf(“BallX is%d,BallY is %d”,Ballx ,BallY);
Printf(“xSpeed is%d,ySpeed is %d\n”,xSpeed,ySpeed);
Printf(“\n”);
t=0;
}
}