太空入侵者:所有列中的敌人在被击中时死亡
Space Invaders: All enemies in column die when shot
我正在尝试用C编写空间入侵者程序++我不是专家,决定将敌人储存在多维数组中。
这里每个敌人都是一个纵队。行从上到下依次为:x、y1、y2、y3、y4、y5和敌方生命值。y1是最低的一排(或最靠近玩家的一排敌人(。
当我现在向敌人开枪时,整排敌人都消失了,但我希望每发子弹只消失一个敌人。有人能告诉我哪里出了问题吗?
if (keys.fire && bullet.health == 0)
{
bullet.y = width - spriteSize;
bullet.x = player.x;
bullet.dy = 1;
bullet.dx = 0;
bullet.health = 1;
}
bullet.y -= bullet.dy;
bullet.x += bullet.dx;
if(bullet.health > 0)
{
drawSprite(Bullet, bullet.x, bullet.y);
}
for(int i = 0; i < 12; i++)
{
for(int j = 1; j < 6; j++)
{
if(distanceBetween(enemies[0][i], enemies[j][i], bullet.x, bullet.y) < 20)
{
enemies[6][i] = 0; //Enemy Health
enemies[j][i] = -1;
bullet.health = 0;
}
if(enemies[6][i]>0)
{
for(int sprite = 1; sprite < 6; sprite++)
{
drawSprite(Enemy1, aliens[0][i], aliens[sprite][i]);
}
}
你每一行都使用共同的敌人生命值,所以一行中的所有敌人都会按照你说的那样死亡。
为了避免这种情况,你必须为每个敌人分配敌人的生命值。
可能的解决方案:
for(int i=0;i<12;i++)
{
for(int j=1; j<6; j++)
{
if(distanceBetween(enemies[0][i], enemies[j][i], bullet.x, bullet.y)<20)
{
enemies[5+j][i]=0; //Enemy Health
enemies[j][i]=-1;
bullet.health = 0;
}
if(enemies[5+j][i]>0)
{
drawSprite(Enemy1, aliens[0][i], aliens[j][i]);
}
}
}
现在必须为数组enemies
的每一行分配(至少(11个元素,而不是7个。
相关文章:
- 太空入侵者 – 2D 矢量运动算法
- 我正在使用快速 JSON 为C++回合制 RPG 解析对象敌人,并且遇到了一些奇怪的错误
- 向有射程的敌人发射子弹
- 在GLUT中每秒产生2个敌人
- C++ 按生命对敌人进行分类
- 团结敌人 AI 脚本 C#
- C 太空入侵者运动
- 视觉 杀死入侵者在C++不起作用
- 我该如何制造更多的敌人?SDL2/C++
- 敌人不会跟随玩家。SDL2/C++
- OpenGL - 2D敌人不旋转面对玩家
- 敌人幽灵实例/非唯一对象
- 错误 C2280.尝试引用已删除的函数.尝试从其数据结构中删除敌人和激光时出现此错误
- 2D敌人阵列在创建时崩溃
- 敌人逻辑|子弹重置
- 敌人角色和子弹之间的碰撞- (Cocos2dx, c++, Android)
- c++停止敌人精灵相互移动
- 子弹只会杀死第一个敌人
- 崩溃,在控制台应用程序上,试图绘制敌人,越界(遵循视频教程)
- C++ DirectX11 2d 游戏:阻止敌人精灵相互移动