比较复杂的C语言编程源代码。

一个“消灭敌机”的小游戏,DEVc++编译的:

# include & ltstdio.h & gt

# include & ltconio.h & gt

# include & ltstdlib.h & gt

# include & ltwindows.h & gt

# include & lttime.h & gt

#定义zlx 10?//增量坐标(X)保持游戏框不移动到一边。

#define zly 3 //增量坐标(y)保持游戏框不往旁边移动。

#定义W 26?//游戏框的宽度

#定义H 24?//游戏框的高度

int jiem[22][22]={0},wj = 10;?//接口数组,本机位置(初始值为10)

int速度=4,密度=30,分数=0,死亡= 0;//敌人速度,敌人密度,玩家表现,死亡次数。

int m=0,n = 0;?// m,n是控制敌机的变量。

void gtxy (int x,int y)?//控制光标位置的函数

{坐标位置;

位置。X = x?位置。Y = y?

SetConsoleCursorPosition(GetStdHandle(STD _ OUTPUT _ HANDLE),pos);

}

作废?颜色(int?a)?//设置颜色的函数(A应为1-15)

{ SetConsoleTextAttribute(GetStdHandle(STD _ OUTPUT _ HANDLE),a);}

void yinc(int x=1,int y=0)?//隐藏光标的功能

{控制台_光标_信息?gb={x,y };//y设置为0表示隐藏。

SetConsoleCursorInfo(GetStdHandle(STD _ OUTPUT _ HANDLE),& ampGB);

}

void csh()?//初始化函数

{ int I;

颜色(7);

gtxy(zlx,zly);printf("╔”);?gtxy(zlx+W-2,zly);printf("╗”);?//框的左上角和右上角

gtxy(zlx,zly+H-1);printf("╚”);gtxy(zlx+W-2,zly+H-1);printf("╝”);//降低两个框角

for(I = 2;我& ltw-2;i+=2) {gtxy(zlx+i,zly);?printf("═”);}?//打印顶部水平框架

for(I = 2;我& ltw-2;i+=2) {gtxy(zlx+i,zly+H-1);printf("═”);} ?//打印下水平框架

for(I = 1;我& lth-1;i++) { gtxy(zlx,zly+I);?printf("║”);}//打印左竖框

for(I = 1;我& lth-1;i++) {gtxy(zlx+W-2,zly+I);printf("║”);}?//打印右竖框

颜色(14);gtxy(19,2);Printf(“消灭敌机”);颜色(10);

gtxy(37,5);printf(" setting:Esc ");

gtxy(37,7);Printf("发射:↑");

gtxy(37,9);printf(" Control:←→");

gtxy(37,11);Printf("分数:%d ",分数);

gtxy(37,13);Printf("死亡:%d ",死亡);

yinc(1,0);

}

void qcjm()?//清除接口函数

{int i,j;

for(I = 0;我& lth-2;i++)

for(j = 0;j & ltw-4;j++){gtxy(zlx+2+j,zly+1+I);printf(" ");}

}

void feiji()?//飞机运动功能

{int i,j;

for(I = 21;我& gt=0;我-)?//从下往上是为了防止敌机直接冲出阵列。

for(j = 0;j & lt22;j++)

{ if(I = = 21 & amp;& ampjiem[i][j]==3)?jiem[I][j]= 0;?//将0赋给底线,避免越线。

?if(jiem[i][j]==3)?jiem[i][j]=0,jiem[I+1][j]= 3;

}

if(jiem[20][wj]= = 3 & amp;& ampjiem[21][wj]= = 1)death++;

}

void紫丹()?//项目符号移动函数

{ int i,j;

for(I = 0;我& lt22;i++)

for(j = 0;j & lt22;j++)

{ if(I = = 0 & amp;& ampjiem[I][j]= = 2)jiem[I][j]= 0;

if(jiem[i][j]==2) {?if(jiem[I-1][j]= = 3)score+= 100,printf(" \ 7 ");?

jiem[i][j]=0,jiem[I-1][j]= 2;}

}

}

作废打印(?) ?//输出接口函数

{int i,j;

qcjm();

for(I = 0;我& lt22;i++)

for(j = 0;j & lt22;j++)

{ gtxy(12+j,4+I);

if(jiem[I][j]= = 3){ Color(13);printf("□");}

if(jiem[I][j]= = 2){ Color(10);printf(" . ");}

if(jiem[I][j]= = 1){ Color(10);printf("■");}

}

gtxy(37,11);颜色(10);Printf("分数:%d ",分数);

gtxy(37,13);Printf("死亡:%d ",死亡);

}

void设置()?//游戏设置功能

{ qcjm();

gtxy(12,4);Printf("选择敌人速度:");

gtxy(12,5);printf("?1.快速2。中等3。慢>;>);

开关(getche())

?{案例' 1 ':速度= 2;打破;

情况“2”:速度= 4;打破;

情况“3”:速度= 5;打破;

默认:gtxy(12,6);printf("?不对!默认值”);

?}

gtxy(12,7);Printf("选择敌人密度:");

gtxy(12,8);printf("?1.大2。中等3。小>;>);

开关(getche())

{事例“1”:密度= 20;打破;

情况2:密度= 30;?打破;

情况“3”:密度= 40;打破;

?默认:gtxy(12,9);printf("?不对!默认值”);

?}

for(int I = 0;我& lt22;i++)

for(int j = 0;j & lt22;j++)jiem[I][j]= 0;

jiem[21][wj = 10]= 1;jiem[0][5]= 3;

gtxy(12,10);printf("?按任意键保存... ");

getch();

qcjm();

}

空运行()?//游戏运行功能

{ jiem[21][wj]= 1;?//1的值代表我们的机器(2是子弹)。

jiem[0][5]= 3;//值为3表示敌机。

SetConsoleTitle(“摧毁敌机”);?//设置窗口标题

while(1)

{?if (kbhit())?//按下一个键,控制我的机器左右移动,发射或者设置。

?{ int key

?if((key = getch())= = 224)key = getch();

?开关(钥匙)?

?{案例75:if(wj & gt;0) jiem[21][wj]=0,jiem[21][-wj]= 1;打破;

?案例77:如果(wj & lt20)?jiem[21][wj]=0,jiem[21][+++wj]= 1;?打破;

?案例72:jiem[20][wj]= 2;打破;

?案例27:设置();

}

}

如果(++n %密度==0)?//控制敌机速度。

{ n = 0;srand((无符号)时间(空));

?jiem[0][rand()% 20+1]= 3;

}

if(++m % speed = = 0){ feiji();m = 0;} ?//控制敌机的移动速度(相对于子弹)

紫丹();?//子弹移动

print();?//输出接口

睡眠(120);?//延迟120毫秒

}

}

int main()

{ csh();

?run();

?返回0;

}