Подтвердить что ты не робот

Разработка игры типа Robocode с .Net для назначения школы

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

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


Что такое Robocode?

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

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


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

То, что я имею в виду до сих пор, - это в основном создать:

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

Анимация и графика (для реальных сражений)

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

В настоящее время я имею в виду следующие параметры:

  • Разработка, как я уже сказал в первых выше маркерах, автономного приложения, которое будет служить основанием для битвы, и все анимации будут выполняться с использованием в основном кода С#
  • Или создайте приложение 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 с С# 3.0
  • LINQ (языковой интегральный запрос)
  • SQL Server 2008
  • Microsoft Visual Studio 2008
  • jQuery Framework
  • Возможно, Silverlight

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

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


Btw, до сих пор, кроме Robocode, я нашел эти игры, похожие на то, что я пытаюсь создать

4b9b3361

Ответ 1

Когда я начал работать с WPF (что почти так же, как Silverlight), я в конечном итоге потратил много времени на выяснение того, как это делать. Это совсем другой способ сделать графический интерфейс, чем то, что я пробовал, и, похоже, существует несколько разных способов сделать что-то. Я хочу сказать, что если у вас нет опыта работы с WPF/Silverlight, я подозреваю, что у вас будет много времени, чтобы вы могли обдумать. Я думаю, это зависит от того, что вы уже знаете.

Кроме того, я искренне поддерживаю предложение ChrisW о постепенном развитии. Я дам вам представление о том, как вы можете подойти к дизайну игры. Начните с очень простого API для ботов, скажем, две функции без каких-либо событий, ввода или знания мира. Просто начните с того, что боты будут двигаться. Дело в том, чтобы получить полностью функционирующую программу с простой функциональностью, включая все части от загрузки клиентского кода, чтобы показать результат битвы.

Каждый бот должен реализовывать интерфейс с помощью одного метода run() и находиться в своем собственном файле dll. Когда начинается битва, каждая DLL с реализованным интерфейсом загружается (используя отражение) из определенного места и создается экземпляр. Затем начните битву с циклом до тех пор, пока минута не пройдет (или что-то еще, чтобы увидеть, что что-то происходит):

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

Когда время закончится, битва закончилась. Теперь у вас есть скелетное приложение, которое вы можете начать формировать, и которое даст вам рабочую программу, даже если у вас не будет времени, чтобы сделать все необходимые функции. В методе запуска боты могут вызывать пару действий перемещения, определенных вами в 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)

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

Ответ 2

доступен ли этот проект вообще?

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

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

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

Таким образом, ключом к успеху является "постепенное развитие" и "постоянная доставка". В спецификации вашего проекта указано:

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

Чтобы сделать это, я предлагаю:

  • Создать (т.е. спроектировать, разработать и протестировать) систему small whole
  • Повторите {резервное копирование или контроль версий, что у вас есть; добавьте в систему новый, весь маленький бит и протестируйте его до тех пор, пока он не будет удовлетворительным до тех пор, пока вы не закончите время.

Ответ 3

Это очень возможно.

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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