Перейти к содержимому
Totoro

Little Tanks

Рекомендуемые сообщения

Как-то раз я писал программку на Луа, и вдруг подумал: "А что, если взглянуть на процесс с другой стороны? Вместо скрипта для программы - написать программу для скрипта. "

 

В качестве платформы, я решил взять Java Swing, потому что в тот момент под рукой была только шестая Java, и никаких библиотек.

А в качестве программы - игру. Как многие знают, Луа - традиционный язык скриптования во многих играх.

 

littleTanks6.png

 

Игра располалагется в репозитории:

https://github.com/MoonlightOwl/LittleTanks

 

Последняя версия может быть скачана здесь:
https://github.com/MoonlightOwl/LittleTanks/releases

 

Проект представляет собой аркаду, с редактируемыми уровнями, и скриптованием этих уровней на Lua 5.2.

Игрок управляет одним танком, и должен уничтожить все другие танки на уровне. (Правила конкретного уровня могут быть изменены его скриптом.)

 

Редактирование уровней

Создавать и редактировать карты можно в любом блокноте. (Памятка: http://pastebin.com/eW1PTzUB )

Уровни образуют пакеты, или "миссии".

Название файла имеет такой формат: "<название_миссии><номер_уровня_начиная_с_1>.dat" (например base1.dat, и т.д.)

Скрипт к уровню должен лежать в папке /levels/script/. Он должен называться так же как и сам уровень, только с расширением lua вместо dat.

 

Скриптование

Игра обращается к скрипту через следующие методы:

* init(world)

Вызывается один раз, при загрузке уровня. Объект world - это "игровой мир". Он содержит методы для обращения к игре, карте уровня.

* updateTank(tank)

Этот метод вызывается для каждого вражеского танчика в игре, каждый раз, как он завершает очередное действие. Через объект tank скрипт может обратиться к танку, и задать ему новое действие (двигаться, стрелять).

* updateWorld(world)

Этот метод вызывается каждый тик и передает объект игрового мира.

 

Описание всего доступного интерфейса на текущий момент, можно найти здесь: http://pastebin.com/SYRSnar2

 

Пример скрипта, который загружается по умолчанию:

function init(world)
  math.randomseed(os.time())
end

local function randomBool()
  return math.random(0,1) == 1
end

function updateTank(tank)
  local action = math.random(1, 20)
  if action == 1 then
    local dx, dy = 0, 0
    if randomBool() then
      if randomBool() then dx = 1
      else dx = -1 end
    else
      if randomBool() then dy = 1
      else dy = -1 end
    end
    tank:move(dx, dy)
  elseif action == 2 then
    tank:fire()
  end
end

function updateWorld(world) end

(https://github.com/MoonlightOwl/LittleTanks/blob/master/levels/script/default.lua)

 

Здесь танк движется совершенно рандомно, время от времени стреляя. Таков его ИИ на большинстве уровней =)

 

Итак

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

Но тем не менее оно уже работает.

Буду рад любым советам (может даже pull-реквестам ))), багрепортам, и предложениям.

Изменено пользователем Totoro

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сетевуху добавить надо

 

Мультиплеер? Гм.

Это потребует основательной перестройки кода. Эта игрушка рассчитана чисто на сингл.

Но если есть желание запилить поддержку самому - добро пожаловать! C радостью приму пулл-реквесты на GitHub.  :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Kartze

Мультиплеер? Гм.

Это потребует основательной перестройки кода. Эта игрушка рассчитана чисто на сингл.

Но если есть желание запилить поддержку самому - добро пожаловать! C радостью приму пулл-реквесты на GitHub.  :)

Слишком тонко.

 

А результат твоей работы очень мил на вид.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Notch же както зделал мультиплеер в Minecraft

Изменено пользователем Arteminecrafter

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Notch же както зделал мультиплеер в Minecraft

 

Чувак, ты о чём вообще?

 

Да, сделать мультиплеер возможно.

Да, можно сделать мультиплеер и в LittleTanks.

 

Но!

Это потребует довольно сильно переписать код игрушки, потому что, когда я её писал, я не включил мультиплеер в ТЗ.

Была цель сделать синглплеерную аркаду.

Если есть желание, ты можешь сам попробовать это сделать, и убедиться в моей правоте. (Ну или доказать обратное. =))

 

В случае Майнкрафта мультиплеер был заложен в проект с самого начала.

И даже несмотря на это, они очень сильно, и не один раз, переписывали код по мере выхода новых версий.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...