我目前在学校的最后一年,学习计算机研究的高级国家文凭,基本上在这最后一个学期,我们需要开发一个软件项目,基本上包括一个 * 整个 * 系统。
现在,我想做的是类似Robocode的东西,但我将使用. Net Framework来完成,而不是Java。
什么是机器人代码?
对于那些不知道Robocode是什么的人来说,它基本上是一种编程游戏,人们使用类接口和可下载类中的方法开发自己的机器人,然后他们在竞技场上的自主战斗中互相"战斗"。
(来源:com.com)
所以基本上,正如我所说的,我想使用. Net Framework重新创建这种场景..我在StackOverflow上发布这个问题,希望更有经验的开发人员能够指导我在这个项目中的正确方向。
到目前为止,我的想法基本上是创造:
- 一个离线应用程序,将作为战斗舞台和用户界面,以创建新的战斗与现有的机器人等。
- 一个在线界面,玩家将能够使用注册新的机器人,查看过去的比赛成绩等...
- 很明显,玩家需要使用类接口来创建他们的机器人。
动画和图形(用于实际战斗)
当然,当战斗发生时,会有一些动画和动作,我还没有决定用什么作为媒介。
我目前想到的选择是:
- 正如我在上面第一个要点中所说的,开发一个离线应用程序,作为战场,所有的动画将主要使用C#代码完成
- 或者开发一个Silverlight应用程序来处理动画(因此,将场景从离线应用程序更改为在线应用程序
- 或者,可能是其中最不可行的,使用JavaScript创建战斗动画,比如Canvas
- 您认为哪一种更适合此特定情形?**
开发类和接口
对于开发机器人的玩家,我将提供某些类接口,他们将能够像在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);
}
}
}
为了让战斗真正发生,我正在考虑使用反射来实际读取用户实际使用的方法,并实现它们以在战斗的特定时刻运行和调用它们。
现在,我善意而谦卑地请求你们这些经验丰富的开发人员,在我的这个项目中给我一些指导,并建议我需要做些什么......对于初学者,***这个项目可行吗?***如果确实可行,我需要从哪里开始我的项目?
关于我打算使用的技术和软件:
- . NET框架3.5,使用C#3.0
- 语言集成查询
- SQL服务器2008
- 微软Visual Studio 2008
- jQuery框架
- 可能是Silverlight
我感谢大家,甚至为管理阅读到这一点,在我的问题,我将需要和非常感谢所有的帮助,我可以得到完成这个项目。
感谢您的时间和努力。
顺便说一句,到目前为止,除了Robocode,我发现这些游戏是类似于我试图创建:
6条答案
按热度按时间5q4ezhmt1#
这个项目到底可行吗?
听起来很大。我不知道你有多少时间。这里有一个经验法则:
那么,成功的关键就是“增量开发”和“持续交付”。你的项目规范是这样说的:
我们需要开发一个软件项目,基本上包括一个 * 整个 * 系统。
为此,我建议:
1.创建(即设计、开发和测试)一个小型完整系统
1.重复{备份或版本控制您所拥有的;添加一个新的,整个一点点的系统,并测试它,直到它是令人满意的},直到(你用完了时间)。
e3bfsja22#
当我开始与WPF合作时(这和Silverlight差不多)我最终花了很多时间来弄清楚如何做事情。这是一种与我尝试过的其他方法非常不同的GUI制作方法,似乎有十亿种不同的方法来做事情。我的观点是,如果你没有WPF/Silverlight的经验,我怀疑你需要花很多时间才能把你的思想弄清楚。我想这取决于你已经知道了什么。
除此之外,我全心全意地支持ChrisW关于增量开发的建议。我会给予你一个如何设计游戏的想法。从一个非常简单的机器人API开始,比如两个没有事件、输入或世界知识的函数。只要让机器人移动就可以了。关键是要得到一个功能简单、功能齐全的程序。包括从加载客户端代码到显示结果“战斗”的所有部分。
每个机器人都应该用一个run()方法实现一个接口,并且在自己的dll文件中,当战斗开始时,每个实现了接口的dll都从某个位置加载(使用反射)并示例化,然后开始一场循环战斗,直到1分钟过去(或者随便什么,只是为了看看有什么事情发生):
当时间到了,战斗就结束了。现在你有了一个框架应用程序,你可以开始充实它,它将让你有一个工作的程序,即使你没有时间去实现你想要的所有功能。在run方法中,机器人可以调用您在API中定义的几个移动动作。调用这些动作将改变世界的状态-可能只是一个瓷砖网格,以及每个机器人的位置。
下一步可能是向机器人的run方法添加一个世界视图,将循环更改为:
假设机器人在run方法中仍然只能执行几个移动动作,现在他们可以选择查看世界(或他们所在的部分),这允许他们接近或远离敌人,并避开墙壁。
在下一次迭代中,你可以创建一个API函数来发射大炮(或者任何适合你游戏的东西),实现如何改变世界状态,如何跟踪子弹,如何表现动画等等。循环可以看起来像这样:
我希望这能给你一个想法,你可以迭代充实程序,同时有一个工作程序,反映了游戏的所有领域。我没有太多的经验,实现游戏,所以你应该看看我的建议与批判的眼睛,但这是我会如何解决这个问题。
egdjgwm83#
非常可行。
我建议从后端系统和响应“已编译”robocode的对象开始,“已编译”代码采取什么形式完全取决于你。
然后,创建机器人代码的解释器。或者,听起来你可能只是能够创建.NET类。这是最难的部分的免费赠品。
最后,创建您可能需要的任何UI ......都设置好了。
您可能希望将robots编译为. dll ...尽管如此,您只需要为它们创建通用接口和功能。
6ioyuze24#
可行性完全取决于您的团队的能力、对框架的熟悉程度等。我见过一些人可以在一周内完成这样的任务,还有一些人无法做到这一点以保存他们的生命。
除非我误解了你的意思,否则你提到的反射方法听起来是错误的。你的“Robot”基类应该允许开发人员重写一个或多个方法,从这些方法中他们可以调用“Shoot”、“Move”等函数。
另一个类似的应用程序是Terrarium。开发者可以在分布式环境中对动物进行编码,并让它们与其他动物进行竞争。这是一个.NET 1.1演示应用程序,有点过时,但其中的一些原则可能仍然对你有帮助。这个家伙已经开始重写它:http://weblogs.asp.net/bsimser/archive/2008/07/16/reintroducing-terrarium-now-with-2-0-goodness.aspx
5sxhfpxr5#
所以,有点像virii?
5cnsuln76#
真实的的Robocode将得到运行.NET机器人的插件很快。我花了2年时间来实现这一点。第一年花在重构原始Robocode。第二年在Java to .NET bridge上。还有alpha bits。这种方法的好处是你可以与最好的Java机器人战斗。实际上机器人中有很大的宝藏。