代码分块一 

属性不够可以自行补充

 

首先需要一个类来描述机甲单元

class MeshWarriorCell

{

       int kind;                  //种类

       int weight;              //重量

       int attack;                //攻击

       int recovery;            //防御

       int energy;              //激活时消耗能量

       int capability ;          //性能

 

      int width,height;      //宽,高设为固定数值


      double x;                 //坐标

      double y;                 //坐标

      double direction;       //方向    机甲单元可以有不同的方向

      int state;                //状态

      MeshWarriorCell[]  neighbours=new MeshWarriorCell[4]; 最多四个邻居单元

 

     public virtual void Show(Graphics graphics){}      //显示在 graphics上

     public virtual bool Collide(MeshWarriorCell cell) {}  // 判断是否和指定单元相撞,若相撞,执行相应损伤函数  

}

 

代码分块二

 属性不够可以自行补充

class Gear    //转动轴承

{

      MeshWarriorCell[]  neighbours=new MeshWarriorCell[4]; //限制其只能连接两个单元,用[0],[1] 表示

     int  linkCellCount; //连接在此gear后的所有机甲单元数目(即与neighbours[1]连着的cells)

     int angle;  //角度,设置为0,90,180,270,四个角度

     int turns;  //计算转动一次需要几个回合 (linkCellCount数目越多,转动越慢),可自行设计计算公式

     public void UpdatePositions(){};//转动完毕后,连接在此gear后的所有机甲单元坐标(实际上只用更新到下一个gear即可),利用相对坐标来更新

}

 

代码分块三

属性不够可以自行补充

 

需要一个类来描述机甲

class MeshWarrior

{      

      double x;                 //坐标

      double y;                 //坐标

      double direction;       //方向    机甲可以有不同的方向

      int state;                //状态

      list<MeshWarriorCell>  list_cells;//所有机甲单元

      list<string>  list_names;//所有机甲单元名称,不同位置的单元名称不一样

     public void Show(Graphics graphics){}      //调用MeshWarriorCell.Show显示所有机甲单元在 graphics上

     public bool Collide(MeshWarriorCell cell) {}  // 调用MeshWarriorCell.Collide判断是否和指定机甲相撞,若相撞,执行相应损伤函数  

 

     public void Go(int direction){}  //利用相对坐标更新所有cells的坐标

 

  

    public void Behave()

    {

                如果某个动作没执行完,则接着执行,返回

                否则根据键盘输入,执行新动作

             

     }

 

}

 

代码分块四

属性不够可以自行补充

 

class Action//动作

{   

     

      list<MeshWarriorCell>  list_cells;//动作涉及的所有轴承机甲单元

      list<string>  list_names;//动作涉及的所有轴承机甲单元名称,不同位置的单元名称不一样

     int turns; //动作完成需要的回合数

      list<int>  condition_angle;//动作涉及的所有轴承机甲单元的初始角度条件

      list<int>  destination_angle;//动作涉及的所有轴承机甲单元的目标角度     

   

      public bool SatisfyCondition() //是否满足执行条件

      public int DoAction() //执行并返回需要回合数

 

 

}

 

代码分块五

属性不够可以自行补充

 

class Command//指令

{   

         一个指令可以调用多个 Action完成,

         例如一个action1 为 : 轴承一的初始角度为0,则转动90

         另一个action2 为 : 轴承一的初始角度为90,则转动0

      

        我们可以把这个指令写成

if(action1.SatisfyCondition()) Do action1.DoAction();

if(action2.SatisfyCondition()) Do action2.DoAction();

    这些指令是并列的,用list<Action> stage[0] 保存

      执行完这个动作又可以执行下一套动作 用list<Action> stage[1]保存,故需要一个

 

      list<list<Action>> stage 型数据结构,当然你也可以用其他结构,能完成功能即可

 

   

}

 

 

 

 

 


 

 

 

posted on 2008-12-13 12:44  feathersky  阅读(362)  评论(0编辑  收藏  举报