Ubuntu下codeblocks的气泡球程序(一)

来源:互联网 发布:淘宝首页psd模板下载 编辑:程序博客网 时间:2024/05/22 10:35

前面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函数库详解词典》 徐千洋编著一书中,

随机数函数

1drand48

功能说明:产生一个正的浮点随机数

相关函数: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;

}

}

 

0 0
原创粉丝点击