使用.Net开发Robocode类型的游戏,用于学校作业

c0vxltue  于 2023-01-10  发布在  .NET
关注(0)|答案(6)|浏览(138)

我目前在学校的最后一年,学习计算机研究的高级国家文凭,基本上在这最后一个学期,我们需要开发一个软件项目,基本上包括一个 * 整个 * 系统。
现在,我想做的是类似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,我发现这些游戏是类似于我试图创建:

5q4ezhmt

5q4ezhmt1#

这个项目到底可行吗?
听起来很大。我不知道你有多少时间。这里有一个经验法则:

  • 当交付截止日期到来时,如果90%的系统交付了90%的功能,并且100%完成,那么您可以说项目至少90%成功。
  • OTOH如果100%的软件交付100%的功能,但仅完成了90%(即未完成),则没有完成任何内容,项目失败。

那么,成功的关键就是“增量开发”和“持续交付”。你的项目规范是这样说的:
我们需要开发一个软件项目,基本上包括一个 * 整个 * 系统。
为此,我建议:
1.创建(即设计、开发和测试)一个小型完整系统
1.重复{备份或版本控制您所拥有的;添加一个新的,整个一点点的系统,并测试它,直到它是令人满意的},直到(你用完了时间)。

e3bfsja2

e3bfsja22#

当我开始与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)

我希望这能给你一个想法,你可以迭代充实程序,同时有一个工作程序,反映了游戏的所有领域。我没有太多的经验,实现游戏,所以你应该看看我的建议与批判的眼睛,但这是我会如何解决这个问题。

egdjgwm8

egdjgwm83#

非常可行。
我建议从后端系统和响应“已编译”robocode的对象开始,“已编译”代码采取什么形式完全取决于你。
然后,创建机器人代码的解释器。或者,听起来你可能只是能够创建.NET类。这是最难的部分的免费赠品。
最后,创建您可能需要的任何UI ......都设置好了。
您可能希望将robots编译为. dll ...尽管如此,您只需要为它们创建通用接口和功能。

6ioyuze2

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

5cnsuln7

5cnsuln76#

真实的的Robocode将得到运行.NET机器人的插件很快。我花了2年时间来实现这一点。第一年花在重构原始Robocode。第二年在Java to .NET bridge上。还有alpha bits。这种方法的好处是你可以与最好的Java机器人战斗。实际上机器人中有很大的宝藏。

相关问题