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


Фотография

Little Tanks

Lua игры замочи всех Java

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5

#1 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 735
  • Уровень сигнала: 0,29%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 26 Июнь 2015 - 17:11

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

 

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

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

 

littleTanks6.png

 

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

https://github.com/M...Owl/LittleTanks

 

Последняя версия может быть скачана здесь:
https://github.com/M...eTanks/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/M...ipt/default.lua)

 

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

 

Итак

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

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

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


Сообщение отредактировал Totoro: 26 Июнь 2015 - 17:49


#2 Оффлайн   Arteminecrafter

Arteminecrafter
  • Пользователи
  • Сообщений: 29
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородСимферополь

Отправлено 21 Июль 2016 - 12:53

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



#3 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 735
  • Уровень сигнала: 0,29%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 21 Июль 2016 - 13:04

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

 

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

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

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


  • Alex, qwertyMAN и Kartze это нравится

#4 Оффлайн   Kartze

Kartze
  • Пользователи
  • Сообщений: 435
  • Уровень сигнала: 40,56%
  • В игре: 306 час. 24 мин.

Награды

              

Отправлено 22 Июль 2016 - 12:03

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

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

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

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

 

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


  • Totoro это нравится

#5 Оффлайн   Arteminecrafter

Arteminecrafter
  • Пользователи
  • Сообщений: 29
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородСимферополь

Отправлено 28 Июль 2016 - 14:48

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


Сообщение отредактировал Arteminecrafter: 28 Июль 2016 - 14:51


#6 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 735
  • Уровень сигнала: 0,29%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 28 Июль 2016 - 15:33

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

 

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

 

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

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

 

Но!

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

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

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

 

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

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


  • davial, qwertyMAN, dases и еще 1 это нравится





Темы с аналогичным тегами Lua, игры, замочи всех, Java

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных