我目前正在学校的最后一年,攻读计算机研究高等国家文凭,基本上在最后一个学期,我们需要开发一个软件项目,基本上包含整个系统
现在,我正在考虑做的事情与Robocode类似,但我将使用.Net框架来代替Java。
对于那些你不知道Robocode是什么的人,它基本上是一种编程游戏,人们使用类接口和可下载类中的方法开发自己的机器人,然后他们战斗彼此在竞技场中的自主战斗......就像这样:
alt text http://articles.techrepublic.com.com/i/tr/cms/contentPics/robocode.gif
基本上,就像我说的,我想使用.Net Framework重新创建这种场景。我在StackOverflow上发布这个问题,希望更有经验的开发人员能够指导我朝着正确的方向发展这个项目。
到目前为止我的想法基本上是创造:
现在,当战斗发生时,当然会有某种动画和动作,我还没有决定还有什么用作媒体。
我目前的选择是:
您认为哪种方式更适合此特定情况?
对于开发机器人的玩家,我将提供他们能够像Robocode一样使用的某些类接口。
此类事件和方法的示例可能包括:
public void run () {}
public void onScannedRobot(ScannedRobotEvent e) {}
walk(/* ammount in pixels or w/e to walk to */);
turnRight(/* value in degrees for an angular turn */);
//etc...
以下是Robocode(Java)代码中的代码段:
public class MyFirstRobot extends Robot {
public void run() {
while (true) {
ahead(100);
turnGunRight(360);
back(100);
turnGunRight(360);
}
}
}
为了实际让战斗发生,我正在考虑使用Reflection来实际读取用户实际使用的方法,并实现它们在战斗的特定时刻运行和调用等等。
现在,我亲切和谦卑地问你经验丰富的开发人员,是指导我一点我的这个项目,并告诉我需要做什么......对于初学者来说, 是这个项目是否可行? 如果确实如此, 从哪里开始我的项目?
关于我打算使用的技术和软件是:
我感谢所有人,即使是在我的问题中设法阅读这一点,我将非常需要并非常感谢我完成这个项目的所有帮助。
感谢您的时间和精力。
答案 0 :(得分:7)
该项目是否可行?
听起来很棒。我不知道你有多少时间。这是一条经验法则:
当发生丢弃到期日期时,如果90%的系统提供90%的功能是100%完成,那么您可能会说项目成功率至少达到90%。
OTOH如果提供100%功能的100%软件仅完成90%(即未完成),那么没有任何内容完成且项目失败。
成功的关键是“渐进式发展”和“持续交付”。您的项目规范说:
我们需要开发一个软件项目,它基本上包含一个整个系统。
要做到这一点,我建议:
答案 1 :(得分:6)
当我开始使用WPF(与Silverlight大致相同)时,我最终花了很多时间来弄清楚如何做事。制作GUI的方式与我尝试过的方式完全不同,似乎有十亿种不同的方式来做事。我的观点是,如果您没有使用WPF / Silverlight的经验,我怀疑您需要花费大量时间来解决问题。我想这取决于你已经知道的事情。
除此之外,我全心全意地支持ChrisW关于增量发展的建议。我会告诉你如何处理游戏设计。从一个非常简单的机器人API开始,比如两个没有事件,输入或世界知识的函数。首先让机器人移动。重点是通过简单的功能获得一个功能齐全的程序,包括加载客户端代码以显示结果“战斗”的所有部分。
每个机器人应该使用单个方法run()实现一个接口,并且在他们自己的dll文件中。战斗开始时,实现接口的每个dll都会从某个位置加载(使用反射)并实例化。然后开始一个循环的战斗,直到1分钟过去(或者其他什么,只是为了看到发生的事情):
while (time is not up)
generate random sequence for bots
call run() on each bot
draw(world)
当时间到了,战斗结束了。现在你有一个骨架应用程序,你可以开始充实,即使你没有时间来完成你想要的所有功能,它也可以让你有一个工作程序。在run方法中,机器人可以调用您在API中定义的几个移动操作。调用这些将改变世界的状态 - 可能只是一个瓷砖网格,以及每个机器人的位置。
下一步可能是向机器人的run方法添加一个世界视图,将循环更改为:
while (time is not up)
generate random sequence for bots
call run(WorldView) on each bot
draw(world)
假设机器人仍然只能在其run方法中执行一些移动操作。现在,他们可以选择观察世界(或它们的一部分),使其能够朝向或远离敌人并避开墙壁。
在下一次迭代中,您可以创建一个单独的API函数来射击你的大炮(或任何适合你的游戏)。实现它如何改变世界状态,如何跟踪子弹以及如何表示动画等。循环可能如下所示:
while (time is not up and there are more than 1 bot alive)
advance projectiles
calculate projectile-bot collisions and damage
generate random sequence for bots
call run(WorldView) on each bot
draw(world)
我希望这能让你了解如何迭代地充实程序,同时拥有一个反映游戏所有领域的工作程序。我没有太多实施游戏的经验,所以你应该以批判的眼光看待我的建议,但这就是我将如何解决这个问题。
答案 2 :(得分:1)
这很可行。
我建议从后端系统和响应“已编译”robocode的对象开始。 “编译”代码采用什么形式就是你。
然后,为robocode创建解释器。或者,听起来你可能只能制作.NET类。那是最难对付的免费赠品。
最后,创建您可能需要的任何UI ...全部设置。
您可能希望将机器人编译为.dll ...但是,您只需为它们和功能创建公共接口。
答案 3 :(得分:1)
可行性完全取决于你的团队的能力,对框架的熟悉程度等等。我见过一些人可能会在一周内敲出这样的东西,而其他人则无法挽救他们的生命。
你提到的反思方法听起来像错误的轨道,除非我误解你。你的“机器人”基类应该允许开发人员覆盖一个或多个方法,他们可以从中调用“射击”,“移动”等功能。
另一个类似于此的应用程序是Terrarium。开发人员可以在分布式环境中对动物进行编码并将其与其他动物对齐它是一个.NET 1.1演示应用程序,有点过时,但有些主体可能仍然对您有所帮助。这家伙已经改写了: http://weblogs.asp.net/bsimser/archive/2008/07/16/reintroducing-terrarium-now-with-2-0-goodness.aspx
答案 4 :(得分:0)
那么,有点像virii,那么?
答案 5 :(得分:0)
Real Robocode将很快获得运行.NET机器人的插件。 我花了两年时间才实现这一目标。第一年花在重构原始Robocode上。 Java to .NET bridge上的第二个。还有alpha bits。这种方法的好处是可以与最好的Java机器人对抗。实际上机器人里有很大的财富。