Java太空入侵者游戏快速火作弊触发游戏赢得太早

时间:2015-12-18 04:07:56

标签: java space

所以我是新手程序员修改/添加已经制作的太空入侵者游戏的东西,以便更熟悉游戏的编程方式。我试图在游戏中添加作弊,而快速的欺诈行为给我带来了一些麻烦。当你选择快速射击并进入关卡时,游戏有时可能会在一些外星人仍然离开时触发notifyWin。这是因为有时两次射击同时击中同一个敌人,使计算机认为有2个不同的敌人被杀死,因此留下一些外星人有时会遗留下来,而你已经赢了!"屏幕弹出。当外星人计数达到0时触发胜利两次相同的敌人将外星人的数量减少2而不是1.我不能为我的生活看出这一点。

// reduce the alient count, if there are none left, the player has won
    alienCount--;

if (alienCount == 0)
    {
        notifyWin ();
    }

以下是镜头与敌人碰撞的代码

/**
     * Notification that this shot has collided with another
     * entity
     * 
     * @parma other The other entity with which we've collided
     */
    public void collidedWith(Entity other) {
            // prevents double kills, if we've already hit something,
            // don't collide
            if (used) {
                    return;
            }

            // if we've hit an alien, kill it!
            if (other instanceof AlienEntity) {
                    // remove the affected entities
                    game.removeEntity(this);
                    game.removeEntity(other);

                    // notify the game that the alien has been killed
                    game.notifyAlienKilled();
                    used = true;
            }
    }

1 个答案:

答案 0 :(得分:2)

一种可能的解决方案是将敌人作为对象添加到列表中。拍摄后,将它们从列表中删除,检查它们是否仍在手边。列表为空时执行notifyWin。这样,如果对敌人进行碰撞检测的逻辑产生太多命中,它仍然可以正常工作。

为了在屏幕上渲染敌人,这个列表已经存在的可能性很大。

编辑:现在我看到了这个方法,你可能只需要在collidedWith的顶部执行以下操作:

if (used || !game.containsEntity(other)) {
    return;
}

方法containsEntity检查内部列表中是否存在实体或者持有游戏参与者(实体)的结构。