本游戏初始阶段准备采用2D的方式,主要是机甲的设计与对战,然后可引入相关的产业,领域 机甲设计简单点来说 就是说用机甲单元设计机甲机甲若想能够移动,则得有移动引擎,若想移动的快,则整体重量要小,移动引擎要多但这样的话,又没什么攻击力,防御力, 所以要加上尖刀,护甲但是这样尖刀不会转动,不灵活,因而要加上转动轴承,使其可以根据不同的指令进行转动从而增加攻击的灵活性(当然你也可以不要转动轴承或者尖刀,护甲等)轴承越多,灵活度越大,也就意味着操作越复杂,手速就要快每个人可以使用各自特色的机甲,例如笨重的但是防护好的, 灵活的攻击小的等等 设机甲设计单元为 能源中心,移动引擎,转动引擎,护甲,机械手臂,转动轴承,刺刀.每个机甲单元都有 重量, 四个方向防御,攻击指数,消耗能量移动,转动引擎(针对整体), 转动轴承(针对局部)有一个性能指数例如最大移动速度=移动引擎性能/总重量假设机甲最大是10*10,我们可以在每个单元格内至多设置一个机甲单元(也可不设)
图不好发 给个链接http://www.cnblogs.com/feathersky/archive/2008/12/12/1353627.html
下面是机甲的对战每个机甲相撞,根据撞击的部分的防御,攻击指数计算损害 若转动轴承被撞坏,则不能转动若某个单元被转坏,连在其后的单元没有能量供应,不再具备攻击力若中心能源被撞坏,机甲就不能动了
代码分块一 属性不够可以自行补充 首先需要一个类来描述机甲单元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 型数据结构,当然你也可以用其他结构,能完成功能即可 }
图不好发 给个链接http://www.cnblogs.com/feathersky/archive/2008/12/12/1353627.html
下面是机甲的对战每个机甲相撞,根据撞击的部分的防御,攻击指数计算损害 若转动轴承被撞坏,则不能转动若某个单元被转坏,连在其后的单元没有能量供应,不再具备攻击力若中心能源被撞坏,机甲就不能动了
代码分块一 属性不够可以自行补充 首先需要一个类来描述机甲单元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 型数据结构,当然你也可以用其他结构,能完成功能即可 }
解决方案 »
- 求助基础问题,关于dll引用路径的问题。
- asp.net 怎么这样弄
- 用户代码未处理System.InvalidCastException 指定的转换无效
- 大家帮我来看看这个调用存储过程是怎么回事?
- 30分急求邮件收发一简单分题
- 我在一个form窗体里怎么呼叫另一个form,并且可以返回
- Substring怎么就是截取不到呢?
- 关于.net调用java开发的webservice的请教
- 時間的正則表達式
- 各位哥哥姐姐,帮妹妹我一把,谢谢!
- 下面代码g.DrawImage(Image.FromFile(files[i]),i%3*120,i/3*120,100,100)会内存不足是什么原因?
- C# 实现 自动隐藏任务栏 的类似功能
在C++编程中,其开发者还专门鼓励人们用泛型和STL编程,你可以学习一段时间后,再考虑考虑为什么. 别什么都还不会的时候,就开始会了乱评论