nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 04:17



Reply to topic  [ 40 posts ]  Go to page Previous  1, 2, 3  Next
Robot Warfare 1 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Народ продолжает спрашивать по почте про RW1, поэтому я сегодня собрал всё что надо и выложил по старому адресу проекта:

http://robots.chat.ru

Качайте, кому интересно - там даже регистрационный ключ есть (типа варез) :roll:

_________________
:dj: https://mastodon.social/@Shaos


19 May 2011 23:03
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Так как 3D версия у меня застопорилась, решил вернуться к первоисточнику - появилась мысль сделать реал-тайм стратегию Robot Warfare 2D с возможностью программировать юнитов :)

P.S. За основу можно взять исходники виндовой версии RW1, выкинув оттуда весь WinAPI код, заменив вывод графики на SDL спрятанный под одним уровнем абстракции, чтобы в будущем к примеру можно было на iPad переписать. Можно также графику сделать более похожей на первую версию, а также звуки из первой версии надо вернуть обратно.

P.P.S. В коде есть ряд известных ошибок, которые надо исправить:
- проверить имплементацию регистра S (глубина стека);
- заимплементить COPYP, SENDP, RECVP;
- поправить код зарядки у реактора (должна быть единица энергии за 5 тактов);
- если стрелять навстречу идущему роботу, то снаряд не должен теряться;
- иногда при движении робота сквозь снаряд или взрывы на экране остаётся висеть половинка робота.

_________________
:dj: https://mastodon.social/@Shaos


14 Jan 2013 14:45
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
Народ продолжает спрашивать по почте про RW1, поэтому я сегодня собрал всё что надо и выложил по старому адресу проекта:

http://robots.chat.ru

Качайте, кому интересно - там даже регистрационный ключ есть (типа варез) :roll:


О - нашёл упоминание про "Robot Warfare 1" в википедии :)

_________________
:dj: https://mastodon.social/@Shaos


14 Jan 2013 21:05
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
Так как 3D версия у меня застопорилась, решил вернуться к первоисточнику - появилась мысль сделать реал-тайм стратегию Robot Warfare 2D с возможностью программировать юнитов :)

P.S. За основу можно взять исходники виндовой версии RW1, выкинув оттуда весь WinAPI код, заменив вывод графики на SDL спрятанный под одним уровнем абстракции, чтобы в будущем к примеру можно было на iPad переписать. Можно также графику сделать более похожей на первую версию, а также звуки из первой версии надо вернуть обратно.

P.P.S. В коде есть ряд известных ошибок, которые надо исправить:
- проверить имплементацию регистра S (глубина стека);
- заимплементить COPYP, SENDP, RECVP;
- поправить код зарядки у реактора (должна быть единица энергии за 5 тактов);
- если стрелять навстречу идущему роботу, то снаряд не должен теряться;
- иногда при движении робота сквозь снаряд или взрывы на экране остаётся висеть половинка робота.


Исходники замечательно собираются борландовским фришным компилятором из под Wine (эмулятор винды в Linux), но у программ есть проблемы в Wine, которых нет в живой винде:

Image

Как видно в редакторе съезжает подсветка синтаксиса, а в визуализаторе боёв не рисуются камни...

Также обнаружил, что хоть я и выкатывал последнюю официальную версию "Robot Warfare 1" в 2003, многие исходные файлы помечены 2005-м годом - значит я что-то с исходниками делал, только что не помню...

P.S. В 2005 году я также хотел новый сайт про RW1 организовать по адресу http://rwar.net вот с такой вот мордой (жена-дизайнер смастерила):

Image

_________________
:dj: https://mastodon.social/@Shaos


16 Jan 2013 16:50
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
Как видно в редакторе съезжает подсветка синтаксиса, а в визуализаторе боёв не рисуются камни...


Проблему с камнями исправил - файл ресурсов STONE.BMP почему-то являлся валидной картинокй только в винде - пересоздал его заново и пересобрал - черные квадраты исчезли :)

_________________
:dj: https://mastodon.social/@Shaos


16 Jan 2013 17:36
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
На всякий случай перепечатываю сюда правила проведения классических RW1-соревнований - чтобы было :)

