在Ubuntu环境下的CodeBlocks上进行气泡球序的初步和探讨。
要求:
1) 不需要图形界面(可预留接口,以后扩展);
2) 命令参数:界面大小,球的初始坐标,初始速度(大小和方向);
3) 支持—help;
4) 定时打印小球的状态,球的位置,速度,已碰撞次数等;
5) 更新文档(分工明确)。
由java开发程序可以先进行如下定义:
1) 边框的宽和高 TableWidth TableHight
2) 球的尺寸 BallSize
3) 球纵坐标的速度 ySpeed
4) Random()产生一个随机数
5) 利用这个随机数定义球的水平速度
6) 球的横坐标和纵坐标 BallX BallY
球的运动原理就是:坐标的数值加上一个数值,比如相应的速度值
BallY += ySpeed;
BallX +=xSpeed;
这样球就能够动起来,但需要给球添加一个动的条件,比如当球碰到边框时让球的竖直速度和水平速度取反。
关键在于随机数产生这个地方。
提出一个问题:C++怎么利用随机数来移动一个图片或绘制的球?
下面先来写一个简单的程序让rand函数或random函数产生随机数:
1、 产生固定的随机数
#include<stdlib.h>
#include<stdio.h>
Int main()
{
Int I,j;
For(i=0;i<10;i++){
J=1+(int)(10.0*rand()/(RAND_MAX+1.0));
Printf(“%d\n”,j);
}
}
Rand()函数会返回一个随机数值,范围在0-RAND_MAX之间,在调用这个函数前必须使用srand()设好随机数种子,否则rand()会自动设为1
返回值是0-RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647.
2、产生不固定的随机数
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
Int main()
{
IntI,j;
Srand((int)time(0)); //使用time(0)作为随机数种子
For(i=0;i<10;i++){
J=1+(int)(10.0*rand()/(RAND_MAX+1.0));
Printf(“%d ”,j)
}
}
版本01(一个球在定义边框里随机移动)
//实现一个球的随机移动
#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));
If(BallX<0 || BallX >= TableWidth - BallSize)
xSpeed =-xSpeed;
if(BallY<0 || BallX >=TableHight - BallSize)
ySpeed =-ySpeed;
BallX += xSpeed;
BallY +=ySpeed;
Printf(“The x of Ball is %d,The y of Ball is %d”,Ballx,BallY);
Printf(“\n”);
}