游戏动过dos窗口不断刷新进行实现,画面比较丑陋。
#include "stdio.h"
#include "time.h"
#include "stdlib.h"
#include "conio.h"
#include "math.h"
#include "windows.h"
#define L 15
#define C 30
int executable=1,grade=0,max=0;
void output(char a[][C],char Car[][C])
{
int i,j;
printf("\n\n\t\t ==>>4向左,6向右其它为前进<<==");
printf("\n\n\t\t\t==>>最高成绩为%d分<<==",max);
printf("\n\n\t\t\t==>>当前成绩为%d分<<==\n\n",grade);
for(i=L-1;i>=0;i--)
{
printf("\t\t|★|");
for(j=1;j<C-1;j++)
{
if(a[i][j]=='*' || Car[i][j]=='*')
printf("■");
else
printf(" ");
if(a[i][j]=='*' && Car[i][j]=='*')
executable=0;
}
printf("|★|\n");
}
}
void plane(char a[][C])
{
a[0][C/2-2]=a[0][C/2-1]=a[0][C/2]='*';
a[1][C/2-1]='*';
a[2][C/2-2]=a[2][C/2-1]=a[2][C/2]='*';
a[3][C/2-1]='*';
}
void move (char a[][C],char point)
{
int i,j;
char temp;
switch(point)
{
case '4':{
if(a[0][1]=='*')
break;
for(i=0;i<4;i++)
for(j=0;j<C-1;j++)
a[i][j]=a[i][j+1];
break;
}
case '6':{
if(a[0][C-2]=='*')
break;
for(i=0;i<4;i++)
for(j=C-1;j>0;j--)
a[i][j]=a[i][j-1];
break;
}
}
}
void car(char a[][C],char Car[][C],int count)
{
int i,j,random1,random2;
if(count==1)
if(rand()%3!=1)
{
if(rand()%3!=2)
{
random1=rand()%(C-4)+2;
Car[L-4][random1]='*';
Car[L-3][random1-1]=Car[L-3][random1]=Car[L-3][random1+1]='*';
Car[L-2][random1]='*';
Car[L-1][random1-1]=Car[L-1][random1]=Car[L-1][random1+1]='*';
}
else
{
random1=rand()%(C-4)+2;
Car[L-4][random1]='*';
Car[L-3][random1-1]=Car[L-3][random1]=Car[L-3][random1+1]='*';
Car[L-2][random1]='*';
Car[L-1][random1-1]=Car[L-1][random1]=Car[L-1][random1+1]='*';
while(1)
{
random2=rand()%(C-4)+2;
if(fabs(random2-random1)>2)
{
Car[L-4][random2]='*';
Car[L-3][random2-1]=Car[L-3][random2]=Car[L-3][random2+1]='*';
Car[L-2][random2]='*';
Car[L-1][random2-1]=Car[L-1][random2]=Car[L-1][random2+1]='*';
break;
}
}
}
}
for(i=1;i<L-1;i++)
for(j=1;j<C-1;j++)
{
Car[i][j]=Car[i+1][j];
Car[i+1][j]=' ';
}
}
void game(char a[][C])
{
long int wait=300;
char point,Car[L][C]={' '};
int count=1;
float Time=time(0);
while(executable)
{
output(a,Car);
if(kbhit())
{
point=getch();
}
Sleep(wait);
car(a,Car,count);
move(a,point);
system("CLS");
count++;
if(count==5)
count=1;
grade++;
if(max<grade)
max=grade;
if(wait>100)
wait--;
point='0';
}
executable=1;
grade=0;
}
void gameover()
{
printf("\n\n\n\n\n\t\t\t|||======================|||\t\t\t\n");
printf("\t\t\t|||=====GAME OVER!!======|||\t\t\t\n");
printf("\t\t\t|||======================|||\t\t\t\n");
printf("\n\n\n\t\t\t|||======================|||\t\t\t\n");
printf("\t\t\t|||=If you want to again=|||\t\t\t\n");
printf("\t\t\t|||===Please point '1'===|||\t\t\t\n");
printf("\t\t\t|||======================|||\t\t\t\n\t\t\t");
}
int main(void)
{
system("color 3e");
char a[L][C]={' '};
int again=1;
srand(time(0));
plane(a);
while(again==1)
{
game(a);
gameover();
scanf("%d",&again);
system("CLS");
}
return 0;
}