Quote:
Правила были установлены в 1999 и слегка подправлены в 2000 году - с тех пор не меняются. Соревнования проходят на одной карте, которая генерируется из даты проведения соревнований и числа участвующих роботов (способ генерации карты последний раз менялся в июне 2001 года - вместе с переходом на версию 2.0). Роботы воюют по двое - каждый с каждым по два раза (второй раз роботы меняются местами на карте) в пределах своего класса (о классах см.далее). Каждая битва ведется в течении 10000 тактов боевого времени. Выигрывает робот, убивший соперника и оставшийся в живых. В случае, если во время боя никто не погибнет, результатом игры считается НИЧЬЯ. То же самое относится к случаю, когда выжил никого не убивший робот (например, погибший робот просто упал в яму или выполнил некорректную инструкцию).

Все роботы разделены на классы. Самым лучшим считается класс А. По результатам боев в классе А высчитывается десятка лучших роботов (с учетом всех предыдущих соревнований). Каждый класс содержит 21 робот (кроме последнего класса - там может быть от 10 до 29 роботов). В одном бою участвуют только два робота из одного класса. Если в классе представлены N роботов (обычно 21), то проводится N*(N-1) боев. Каждый робот участвует в 2*(N-1) боях. Например, если в одном классе 21 робот, то проводится 21*20=420 боев (каждый с каждым по два раза) и каждый робот участвует в 40 боях. После каждого боя 2 очка приписывается роботу-победителю, а проигравший получает 0 очков. При ничье оба робота получают по 1 очку. В случае 21 робота, максимальное количество очков, которое может набрать робот - 80. Первый робот в каждом классе по итогам боев в этом классе называется "сквозной робот" ( или просто "сквозняк" : ) - он переходит в верхний класс и воюет там в этих же соревнованиях.

Вообще процесс игры можно представить так - существует большой список роботов, расположенных на своих местах по итогам последних соревнований. Новые роботы помещаются в конец списка по мере поступления. Алгоритм проведения соревнований:
1. Удаление роботов, которые были удалены игроками
2. Разбиение всего списка роботов на группы по 20 (в последнем классе допускается наличие от 10 до 29 роботов)
3. Назначение последнего класса текущим
4. Проведение соревнования в текущем классе
5. Если текущий класс не является последним, то пометка последних ТРЕХ роботов, как переходящих в нижний класс
6. Если текущий класс является последним, то удаление последних ТРЕХ роботов и роботов, набравших 0 очков
7. Если текущий класс не является первым, то переход робота занявшего ПЕРВОЕ место в верхний класс (сквозной робот) и пометка роботов, занявших ВТОРОЕ и ТРЕТЬЕ место, как переходящих в верхний класс
8. Если текущий класс является первым, то назначение робота, занявшего ПЕРВОЕ место, победителем соревнований. Переход к 10
9. Назначение верхнего класса текущим. Переход к 4
10. Перемещение роботов, помеченных как переходящих в верхние или нижние классы.
11. Объединение всех роботов в один большой список для следующих соревнований

_________________
:dj: https://mastodon.social/@Shaos


19 Jan 2013 09:37
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Вот ещё откопал скриншот 2002 года, показывающий возможности виндовой версии ;)

Image

Картинка кликабельная!

_________________
:dj: https://mastodon.social/@Shaos


19 Jan 2013 10:35
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
На днях сидел с младшей дочкой ночью (ей как обычно не спалось) и от нечего делать набросал новую графику для "Robot Warfare 1":

Image

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

P.S. Сейчас у меня задача перевести код на голимый Си (там C++ очень немного и он не страшный) и абстрагировать уровень вывода графики и звука, чтобы можно было переставить c WinAPI на SDL или на что угодно.

_________________
:dj: https://mastodon.social/@Shaos


19 Jan 2013 10:36
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
P.S. Сейчас у меня задача перевести код на голимый Си (там C++ очень немного и он не страшный) и абстрагировать уровень вывода графики и звука, чтобы можно было переставить c WinAPI на SDL или на что угодно.


Всё - код переведён на голимый Си :roll:

