求助:帮忙把C++改成c语言,谢谢
#include <stdio.h>#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
#include <winnt.h>
#define ROW 24 //屏幕的行数
#define COL 81 //屏幕的列数
#define REAL 100
#define NUM 10 //每次下落的流星颗数
#define SPEED 4 //流星下落的最大速度
/*
*******************************************************************************************
* FUNCTION PROTOTYPES
*******************************************************************************************
*/
int random(int num); //返回0--num之间的随机数
static void setSky(); //描绘天空、地面
static void display(); //刷屏
int check_last_row(); //判断是否到底最后一层#号处
void word_n_down(); //n颗流星下落控制
int word_one_down(int begin,int position,int speed,int word,int *word_end); //1颗流星下落控制
void gotoxy(int x,int y);
/*
*******************************************************************************************
* VARIABLES
*******************************************************************************************
*/
char sky_ground[REAL][COL];
int test = 0;
//int word1_end = 0;
//int word2_end = 0;
int cycle_end = 0;
int word_end[NUM];
int list = 0;
int begin[NUM];
int position[NUM];
int word[NUM];
int speed[NUM];
/*
*******************************************************************************************
* main
*******************************************************************************************
*/
int main()
{
int end_flag = 0;
time_t t;
srand((unsigned) time(&t)); //使得每次运行产生的随机数起始点都不相同
setSky();
// display();
while(!(end_flag = check_last_row()))//判断程序是否结束
{
for(int a=0;a<NUM;a++)
word_end[a] = 0;
list = 0;
cycle_end = 0;
word_n_down();
}
system("pause");
return 0;
}
/*
*******************************************************************************************
* setSky
*******************************************************************************************
*/
static void setSky()
{
for(int b=0;b<REAL;b++)
{
for(int c=0;c<COL-1;c++)
{
sky_ground[b][c] = ' ';
}
sky_ground[b][COL-1] = '\0';
}
for(int d=ROW-5;d<ROW;d++)
{
for(int e=0;e<COL-1;e++)
{
sky_ground[d][e] = '#';
}
sky_ground[d][COL-1] = '\0';
}
}
/*
*******************************************************************************************
* display
*******************************************************************************************
*/
static void display()
{
gotoxy(0,0);
HANDLE consolehwnd;
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
for(int f=0;f<ROW-5;f++)
{
//设置文字颜色为绿色
for(int j=0; j<COL-1; j++)
{
if(sky_ground[f][j] != ' ')
{
SetConsoleTextAttribute(consolehwnd,random(16)+1);
}
else SetConsoleTextAttribute(consolehwnd,0);
printf("%c",sky_ground[f][j]);
}
}
for(f=ROW-5; f<ROW; f++)
{
for(int j=0; j<COL-1; j++)
{
if(sky_ground[f][j]=='#')
SetConsoleTextAttribute(consolehwnd,11);
else SetConsoleTextAttribute(consolehwnd,7);
printf("%c",sky_ground[f][j]);
}
}
//Sleep(150); //差不多以ms为单位,刷新频率
}
/*
*******************************************************************************************
* random
*******************************************************************************************
*/
int random(int num)
{
return(rand() % num);
}
/*
*******************************************************************************************
* check_last_row
*******************************************************************************************
*/
int check_last_row()
{
for(int g=0;g<COL;g++)
{
if(sky_ground[23][g] == ' ')
return 1;
}
return 0;
}
/*
*******************************************************************************************
* word_n_down
*******************************************************************************************
*/
void word_n_down()
{
for(int h=0;h<NUM;h++)
{
begin[h] = random(ROW-5);
position[h] = random(COL-2);
word[h] = random(26) + 'A';
speed[h] = random(SPEED)+1;
}
while(1)
{
if(cycle_end >= NUM) //等n颗流星都落地了之后再返回(cycle_end >= n)
break;
test = list-1;
if(test < 0)
test = 0;
if(check_last_row()) //判断是否到最后一行#了,若是则退出
{
system("pause");
exit(0);
}
for(int i=0;i<NUM;i++)
word_one_down(begin[i],position[i],speed[i],word[i],&word_end[i]);
list ++;
display();
Sleep(200); //差不多以ms为单位
}
}
/*
*******************************************************************************************
* word_one_down
*******************************************************************************************
*/
int word_one_down(int begin,int position,int speed,int word,int *word_end)
{
if((*word_end) == 0) //判断是否撞上地面,0表示未撞上
{
if(begin+list*speed >= ROW) //保护防止溢出
return 0;
sky_ground[begin+test*speed][position] = ' '; //A表示从第几行开始下落
if(begin+list*speed >= 19)
{
for(int z=19;z<ROW;z++)
{
if(sky_ground[z][position] == '#')
{
sky_ground[z][position] = ' ';
*word_end = 1;
cycle_end ++;
break;
}
}
}
else
{
sky_ground[begin+list*speed][position] = word;
}
}
return 0;
}
void gotoxy(int x,int y)
{
COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );
}
[ 本帖最后由 Nostradamas 于 2011-6-23 09:09 编辑 ]