朗朗空间

我知道并不是 所有鸟儿都飞翔

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  16 Posts :: 0 Stories :: 6 Comments :: 0 Trackbacks

常用链接

留言簿(1)

我参与的团队

搜索

  •  

最新随笔

最新评论

阅读排行榜

评论排行榜

书上的一个练习!

// date 2008.5.25
// author fanghua.nie
// just do a exercise in the C How To Program
 
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define START_POS 1
#define RACE_DISTANCE  70  // the distances of the race
 
#define TORTOISE 'T'    // the symbol that is printed  in the screen as a tortoise
#define RABBIT 'R'      // the symbol that is printed in the screen as a rabbit
#define ROAD '.'        // the symbol that is printed in the screen as a mile road.
#define COMPLETE_ROAD '+'
 
// define the console color
#define LIGHT_GREEN FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define LIGHT_YELLOW FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define LIGHT_RED FOREGROUND_RED | FOREGROUND_INTENSITY
// define BOOL datatype
typedef int BOOL;
#define TRUE 1   
#define FALSE 0
 
 
 
//get the speed of the tortoise or the rabbit
int GetTortoiseSpeed ( int percent, int * speed );
int GetRabbitSpeed ( int percent, int * speed );
 
//output the result in console interface
void PrintRaceResult ( int tortoisePosition, int rabbitPosition );
 
int main (void)
{
    
int percent; // save the percent as a integer that less 10
                
// 1  10%,   2 20%, 9 90%, 10 100% etc.
    
int speed; // save the speed of the rabbit or the tortoise
    
    
int tortoisePosition = START_POS;
    
int rabbitPosition = START_POS;
 
    
srand ( time(NULL) );
 
    
printf ("     The game began:\n");
    
//show the tortoise and the rabbit
    
PrintRaceResult ( tortoisePosition, rabbitPosition );
 
    
while ( rabbitPosition < RACE_DISTANCE && tortoisePosition < RACE_DISTANCE )
    
{
        
//compute next speed of the tortoise
        
percent = rand()%10 + 1;
 
        
if ( !GetTortoiseSpeed ( percent, &speed ) ) //get the speed of the tortoise
        
{
            
puts ("Error!\n");
            
exit (ERROR);
        
}
        
        
// move the tortoise to next position
        
tortoisePosition = tortoisePosition + speed;
 
        
if ( tortoisePosition < 0 )
            
tortoisePosition = START_POS;
        
else if ( tortoisePosition > RACE_DISTANCE )
            
tortoisePosition = RACE_DISTANCE;
        
        
//compute next rate of rabbit speed
        
percent = rand()%10 + 1; //get the percent
 
        
if ( !GetRabbitSpeed (percent, &speed) ) //get the speed of rabbit
        
{
            
puts ("Error!\n");
            
exit (ERROR);
        
}
        
        
//move the rabbit
        
rabbitPosition = rabbitPosition + speed;
        
        
//check the position whether is right or not, then correct it.
        
if ( rabbitPosition < 0 )
            
rabbitPosition = START_POS;
        
else if ( rabbitPosition > RACE_DISTANCE )
            
rabbitPosition = RACE_DISTANCE;
        
        
//show the tortoise and the rabbit
        
PrintRaceResult ( tortoisePosition, rabbitPosition );
 
    
}
    
    
//print the race result
    
if ( rabbitPosition > tortoisePosition )
    
{
        
printf ("Rabbit Wins!\n");
    
}
    
else if ( rabbitPosition == tortoisePosition )
    
{
        
printf ("It's a tie\n");
    
}
    
else
    
{
        
printf ("Tortoise Wins!\n");
    
}
 
    
return 0;
}
 
BOOL GetTortoiseSpeed ( int percent, int * speed )
{
    
if ( percent >= 1 && percent <= 5 )
    
{
        
(*speed) = 3;
        
return TRUE;
    
}
    
else if ( percent >= 6 && percent <= 7 )
    
{
        
(*speed) = -6;
        
return TRUE;
    
}
    
else if ( percent >= 8 && percent <= 10 )
    
{
        
(*speed) = 1;
        
return TRUE;
    
}
    
else
    
{
        
return FALSE;
    
}
}
 
BOOL GetRabbitSpeed ( int percent, int * speed )
{
    
if ( percent >= 1 && percent <= 2 )
    
{
        
(*speed) = 0;
        
return TRUE;
    
}
    
else if ( percent >= 3 && percent <= 4 )
    
{
        
(*speed) = 9;
        
return TRUE;
    
}
    
else if ( percent == 5 )
    
{
        
(*speed) = -12;
        
return TRUE;
    
}
    
else if ( percent >= 6 && percent <= 8 )
    
{
        
(*speed) = 1;
        
return TRUE;
    
}
    
else if ( percent >= 9 && percent <= 10 )
    
{
        
(*speed) = -2;
        
return TRUE;
    
}
    
else
    
{
        
return FALSE;
    
}
}
 
void PrintRaceResult ( int tortoisePosition, int rabbitPosition )
{
    
int tcount;
    
int rcount;
 
    
HANDLE hOut;
    
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    
printf ("\n     ");
    
for ( tcount = START_POS; tcount <= RACE_DISTANCE; tcount++ )
    
{
 
        
if ( tcount == tortoisePosition )
        
{
            
SetConsoleTextAttribute (hOut, LIGHT_GREEN );
            
putchar (TORTOISE);
        
}
        
else if ( tcount < tortoisePosition )
        
{
            
SetConsoleTextAttribute (hOut, LIGHT_GREEN );
            
putchar (COMPLETE_ROAD);
        
}
        
else
        
{
            
SetConsoleTextAttribute (hOut, LIGHT_RED );
            
putchar (ROAD);
        
}
    
}
    
printf ("\n     ");
 
    
for ( rcount = START_POS; rcount <= RACE_DISTANCE; rcount++ )
    
{
        
if ( rcount == rabbitPosition )
        
{
            
SetConsoleTextAttribute ( hOut, LIGHT_GREEN );
            
putchar (RABBIT);
        
}
        
else if ( rcount < rabbitPosition )
        
{
            
SetConsoleTextAttribute (hOut, LIGHT_GREEN );
            
putchar (COMPLETE_ROAD);
        
}
        
else
        
{
            
SetConsoleTextAttribute ( hOut, LIGHT_YELLOW );
            
putchar (ROAD);
        
}
    
}
    
printf ("\n\n");
 
}
posted on 2008-05-25 13:56 聂元朗 阅读(372) 评论(1)  编辑 收藏 引用 所属分类: C语言学习笔记

Feedback

# re: 书上的练习-随机数-龟兔赛跑[未登录] 2008-05-27 13:54 冷月
太强了!  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理