ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» Игры для программистов | страница 3 |
|
|
|
Другие игры: «Игры для программистов» |
|
|
GreenTea
|
|
Предлагаю посмотреть мою игрушку того же жанра, вдруг понравися ?
Написана на C#, графическая часть реализована с помощью XNA (замена Managed DirectX для .NET).
Сейчас можно писать ботов на 3 языках: C#, Java, VisualBasic. Планирую в скорости добавить к этим трем еще Delphi и Boo.
Подробнее об игре, в том числе обучение, здесь:
http://greenteaz-1.at.vwdhosting.net/Projects/Aerobots/Main.aspx
|
|
|
Crimson 560 EGP
Рейтинг канала: 3(39) Репутация: 130 Сообщения: 3041
Зарегистрирован: 03.09.2003 |
|
Цитата: |
Пусть не пугает Вас ключивое слово ref. Оно означает передать аргумент по ссылке. Тогда как в остальных случая, обьекты этого типа, передаются по значению.
Замечание: Этот метод недоступен из кода Java, поскольку спецификация этого языка не позволяет передавать параметры по ссылке.
|
Афаир, объекты она как раз только по ссылке и позволяет передавать По ссылке нельзя передать базовые типы - intы там всякие и иже с ними.
Не понял что с ракетами. Они что, летят в фиксированную при запуске точку? И занафига такая радость? Ракеты должны цель отслеживать. Как вариант, управление ракетой можно передать еще одному скрипту.
С радаром тоже не дело. Он должен возвращать список хендлов целей, через которые можно узнать координату цели, скорость, здоровье... и заодно сравнив хендлы можно будет понять, тот же это али-баба или другой. А задание сектора обзора можно вообще убрать нафиг - в каждый момент времени нужна максимально полная инфомация обо всех целях вокруг себя.
Еще непонятно, почему истребители могут стрейфиться и зависать в углу карты. Это какие-то неправильные истребители
|
|
|
Rad3X 135 EGP
Репутация: 16 Сообщения: 204 Откуда: Волгоградская Зарегистрирован: 14.12.2003 |
|
Crimson : |
Афаир, объекты она как раз только по ссылке и позволяет передавать По ссылке нельзя передать базовые типы - intы там всякие и иже с ними.
|
Да да, а по идее цель и является объектом, так что как раз её по ссылке и передавать как аргумент.
Ps При попытке создания бота на джавевыдаёт ошибку что не найден файл vjc.exe
_________________ Когда я ем, я глух и нем, хитер и быстр, и дьявольски умен! |
|
|
Guest 2075 EGP
Рейтинг канала: 7(563) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004 |
|
Добрался до колобота (чрез тернии MindRover, ибо там не язык программирования, а мрак связывания блоков в блок-схеме через масс-триггеры (или роутеры) с переподвыподвертами условий от систем слежения).
Качаю. Заодно патчик выцепил.
Надеюсь, нечто вменяемое, а не TankWars, в которые я в своё время не вкурил
Ещё мануал бы на инглише, похоже, в комплект не входит... Там вообще обрезки 31,18 Мб...
_________________ Трещит земля как пустой орех
Как щепка трещит броня |
|
|
Rad3X 135 EGP
Репутация: 16 Сообщения: 204 Откуда: Волгоградская Зарегистрирован: 14.12.2003 |
|
Я щас как раз такую версию гоняю, колобота в смысле, классная игра. Насчёт мануала не переживай он прямо в игре есть, на английской естестьвенно, хотя гдето пробегало, что типа на руском игра есть. Я тут стянул Ceebot демку типа продолжение колобота, чёта не очень пошло.
Зы весит 31мб правда архив после распаковки 90 с копейками метров.
_________________ Когда я ем, я глух и нем, хитер и быстр, и дьявольски умен! |
|
|
Guest 2075 EGP
Рейтинг канала: 7(563) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004 |
|
Да, архив, патч не ставится, т.к. уже проинсталленная игра. Немного попроходил, освоил местный диалект С++... Там хорошая обучалка программингу есть...
Потом пошёл в основную игру. А там, оказывается, можно ножками...
Но уже на 3-й (или 4-й?) миссии, где надо собирать камни, мне стало сильно лениво (двигатель прогресса), посему были набросаны пара скриптиков для нахождения камушка (умные у них радары! В MindRover ты этот радар настрой, наведи, подожди, пока туда что-то попадёт, отфильтруй на правильность цели, а то мало ли что пискнуло, определи направление по корелляции двух сигналов, рассчитай упреждение, и только тогда шмаляй ракетой... Тут же поставил функцию - и вуаля!), и для возврата на базу.
Чтобы совсем от компа не отходить, подъём и спуск оставил на ручнике Хотя можно было бы и не... И ещё НАСАвцы прислали скрипт по замене батареек, но не прислали функцию по контролю уровня заряда... А зря, это нужно мониторить! Завтра напишу автономный блок...
З.Ы.: полной версии, с музыкой, ни у кого нету случаем?
_________________ Трещит земля как пустой орех
Как щепка трещит броня |
|
|
Crimson 560 EGP
Рейтинг канала: 3(39) Репутация: 130 Сообщения: 3041
Зарегистрирован: 03.09.2003 |
|
Guest : |
Но уже на 3-й (или 4-й?) миссии, где надо собирать камни, мне стало сильно лениво (двигатель прогресса), посему были набросаны пара скриптиков для нахождения камушка, и для возврата на базу.
|
А кстати как? Я до этого момента проходил полностью программно, а вот потом так и не вкурил как отличить один камень от другого. В итоге первый камень находится нормально, потом эта фигня взлетает, поднимает только что принесенный камень, бросает... в общем фигня получается
Да и с перезарядкой там такая муть, что этот грузовичок пока сам к заряжаемому пристроится, посадит свою батарею, и приходится флаером вручную лететь за новой батареей, а на это гробится батарея флаера... короче я плюнул и дальше делал все вручную. Заодно там где-то лунный ровер нашел Толку с него правда ноль - ни самому покататься, ни груз повозить. Но прикольно.
А с MindRover они чего-то перенедомудрили. Я бы понял если бы вайры работали как тупые провода - нейрон генерит сигнал определенной мощности, вайр его передает. Так нет, устроили кучу каких-то опций, еще не каждые два нейрона можно вайром соединить чтобы оно работало... какие-то странные глюки, когда сигнал заедает и блокирует цепь, и бот начинает крутиться на месте и стрелять хотя не видит ничего что могло бы триггерить эти действия... туманнн... то ли там логика работает не так как я думаю, то ли одно из двух. Вещица конечно занятная, но недоработанная.
|
|
|
Kalembas 1335 EGP
Рейтинг канала: 5(114) Репутация: 263 Сообщения: 18999 Откуда: Санкт-Петербург Зарегистрирован: 21.03.2003 |
|
Очень просто.. Ищешь камень в пределах заданного радиуса - самый дальний от бота. И возвращаешь на базу или к флагу. И так по кругу, пока увы, ничего не останется от камней. Они все будут у флага.
_________________ Делаешь – не бойся, боишься – не делай, а сделал – не сожалей... |
|
|
Guest 2075 EGP
Рейтинг канала: 7(563) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004 |
|
А фильтр по расстоянию + order Если запомнит - то так и полетит за новым по goto. А если будет глюк и переинициализация радара (один раз было, хотя по идее возврата на строчку вверх быть не может по определению ), тогда поднимет и бросит...
Kalembas : |
Ищешь камень в пределах заданного радиуса - самый дальний от бота.
|
Во, другой вариант, поизящнее... Я задавал минимальный радиус, где искать НЕ НАДО
Пример того, как одну задачу можно решить через разные
Crimson : |
А с MindRover они чего-то перенедомудрили.
|
А там надо просто аккуратно обращаться с условиями триггеринга, тогда и loop'ов не будет. У меня не заедало. Но стоило это мне небольшого листа бумаги с блок-схемой и подробным алгоритмом на ВСЕ случаи, и кучи broadcast'ов на каждое действие... Но работало!
_________________ Трещит земля как пустой орех
Как щепка трещит броня |
|
|
Crimson 560 EGP
Рейтинг канала: 3(39) Репутация: 130 Сообщения: 3041
Зарегистрирован: 03.09.2003 |
|
Guest : |
А фильтр по расстоянию + order Если запомнит - то так и полетит за новым по goto. А если будет глюк и переинициализация радара (один раз было, хотя по идее возврата на строчку вверх быть не может по определению ), тогда поднимет и бросит...
|
Хм... order, order... а что такое order? Помню там вроде было что-то в хелпе про то что у объектов есть номера, но как до них добраться я тогда не понял. Что ли скачать и еще раз попробовать...
Guest : |
А там надо просто аккуратно обращаться с условиями триггеринга, тогда и loop'ов не будет. У меня не заедало. Но стоило это мне небольшого листа бумаги с блок-схемой и подробным алгоритмом на ВСЕ случаи, и кучи broadcast'ов на каждое действие... Но работало!
|
А ты думаешь у меня не было листа бумаги и кучи бродкастов?
Вообще схема была такая. Четыре основные группы турбин (крафт - ховер) - левая передняя, левая задняя, правая передняя, правая задняя. На каждой группе (там по три турбины кажется было) висит по три бродкаста - тягу на марш, тягу на реверс, тягу на ноль (хотя ноль я в итоге не использовал). Дальше было пять бродкастов - полный вперед, полный реверс, развороты вправо/влево и стоп. Они подключались к соответствующим бродкастам для групп. Дальше было два радара "с перехлестом": если левый видит цель - поворот налево, правый - направо, оба - стреляем. Если ни один не видел цель, то крафт должен был двигаться вперед (но нифига не двигался), если левый видел стену то активировался поворот направо, если левый стену не видел но видел правый - поворот налево.
Что происходило в итоге. Если бот спавнился так что перед ним не было ничего - он тупо стоял и нифига не делал. Если видел другого бота - все шло по плану: разворот, противник перед собой - выстрел, разворот обратно (ибо по инерции продолжал разворачиваться), опять выстрел... Красота короче. Но второй от взрыва отлетал к стенке - и при виде стенки начинал крутиться на месте в одну сторону (но не обязательно каждый раз в одну и ту же) и стрелять в никуда.
У меня было две теории - что бродкаст клинит если подать ему на вход несколько вайров, и что on/off это не сигнал а эвент. Но чесгря на тот момент я уже заколебался со всем этим возиться, и представив что все эти вайры сейчас придется сносить и переподключать - снес саму игруху и решил писать свою Правда до нее тоже руки толком не дошли
|
|
|
Rad3X 135 EGP
Репутация: 16 Сообщения: 204 Откуда: Волгоградская Зарегистрирован: 14.12.2003 |
|
Насчёт зарядки я добавлял конструкцию if и в ней прописывал, что если заряд меньше определённого уровня чтоб летел заряжаться, это внутри цикла поиска цели.
А отличать камни друг от друга я даже не знал, что так мона, я делал проще, сделал чтоб бот ложил камни сразу в конвертер, потом ждал пока сделается а потом относил в сторону, потом новый цикл.
_________________ Когда я ем, я глух и нем, хитер и быстр, и дьявольски умен! |
|
|
Guest 2075 EGP
Рейтинг канала: 7(563) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004 |
|
Crimson : |
Что происходило в итоге. Если бот спавнился так что перед ним не было ничего - он тупо стоял и нифига не делал. Если видел другого бота - все шло по плану: разворот, противник перед собой - выстрел, разворот обратно (ибо по инерции продолжал разворачиваться), опять выстрел... Красота короче. Но второй от взрыва отлетал к стенке - и при виде стенки начинал крутиться на месте в одну сторону (но не обязательно каждый раз в одну и ту же) и стрелять в никуда.
|
1) Забыл про инициализацию
2) on/off = event
Я делал многослойную компоновку: слой "поиск", слой "преследование", слой "атака".
При долгом преследовании по таймеру преследование отрубалось и начинался поиск. С атаки был условный переход опять же на поиск. Инициализация обязана быть, а то так и будет стоять...
Rad3X : |
Насчёт зарядки я добавлял конструкцию if и в ней прописывал, что если заряд меньше определённого уровня чтоб летел заряжаться, это внутри цикла поиска цели.
|
Я вставил условие проверки на 15% заряда прямо в while цикла поиска... Т.е. если заряда мало, то лучше вернуться и дозарядиться. Более сложный алгоритм, который я сейчас мучаю, обязан определить расстояние до цели и решить, хватит ли заряда долететь. Только удельное использование посчитать надо...
Долго искал собственно свойство уровня заряда. Нашёл в отладочной информации. Всё-таки надо полное руководство...
З.Ы.: фулл-автомат рулит!
_________________ Трещит земля как пустой орех
Как щепка трещит броня |
|
|
Kalembas 1335 EGP
Рейтинг канала: 5(114) Репутация: 263 Сообщения: 18999 Откуда: Санкт-Петербург Зарегистрирован: 21.03.2003 |
|
Цитата: |
Долго искал собственно свойство уровня заряда.
|
Насколько я помню: this.PowerCell.Energy()
Ну или как то так.
У меня практически во все функции была встроена проверка уровня заряда батареи, и простейший IF на 20%... Более сложную функцию писать было нецелесообразно решаемым в миссиях задачам.
_________________ Делаешь – не бойся, боишься – не делай, а сделал – не сожалей... |
|
|
Riedd 77 EGP
Репутация: 13 Сообщения: 67 Откуда: Санкт-Петербург Зарегистрирован: 14.04.2005 |
|
По поводу русского колобота, он есть в Осле(91 метра )...
|
|
|
GreenTea
|
|
Crimson : |
Цитата: |
Пусть не пугает Вас ключивое слово ref. Оно означает передать аргумент по ссылке. Тогда как в остальных случая, обьекты этого типа, передаются по значению.
Замечание: Этот метод недоступен из кода Java, поскольку спецификация этого языка не позволяет передавать параметры по ссылке.
|
Афаир, объекты она как раз только по ссылке и позволяет передавать По ссылке нельзя передать базовые типы - intы там всякие и иже с ними.
|
Как не хочется сейчас читать вам лекцию о ссылочных типах и типах значениях.. Вкратце расскажу: все типы в .NET делятся на ссылочные и типы значения. Идентификатор ссылочного типа представляет собой ссылку. Идентификатор же типа значения - соответственно значение. Теперь постарайтесь уловить специфику: Параметры в методы передаются только по значению. НО! для ссылочных типов этим значением есть ссылка, для типов значения - значение. Это происходит от того что параметры создаются копированием, для ссылочных типов копируется ссылка, ну а для значений - значение. Таким образом это ошибка говорить что параметры в методы передаются по ссылке.
Crimson вы придрались к слову Обьекты? Зачем придираться ? Ведь суть и так понятна.. Имелось ввиду параметры, или аргументы.
Ключевое слово ref означает что параметр в любом случае будет ссылкой - будь то на ссылочный тип или тип значение.
[/quote]
Crimson : |
Не понял что с ракетами. Они что, летят в фиксированную при запуске точку? И занафига такая радость? Ракеты должны цель отслеживать. Как вариант, управление ракетой можно передать еще одному скрипту.
|
Если цель для ракеты указана не верно, то они летят в нижний левый угол карты. Может быть и не стоило так делать.. Но неужели комуто может взбрести создавать бота который намеренно будет стрелять ракетами на право и на лево не прицеливаясь?..
Целью ракеты является точка на карте, где предположительно находится
вражеский истребитель. Эту точку возвращает метод
Код: |
/** ДЕЙСТВИЯ:
* В target_point помещается местоположение ближайшей цели
* ВОЗВРАЩАЕТ: цель найдена?
*/
bool radar(ref point target_point, radarzone zone);
enum radarzone { near , far, left, right, front, behind} // зона сканирования
бота stalker
|
Ракеты запускать необходимо методом:
Код: |
/** ВОБЩЕМ:
* стреляет из оружия w, если оружие
* самонаводящееся то в target - предполо-
* жительное местонахождение цели, иначе
* значение по умолчанию для point.
*/
void fire(weapon w, point target);
enum weapon { shot, laser, bomb, rocket }; // разновидности оружия
В версии 1.00, эта команда используется только для стрельбы ракетами.
|
желательно сразу после сканирования радаром.
Crimson : |
С радаром тоже не дело. Он должен возвращать список хендлов целей, через которые можно узнать координату цели, скорость, здоровье... и заодно сравнив хендлы можно будет понять, тот же это али-баба или другой. А задание сектора обзора можно вообще убрать нафиг - в каждый момент времени нужна максимально полная инфомация обо всех целях вокруг себя.
|
Согласен. Есть еще что улучшать..
Crimson : |
Еще непонятно, почему истребители могут стрейфиться и зависать в углу карты. Это какие-то неправильные истребители
|
зато маневренности больше. Бот Neo в схватке всех ботов, который только уворачивается от ракет и всех остальных летящих в него предметов, умирает всреднем в 2.5 раза реже
|
|
|
GreenTea
|
|
Rad3X : |
Да да, а по идее цель и является объектом, так что как раз её по ссылке и передавать как аргумент.
|
цель - это точка карте - struct point {...}
Rad3X : |
Ps При попытке создания бота на джавевыдаёт ошибку что не найден файл vjc.exe
|
Буду этот вопрос решать. Всю информацию смотите на сайте:
http://greenteaz-1.at.vwdhosting.net/Projects/Aerobots/Main.aspx
|
|
|
GreenTea
|
|
Выложил обновление до версии v1.01.
http://webdrive.reborn.ru/__GreenTea/Projects/AEROBOTS/Aerobots_v1.01_exe.rar
+ Переработан редактор кода - исправлены некоторые баги и добавлена подсветка строк где были обнаружены ошибки компиляции
+ Добавлен новый язык написания ботов: JScript (для .NET)
|
|
|
Rad3X 135 EGP
Репутация: 16 Сообщения: 204 Откуда: Волгоградская Зарегистрирован: 14.12.2003 |
|
Guest : |
Я вставил условие проверки на 15% заряда прямо в while цикла поиска
|
Ну дык и я о том же, тока у меня уровень от 30% до 50% потому как меньше не хватает. Также встроил в боевого бота эту проверку, тока вот проблема терь не знаю как сделать чтоб он ещё и чинить летел если повреждён на определённый процент.
GreenTea : |
Параметры в методы передаются только по значению. НО! для ссылочных типов этим значением есть ссылка, для типов значения - значение. Это происходит от того что параметры создаются копированием, для ссылочных типов копируется ссылка, ну а для значений - значение.
|
Вообще речь шла о джаве, но насколько я вижу из этого твоего пояснения в сишарп тоже самое. Тока вот ссылки по значению не передаются, создаётся новая ссылка и ей присваивается значение ссылки переданной в качестве аргумента. То есть значение не копируется, а новая ссылка указывает на тот же объект(то бишь значение), что и старая ссылка. Это верно для объектов, а для простых типов происходит копирование значения из одной переменной в другую.
GreenTea : |
Таким образом это ошибка говорить что параметры в методы передаются по ссылке.
|
как раз таки не ошибка, как выше написал, объекты передаются по ссылке, простые типы передаются по значению
GreenTea : |
Имелось ввиду параметры, или аргументы.
Ключевое слово ref означает что параметр в любом случае будет ссылкой - будь то на ссылочный тип или тип значение.
|
Думаю никто тут не придирался, а хотел сказать, что параметр будет ссылкой или нет зависит от того, простой тип передаётся в качестве аргумента или ссылка на объект.
Зы чёт я написал, сам не понял чё написал
_________________ Когда я ем, я глух и нем, хитер и быстр, и дьявольски умен! |
|
|
Guest 2075 EGP
Рейтинг канала: 7(563) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004 |
|
Rad3X : |
терь не знаю как сделать чтоб он ещё и чинить летел если повреждён на определённый процент.
|
Так тм свойство повреждения тоже вроде было... Надо покопаться...
Вот: shieldLevel
Других параметров подобного рода нет. Меняется, также, как и батарейка, от 1.00 до 0.00...
Kalembas : |
Насколько я помню: this.PowerCell.Energy()
Ну или как то так.
|
Не совсем. energyCell.energyLevel
(там всегда self, не умеет между объектами он связь держать, а то можно было бы создавать ботов-дозаправщиков)
Правда, кто мне объяснит смысл параметра energyCell.shieldLevel ?
_________________ Трещит земля как пустой орех
Как щепка трещит броня |
|
|
Rad3X 135 EGP
Репутация: 16 Сообщения: 204 Откуда: Волгоградская Зарегистрирован: 14.12.2003 |
|
Что шильд левел я в курсе там прям на полоске написано, а вот что так energyCell.shieldLevel как то не додумал, по идее это заряд, ну ща попробую видно буит.
_________________ Когда я ем, я глух и нем, хитер и быстр, и дьявольски умен! |
|
|
|
|
|
Другие игры: «Игры для программистов» |
|
|