if (enemy[i].alive == true && player.alive) {//敌机与我机碰撞检测
if (enemy[i].type == BIG) {
if ((enemy[i].x <= ((player.x * 2 + 102) / 2) && enemy[i].x + 169 >= ((player.x * 2 + 102) / 2)) && (enemy[i].y <= player.y && player.y <= enemy[i].y + 258)) {
enemy_num--;
player.die++;
enemy[i].alive = false;
enemy[i].destroy = true;
player.heart -= Enemy_bullet;
}
}
if (enemy[i].type == MID) {
if ((enemy[i].x <= ((player.x * 2 + 102) / 2) && enemy[i].x + 69 >= ((player.x * 2 + 102) / 2)) && (enemy[i].y <= player.y && player.y <= enemy[i].y + 99)) {
enemy_num--;
player.die++;
enemy[i].alive = false;
enemy[i].destroy = true;
player.heart -= 2;
}
}
if (enemy[i].type == SMALL) {
if ((enemy[i].x <= ((player.x * 2 + 102) / 2) && enemy[i].x + 57 >= ((player.x * 2 + 102) / 2)) && (enemy[i].y <= player.y && player.y <= enemy[i].y + 43)) {
enemy_num--;
player.die++;
enemy[i].alive = false;
enemy[i].destroy = true;
player.heart--;
}
}
}
这是我自己写的碰撞检测函数,我把子弹粗糙化为锥形,以锥形的顶点来判断是否进行碰撞,我的水平有限,大家可以自行修改。并且我加入了开始页面,以为我的素材里没有开始,所以我勉强使用重新开始来代替,但是我没做结束页面,大家自行添加(其实是懒得做了)。
WASD(↑←↓→)键控制方向,空格键控制发射子弹。
在playerMove()函数中有一段这样的代码:
if (GetAsyncKeyState(VK_SPACE) /* & 0x0001*/) {
createBullet();
}
大家可以将注释删除掉,这样可以使子弹随空格的敲击次数释放,而不是可以按着空格一直释放。
源码可以私信我。