_________________
:dj: https://mastodon.social/@Shaos


19 Jan 2013 23:36
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Приведу мысли о возможных расширениях игры. В 2005 году я уже предложил роботам RW1 играть в футбол:

Image

Как видно к существующим типам клеток (тип клетки задаётся 4 битами) добавляются новые (помечены жирным шрифтом):
0 - пусто (робот может проезжать по этой клетке);
1 - яма (робота погибает попав в яму, робот не видит ничего за ямой из-за выходящего из неё дыма, однако снаряды могут пролетать через яму);
2 - камень (робот не может пройти сквозь камень, но может его расстрелять пятью выстрелами);
3 - ящик со снарядами (робот может его подобрать, при попадании снаряда происходит взрыв 3x3);
4 - ядерный реактор (робот не может пройти сквозь реактор, может около него подзаряжаться, при попадании снаряда происходит взрыв 5x5 и остаётся яма на месте реактора);
5 - летящий снаряд (робот может пройти сквозь эту клетку);
6 - робот (чужой робот, которого надо убить);
7 - свой робот (в режиме командных боёв - таких роботов убивать ненадо);
8 - мяч для игры в футбол (или вообще любой предмет, который робот может толкать перед собой);
9 - твёрдый камень (робот не может его расстрелять);
10 - стена вокруг поля боя;
11 - ворота первой команды;
12 - ворота второй команды;
13 - зарезервировано на будущее;
14 - зарезервировано на будущее;
15 - зарезервировано на будущее.

P.S. Код 7 является "виртуальным", т.к. таким кодом видятся клетки со своим роботом (т.е. код клетки с роботом всё-таки 6). В 2005 году я думал и ворота (11 и 12) сделать виртуальными - разные коды будут видится разным командам - но теперь я думаю, что это плохая идея - просто робот должен знать номер своей команды (можно ввести новый регистр J).

P.P.S. У каждой клетки кроме 4-битного типа есть ещё 4-битное состояние (например кол-во "жизней" у камня или направление полёта снаряда) и дополнительный 8-битный идентификатор, в котором сейчас хранится порядковый номер робота, но в будущем можно хранить идентификатор тайловой картинки в игре (т.е. например камни или пустые клетки могут выглядеть по разному в разных частях поля).

_________________
:dj: https://mastodon.social/@Shaos


20 Jan 2013 09:59
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
Shaos wrote:
P.S. Сейчас у меня задача перевести код на голимый Си (там C++ очень немного и он не страшный) и абстрагировать уровень вывода графики и звука, чтобы можно было переставить c WinAPI на SDL или на что угодно.


Всё - код переведён на голимый Си :roll:


Старые C/C++ исходники досовской "Robot Warfare 1 Open Game" опубликованные ещё в 2001 году (5.6K строк кода):

https://gitlab.com/shaos/rw1o

Новые чисто сишные исходники виндовой версии - прототипа "Robot Warfare 2D" (7.6К строк кода):

https://gitlab.com/shaos/rw2d

Чтобы собрать запускаем make.bat (надо иметь борландовский виндовый компилятор - пути править в make.bat и makefile)

P.S. Исходники редактора rw1_edit (являющегося ещё и средой разработки) не выкладываю т.к. автор большей его части не я...

P.P.S. Переселился на gitlab летом 2018 года

_________________
:dj: https://mastodon.social/@Shaos


Last edited by Shaos on 23 Jan 2013 20:37, edited 1 time in total.



20 Jan 2013 14:32
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
В программу RW2D встроен старый компилятор RW1_COMP ("новый" RW1C не могу встроить - он написан как самостоятельное приложение и опубликован под GPL ещё в 2006 году). Так вот на старом языке RW1 я только что написал робота, следующего за кликом мыши, причём если клик мыши был на вражеском роботе или на камне, то наш робот выйдя на прямую линию выстреливает 5 снарядов в направлении клетки, в которую кликал игрок (правда вражеский робот может оттуда уже уйти, тогда игрок должен перекликать в новое место):
Code:
robot "Follower"
author "Shaos"
left eye
right eye
back gun
start:
  bb = 0
  recv bb
  if N>=0 : start
received:
  % received code from mouse
  oo=bb
%  say "received coordinates:"
%  print X
%  print Y
%  print oo
  xx=X
  yy=Y
go_loop:
  if yy>0 : go_straight
  if yy==0 : go_left_right
  left
  left
  yy=-yy
  xx=-xx
  goto go_straight
go_left_right:
  if xx==0 : go_finish
  if xx<0 : go_left
  % go right
  right
  tt=yy
  yy=xx
  xx=-tt
  goto go_straight
go_left:
  left
  tt=xx
  xx=yy
  yy=-tt
go_straight:
  if xx!=0 : go_step
  if oo==2 : do_kill
  if oo==6 : do_kill
go_step:
%  say "step"
  step
  if N>0 : go_check
  yy=yy-1
%  print xx
%  print yy
  recv bb
  if N<0 : received
  goto go_loop
go_check:
  recv bb
  if N<0 : received
  goto go_straight
do_kill:
  left
  left
  act back
  act back
  act back
  act back
  act back
%  left
%  left
%  oo = 0
  goto start
go_finish:
  say "I'm here"
  goto start
  end

_________________
:dj: https://mastodon.social/@Shaos


21 Jan 2013 00:52
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
... и абстрагировать уровень вывода графики и звука, чтобы можно было переставить c WinAPI на SDL или на что угодно.


Еще вариант - графику выводить через OpenGL, а звук - через libmikmod
Я этот вариант 10 лет назад пробовал - получилось весело ;)
А еще OpenGL позволяет делать красивые эффекты с огнем и дымом...

P.S. Вариант OpenGL+libmikmod был проверен в Linux, Windows и вот теперь MacOS X

_________________
:dj: https://mastodon.social/@Shaos


24 Jan 2013 22:53
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
Старые C/C++ исходники досовской "Robot Warfare 1 Open Game" опубликованные ещё в 2001 году (5.6K строк кода):

https://gitlab.com/shaos/rw1o


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

Code:
This is "Robot Warfare 1 Open Game"
 version 1.99.2
 Robot Warfare 1  Version 1.99 compatible
 Copyright (c) 1998-2002  Alexander Shabarshin (shaos@mail.ru)
 http://robots.ural.net

 This program is a free software; You can use it,
 redistribute it and modify it under the terms:
 1. You must keep name of author (A.Shabarshin)
    and his e-mail (shaos@mail.ru) in heads
    of these source files and documentation
 2. You can develop free, shareware or commerce
    projects based on this software, but you
    need to send copy of your distributive to
    Alexander Shabarshin (shaos@mail.ru) with
    license for one person

 This program is distributed in the hope that it
 will be useful, but WITHOUT ANY WARRANTY!


Вот думаю перелицензировать под MIT-лицензией (не хочу в этом случае использовать GPL т.к. она ужесточит и усложнит лицензию, а хотелось бы наоборот смягчить и упростить) и старый, и новый код:

Shaos wrote:
Новые чисто сишные исходники виндовой версии - прототипа "Robot Warfare 2D" (7.6К строк кода):

https://gitlab.com/shaos/rw2d

Чтобы собрать запускаем make.bat (надо иметь борландовский виндовый компилятор - пути править в make.bat и makefile)

P.S. Исходники редактора rw1_edit (являющегося ещё и средой разработки) не выкладываю т.к. автор большей его части не я...


т.е. лицензия будет выглядеть так:

Copyright (c) 1998-2013, A.A.Shabarshin

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

_________________
:dj: https://mastodon.social/@Shaos


13 Feb 2013 16:34
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
Вот думаю перелицензировать под MIT-лицензией


перелицензировал:

https://gitlab.com/shaos/rw1o
https://gitlab.com/shaos/rw2d

заодно в RW2D убрал весь WinAPI код в rw1_win.c - теперь можно портировать куда угодно :)

P.S. Переселился на gitlab летом 2018 года

_________________
:dj: https://mastodon.social/@Shaos


14 Feb 2013 21:20
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 40 posts ]  Go to page Previous  1, 2, 3  Next

Who is online

Users browsing this forum: No registered users and 17 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.