解决方案 »

  1.   

    第一个bug在GameController类的下面这个方法:(看注释)
    bu.DaBullet(bu, g, tank.tankdir); public void DaBullet()
            {
                if (this.IsBulletMoveable(bu))
                {
                    //子弹移动方向随着坦克方向改变而改变,你可以修改子弹类的这个方法
                     bu.DaBullet(bu, g, tank.tankdir);
                }
                else
                {
                    dapaoxiezi= true;
                    bu.tp.WipeMe(g);
                    bu.KillPaoDan();
                }
            }//
    //Bullet
    //
    //public void DaBullet(Bullet n, System.Drawing.Graphics g,TankDirection s)
    //改为,方向由子弹自己方向决定,看了你代码子弹类里有它的方向属性
    public void DaBullet(Bullet n, System.Drawing.Graphics g){
    ......
        switch (this.s)
    .......
    }
      

  2.   

    3、为啥在炮管朝上的时候会击穿两格障碍呢
    GameController类 public bool IsBulletMoveable(Bullet shape)
            {
               
               // return ground.IsBulletMoveable(bu, TankDirection.TankDown);
             //改为
                 return ground.IsBulletMoveable(bu, tank.tankdir);
            }
      

  3.   

    4、关于AI,有点头绪来做,但是击杀坦克完全没头绪,不知道该如何获取到被击中坦克的对象//这个没看到你代码有敌人坦克实体啊?//下面是个简单的例子
    IList<Tank> enemies;
    //.............初始化public void BulletCollision()
    {
           for(var i=0;i<enemies.Length;i++)
               如果子弹与敌人发生碰撞
                    enemies[i].死();    //如何获取到被击中坦克的对象??
    }
      

  4.   

    这里有点奇葩,每次paint都创建GameController private void Form1_Paint(object sender, PaintEventArgs e)
     {
            g = Graphics.FromHwnd(this.Gamesback.Handle);
            cg = new Controller.GameController(g);
            cg.newGame();      
     }
    //改为:
     private void Form1_Load(object sender, EventArgs e)
    {
            g = Graphics.FromHwnd(this.Gamesback.Handle);
           cg = new Controller.GameController(g);
    }
    //你用每次paint 作为“游戏循环”这个就随你了
    private void Form1_Paint(object sender, PaintEventArgs e)
    {
          cg.newGame();  
    }
    你按照“俄罗斯方块”的代码去改,还不如自己写呢