клиент

Новый интерфейс

Сегодня, а вернее с выходных придумывал и реализовывал новый интерфейс.

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

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

Реализация сбора рапаппилы

Начал реализацию сбора рапаппилы, самое просто - завел объект:

#define MAZE_OBJ_RAPAPPILA 0x25
#define MAZE_OBJ_RAPAPPILA_V 0x26

MAZE_OBJ_RAPAPPILA_V - это объект - "выкорчеванная рапаппила", дырка в земле.

А в Flash, соответственно сделал прорисовку этих объектов.
Также в флэшке сделал кнопку сбор рапаппилы, которая появляется если герой стоит на клетке с рапаппилой.
Кнопка становится неактивная если у героя нет с собой сумки.

Интерфейс

Вернулся из отпуска. К сожалению, на отдыхе вообще не думал по поводу проекта :)
Зато набрался сил и придумал новый интерфейс, вернее просто придумал интерфейс так как старого вроде и не было.

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

Рисую и пристыковываю

Герой с топором
Начал прорисовывать, но эта аццкая работа :)

Для удобства сделал тестовую флэшку, которая демонстрирует загружая части объекта, как я уже описывал ранее.

Флэшка test_engine.fla - можно скачать, как в принципе и axe.fla.

Составная загрузка

Наконец-то дошли руки и до этого :)
Реализация оказалось тоже довльно простой, для начала пришлось чуть переписать функицю удаленной загрузки loadclipfromserver, добавив ему параметр root, не путать с _root. И маленькая правочка вместо:
var mc:MovieClip = _root.createEmptyMovieClip(nameclip, -1); стало var mc:MovieClip = root.createEmptyMovieClip(nameclip, -1);
и все :)
Загрузка конечно стало не просто вызов функции, а сначала создание основного клипа:

Новое

Начал внедрять новые стены в лабиринте - которые состоят не из одного куба - а прорисованы по-разному.
Тут же понял, что мой код содержит кучу ошибок, которые пришлось исправлять налету (сейчас код исправлен) и есть живой пример рисования псевдографикой а-ля DOS (кодировка CP866)

В flash нарисовал такие вот стены:
набросок новых стен для лабиринтов

Ветераны арены

Ветеран арены. 7maze.ru - лабиринты зыбиПодумал и решил сделать для арены - количество игроков не два, а три.
Причем ветераны добавляются автоматически после 30 секундного простоя, после добавления каждого игрока.

Маленькие правки

Добавил в структуру TMazeCreature exp, данный параметр уже присутствует в TMazeCreature, через TCreatureParams, но там он показывает общий опыт полученный персонажем.
А в структуре TMazeCreature будет показывать опыт набранный в текущем лабринте, также его можно будет показывать на страничке после победы - типа "выграл игрок, получил XXX опыта".

Так-же, добавил на странице ожидания арены таймер, который рефрешает страницу каждые 5 секунд, а то до этого нужно было рефрешать ручками.
Примитивный JS-скрипт:

Ответный удар

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

В клиентской флэшке изменений по минимуму - в функции обработки мышки:
Ранее было:
if (tx==_root.heroX && ty==_root.heroY)
_root.showBook(1);
else
_root.moveHero(tx, ty);

стало:
if (tx==_root.heroX && ty==_root.heroY)
_root.showBook(1);
else
if (_root.enemySquare(tx,ty) && dx<=1 && dy<<1)
_root.strikeHero(tx,ty);
else
_root.moveHero(tx, ty);

RSS-материал