Разработка игры типа Robocode с .Net для школьного задания - PullRequest
12 голосов
/ 03 февраля 2009

Я в настоящее время учусь на последнем курсе в школе, готовлюсь к высшему национальному диплому по информатике, и в основном в этом последнем семестре нам нужно разработать программный проект, который в основном включает в себя целую систему .

Теперь я собираюсь сделать что-то вроде Robocode , но вместо Java я буду делать это с .Net Framework.


Что такое Робокод?

Для тех из вас, кто не знает, что такое Robocode, это в основном своего рода игра для программирования, в которой люди разрабатывают своих собственных роботов, используя методы из интерфейсов классов и загружаемых классов, которые существуют, а затем они сражаются друг друга в автономной битве на арене ... вот так:

альтернативный текст 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 (Language Integrated Query)
  • SQL Server 2008
  • Microsoft Visual Studio 2008
  • jQuery Framework
  • Возможно Silverlight

Я благодарю вас всех, даже за то, что мне удалось прочитать этот вопрос до этого момента, и я буду нуждаться и очень ценю всю помощь, которую я могу получить, чтобы закончить этот проект.

Спасибо за ваше время и усилия.


Кстати, до сих пор, кроме Робокод , я обнаружил, что эти игры похожи на то, что я пытаюсь создать:

Ответы [ 6 ]

7 голосов
/ 03 февраля 2009

возможен ли этот проект вообще?

Звучит громко. Я не знаю, сколько у тебя времени. Вот правило:

  • Когда наступает окончательный срок сдачи, если 90% системы, обеспечивающей 90% функциональности, завершены на 100%, вы можете сказать, что проект по крайней мере на 90% успешен.

  • OTOH, если 100% программного обеспечения, обеспечивающего 100% функциональности, завершено только на 90% (то есть, не завершено), то ничто не завершено, и проект является неудачей.

Ключом к успеху являются «постепенное развитие» и «постоянная поставка». В спецификации вашего проекта написано:

Нам необходимо разработать программный проект, который в основном включает в себя систему целом .

Для этого я предлагаю:

  1. Создание (т.е. проектирование, разработка и тестирование) небольшого целого системы
  2. Повторите {резервное копирование или контроль версий, что у вас есть; добавьте новый, совсем маленький кусочек в систему и проверяйте его до тех пор, пока он не станет удовлетворительным} до (у вас не хватит времени).
6 голосов
/ 03 февраля 2009

Когда я начал работать с 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. Их вызов изменит состояние мира - возможно, просто сетку плиток и местоположение каждого бота.

Следующим шагом может быть добавление представления о мире к методу запуска ботов, изменив цикл следующим образом:

while (time is not up)
   generate random sequence for bots
   call run(WorldView) on each bot
   draw(world)

Предположим, что боты все еще могут выполнять только пару действий в своем методе выполнения. Теперь у них есть возможность увидеть мир (или его часть), который позволяет им двигаться к врагам или от них и избегать стен.

В следующей итерации вы могли бы создать одну 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 голос
/ 03 февраля 2009

выполнимость полностью зависит от способностей вашей команды, знакомства с фреймворком и т. Д. Я видел людей, которые могли бы выкинуть что-то подобное за неделю, и тех, кто не мог сделать это, чтобы спасти свою жизнь.

Подход рефлексии, о котором вы говорите, звучит как неправильный трек, если я вас не неправильно понимаю. Ваш базовый класс «Robot» должен позволять разработчикам переопределять один или несколько методов, из которых они могут вызывать такие функции, как «Shoot», «Move» и т. Д.

Еще одно приложение, похожее на это, - Terrarium. Разработчики могут кодировать животных и противопоставлять их другим в распределенной среде. Это было демо-приложение .NET 1.1, и оно немного устарело, но некоторые принципы все еще могут быть вам полезны. Этот парень взял на себя переписать это: http://weblogs.asp.net/bsimser/archive/2008/07/16/reintroducing-terrarium-now-with-2-0-goodness.aspx

1 голос
/ 03 февраля 2009

Это очень выполнимо.

Я предлагаю начать с серверной системы и объектов, которые реагируют на «скомпилированный» робокод. Какую форму принимает этот «скомпилированный» код - все, что вам нужно.

Затем создайте интерпретатор для робокода. Или, похоже, вы можете просто создавать классы .NET. Это халява на самой сложной части.

Наконец, создайте любой интерфейс, который вам может потребоваться ... все готово.

Возможно, вы захотите, чтобы роботы компилировались как .dlls ... тем не менее, вам просто нужно создать общий интерфейс для них и функциональность.

0 голосов
/ 15 января 2010

Real Robocode скоро получит плагин для запуска роботов .NET. Мне потребовалось 2 года, чтобы достичь этого. Первый год потратил на рефакторинг оригинального Robocode. Второй на мост Java к .NET . И есть альфа-биты . Этот подход имеет то преимущество, что вы можете сражаться с лучшими роботами Java. На самом деле в роботах есть большое сокровище.

0 голосов
/ 03 февраля 2009

Итак, вроде как virii , тогда?

...