当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用.Net开发Robocode类型的游戏,用于学校作业》经验,为你挑选了2个好方法。

我目前在学校的最后一年,攻读计算机研究高等国家文凭,基本上在最后一个学期,我们需要开发一个软件项目,基本上包含一个完整的系统.

现在,我正在考虑做的事情就像Robocode一样,但是我将使用.Net Framework来代替Java.


什么是Robocode?

对于那些你不知道的Robocode是什么,它基本上是一种编程游戏在人们开发利用的类接口和存在的下载类的方法自己的机器人,然后他们在对方的自主战斗竞技场......像这样:

alt text http://articles.techrepublic.com.com/i/tr/cms/contentPics/robocode.gif


所以基本上,正如我所说,我想使用.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);
         }
    }
}

为了实际让战斗发生,我正在考虑使用Reflection来实际读取用户实际使用的方法,并实现它们在战斗的特定时刻运行和调用等等.


现在,我亲切和谦虚地问你经验丰富的开发人员,是指导我一点我的这个项目并告诉我需要做什么......对于初学者来说,这个项目是否可行? 如果确实如此,我需要从哪里开始实际开始我的项目?


至于我打算使用的技术和软件是:

.NET Framework 3.5,带有C#3.0

LINQ(语言集成查询)

SQL Server 2008

Microsoft Visual Studio 2008

jQuery框架

可能是Silverlight


我感谢大家,即使是在我的问题中设法阅读这一点,我将非常需要并非常感谢我完成这个项目的所有帮助.

感谢您的时间和精力.


到目前为止,除了Robocode之外,我发现这些游戏与我想要创建的类似:

NRobot

Virii(感谢Marc)

ChrisW.. 7

这个项目是否可行?

听起来很棒.我不知道你有多少时间.这是一条经验法则:

当发生丢失到期日期时,如果90%的系统提供90%的功能是100%完成,那么您可能会说该项目至少成功90%.

OTOH如果提供100%功能的100%软件仅完成90%(即未完成),那么什么都没有完成,项目失败.

那么,成功的关键是"渐进式发展"和"持续交付".您的项目规范说:

我们需要开发一个软件项目,它基本上包含整个系统.

为此,我建议:

    创建(即设计,开发和测试)一个小型整个系统

    重复{备份或版本控制你拥有的; 在系统中添加一个新的整点,然后测试它直到它满意为止(直到你用完了).


Morten Chris.. 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)

我希望这可以让你了解如何迭代地充实程序,同时拥有一个反映游戏所有领域的工作程序.我没有太多实施游戏的经验,所以你应该以批判的眼光看待我的建议,但这就是我如何解决这个问题.



1> ChrisW..:

这个项目是否可行?

听起来很棒.我不知道你有多少时间.这是一条经验法则:

当发生丢失到期日期时,如果90%的系统提供90%的功能是100%完成,那么您可能会说该项目至少成功90%.

OTOH如果提供100%功能的100%软件仅完成90%(即未完成),那么什么都没有完成,项目失败.

那么,成功的关键是"渐进式发展"和"持续交付".您的项目规范说:

我们需要开发一个软件项目,它基本上包含整个系统.

为此,我建议:

    创建(即设计,开发和测试)一个小型整个系统

    重复{备份或版本控制你拥有的; 在系统中添加一个新的整点,然后测试它直到它满意为止(直到你用完了).



2> Morten Chris..:

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

我希望这可以让你了解如何迭代地充实程序,同时拥有一个反映游戏所有领域的工作程序.我没有太多实施游戏的经验,所以你应该以批判的眼光看待我的建议,但这就是我如何解决这个问题.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有