比较复杂的C语言编程源代码。
# 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;
}