【c语言】小程序游戏——飞机游戏(三)
接下来,我们需要在进行以下操作:
1.在程序里面添加敌机
2.为敌机添加基本属性
————————————————————————————————————————
NO.1在程序里面添加敌机
国际惯例,我们需要对敌机的位置设置一个初始值
int enemy_x = 0;
int enemy_y = weight/2;
其中敌机的Y轴坐标根据之前的博客设定为weight的一半,当然,你也可以自己随意设定任何位置
初始化之后,我们就可以在把敌机显示在窗口上
for(int i=0;i<height;i++)
{
for(int j=0;j<weight;j++)
{
if((i == enemy_x) && (j == enemy_y))
printf("O");
else
printf(" ");
}
printf("\n");
}
编译结果可以看出,我们的敌机“O”出现在飞机的正上方
第一步非常地简单,我们很快就把敌机给显示出来了
—————————————————————————————————————————————————————
然而,简单地把敌机显示出来并不能为我们带来游戏的体验,我们还需要在激光打中敌机时,我们的敌机需要消失,才能显示出这个游戏的意义
—————————————————————————————————————————————————————
No.2 为敌机添加基本属性
Step1:敌机消失机制
我们可以设定为,当激光的坐标位置和敌机的坐标位置恰好相等时,敌机和激光都置于窗口坐标轴外
根据这种设想,我们可以添加以下代码,并实验是否可行
if((bullet_x == enemy_x) && (bullet_y == enemy_y))
{
enemy_x = enemy_y = -1;
bullet_x = bullet_y = -1;
}
编译结果可知,当激光发射到敌机位置时,敌机和激光都消失了,敌机初步设定完成
Step2:敌机随机生成
当敌机被消灭时,我们还需要不断地补充敌机,才能让游戏继续下去
这时我们可以使用随机函数rand()来让敌机的位置随机确定,使得根据游戏性
但如果我们在使用随机函数时,之前确定的位置便不能再用,所以,我们对激光消灭敌机时的位置进行重新调整
if((bullet_x == enemy_x) && (bullet_y == enemy_y))
{
enemy_x = 0;
enemy_y = rand() % weight;
bullet_x = bullet_y = -1;
}
实验结果可知,当敌机被消灭时,程序会随机在某个位置再次生成敌机,以确保游戏性
Step3:敌机下落
如果敌机只是简单地固定于某个位置时,我们的难度将不是很大,所以,我们需要给敌机添加一个下落的属性,使得游戏难度增加
而在设定下落时,我们需要知道,当敌机下落到超出游戏窗口范围时,我们应该怎么办
在这里,我们可以设定:当敌机超出窗口范围时,敌机位置重新恢复到初始化状态,程序再次生成新的敌机
所以应当添加以下代码
if(enemy_x > height)
{
enemy_x = 0;
enemy_y = rand() % weight;
}
else
{
enemy_x ++;
}
编译结果可以看到,效果和我们想象中的差不多,但是有点不一样:下落速度过快
这样的结果会让飞机还没到达规定的位置,敌机就已经下落出窗口
为此,我们还需要对敌机的下落速度进行限制
if(enemy_x > height)
{
enemy_x = 0;
enemy_y = rand() % weight;
}
else
{
static int speed = 0;
if(speed < 7)
speed ++ ;
if(speed == 7)
{
enemy_x ++;
speed = 0;
}
}
从编译效果,敌机下落速度有明显的降低
————————————————————————————————————————————————————