Разработка Robocode вводит игру с .NET для Школьного Присвоения

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

Во-первых, обязательное (приоритет 1000) ограничение больше или равно для размещения переднего края второго ярлыка в 12 точках от заднего края первого ярлыка.

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

Когда второе ограничение нарушено, первое ограничение будет контролировать расстояние между метками.

12
задан Community 23 May 2017 в 12:17
поделиться

6 ответов

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

Кроме, чем, я искренне поддерживаю suggstion ChrisW о поэтапной разработке. Я дам Вам общее представление о том, как можно приблизиться к дизайну игры. Начните с очень простым API для ботов, скажите две функции без событий, введите или знание мира. Только запустите, заставив ботов переместиться. Точка должна получить полностью программу функционирования с простой функциональностью, включая все части от загрузки клиентского кода к показу получающегося 'сражения'.

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

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)

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

6
ответ дан 2 December 2019 в 20:41
поделиться

действительно ли этот проект выполним вообще?

Это звучит большим. Я не знаю, сколько времени Вы имеете. Вот эмпирическое правило:

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

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

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

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

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

  1. Создайте (т.е. дизайн, разработайте, и тест), маленькая целая система
  2. Повторите {резервное или управление версиями, что Вы имеете; добавьте новое, целое немного к системе, и протестируйте ее, пока это не удовлетворительно} до (у Вас заканчивается время).
7
ответ дан 2 December 2019 в 20:41
поделиться

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

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

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

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

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

1
ответ дан 2 December 2019 в 20:41
поделиться

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

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

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

1
ответ дан 2 December 2019 в 20:41
поделиться

Так, отчасти как virii, затем?

0
ответ дан 2 December 2019 в 20:41
поделиться

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

0
ответ дан 2 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: