• catpad

Клич

Ну, кто ещё хочет принять участие в проекте века The Age of Smalltalk ?
Это будет Великая Игра, верьте мне ! Это будет Веха.
Работы начинаются...

  • catpad

О серьёзности-несерьёзности

Слово в защиту "серьёзного отношения к AOS".
Тут все поспешили высказаться о своём несерьёзном отношении к AOS. А я вот хочу сказать о своём серьёзном отношении: я считаю AOS прототипом RTS-игр будущего.

gianthare, ты же сам сказал: Age of Empires изжила себя. И правильно, изжила. Сколько можно одинаковых игр - меняют картинки до бесконечности, художники трудятся день и ночь, но всё равно принцип один - злобные тупые мужики секутся на мечах. У кого больше мужиков, тот победил.

Мы должны сказать новое веское слово: даешь злобному мужику мозги в голову !
Да, конечно, пока это только для программистов, но, если придумать (не в ближайшем будущем, конечно) нечто вроде visual builder, какой-то drag-and-drop способ задавать стратегию (оставляя, разумеется, тот же самый underlying language), то такая игра становится доступна многим.

  • catpad

Язык AOS

Согласен, что правила разработаны недостаточно. Хочу защитить язык.
Я считаю, что язык надо заморозить. Продолжаю выступать за то, что язык игры должен быть беден. Чем больше возможностей, тем скучней становится играть. На Джаве вообще никто не захочет программировать агентов.
Взгляните на CoreWars. В ней 8-9 комманд. А если бы для CoreWars взяли ассемблер 80х86 ? Да даже и симпатичный PDP-11 ! Кто бы в неё играл ?

- Думаю, типы в AOS нужны по чисто практическим соображениям - они помогают чётко определить аргументы команд. Без типов я, лично, запутался в самом начале придумывания команд.

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

- Операторы. Совершенно замечательное предложение orangykа ввести оператор random. Я немного изменил существующий пример, используя random - стало гораздо веселей ! Но этим, по-моему, следует ограничиться.

Так что предлагаю закрыть тему языка. Есть возражения ?

hare-earring

Пожелания

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

  • с типами / без типов

  • с переменными / с аттрибутами / без ничего

  • какая информация доступна объекту про себя / союзников / противников

  • какие события обязательны / желательны / воспрещаются

  • ...

и базисных свойств игры:

  • баланс маны - самое важное

  • движение объектов

  • защита, нападение

  • ...


и визуализации, если кому-нибудь уже есть что сказать по этому поводу.

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

Бессмысленно писать какой бы то ни было движок не определившись со всеми вышеупомянутыми моментами (as, orangyk - это в ваш огород камень)

Напишите, что еще я забыл.
  • catpad

AOS attacks

as предлагает сделать атаку более приближенной к реальности: то есть атакующий посылает снаряд, которому требуется время на долетание до цели. Таким образом, если атакуют с расстояния Х, то атака подействует через Х циклов ("квантов" времени). Кроме того, у атакуемого есть шанс избежать удара, если он уже ушёл со старой клетки.
По-моему, хорошо !

  • catpad

AOS example

/* The assumption is that I am on WEST, the enemy is on EAST */

Staff {

   on start {
      create 20 p1,p2,p3 as Peasant;
      /* Send peasants to north, west, south */
      set dir = north;
      send 1 message "init_peasant" to p1;
      set dir = west;
      send 1 message "init_peasant" to p2;
      set dir = south;
      send 1 message "init_peasant" to p3;
      
      create 20 a1,a2,a3 as Attacker;
      send 1 "up" to d1,d2,d3;
      send 1 "down" to a1,a2,a3;
   }   	   	
   	
   on kill {
      select by initiator.type {
         on Peasant { 
            /* simply replace the peasant */
            create 20 initiator.name as Peasant;
            set dir = initiator.direction;
            send 1 message "init_peasant";
         }
      }
   }
 
  on message "enemy_agent_located" {
     /* summon Attackers to the initiator.location */
TODO
  }

  on message "enemy_staff_located" {
     /* summon Attackers to the initiator.location */
TODO
  }
      	
}

Agent Peasant {
	
   on message "init_peasant" {
      turn to initiator.dir;
      move 20;
      timer 10 "collect";
   }
   
   on timer "collect" {
      pump 5 to Staff;
      timer 10 "collect";
   }   
}



Agent Spy {
   
   on creation {   	
   	turn east;
   	shield 20;
   	move 20;
   	radar 20;
   	timer 5 "migrate";
   }
   
   on timer "migrate" {
   	/* After some time migrate to another location */
   	turn right;
   	move 20;
   	/* reset timer */
   	timer 5 "migrate";
   }
      
   on attack {
        /* Defend yourself by all means */
   	shield me.mana;
   }
   
   on radar {
      select by initiator.type {
         /* Only enemies are interesting for Spy */
         on enemy.Agent {
            send Staff.distance "enemy_agent_located" to Staff;
         }
         in enemy.Staff {
            send Staff.distance "enemy_staff_located" to Staff;         
         }
      }
   }
      
   on touch {
   }
   
}
  • catpad

Age of Smalltalk

Итак, на обсуждение широкой общественности выносятся правила будущей игры Age of Smalltalk.

Комментарии, новые идеи, дополнения, исправления и пожелания приветствуются !