Перейти к публикации
Форум - ComputerCraft
TraerTaer

Арканойд

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

Тестовый вариант игры арканойд. 
 
http://pastebin.com/Pg8edkzJ - бета тест, рабочая версия(вроде)(всегда работает)
 
Играть уже можно. Управление на стрелки. Вход на Enter. 
 
Конфиги описаны в пастбине. Подробно.
 
Планы для игры:

 

  • Чтение кирпичей из массива

    [/ok]

  • Меню загрузки карт

     

  • Редактор карт
  • Инсталлятор
  • Стартовая позиция шарика - платформа
  • [ok=Прочность кирпичей]
  • Бонусы
  • Кастомные карты

меню (работает, но нужно создать для него инсталлер) http://pastebin.com/qCi7i5Ep
арканойд, но уже с 1 пунктом (по сути библиотека) http://pastebin.com/WpwbGj4n
Редактор карт требует доработки. Спасибо за создание его PandaDoddo.

http://pastebin.com/wAhE1B0s - бета, постоянно обновляется.

 

Байтика

post-17430-0-41495400-1471546151_thumb.png

Изменено пользователем TraerTaer
  • Like 4

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


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

На мой взгляд платформу лучше двигать не по событию key_down, а начинать движение по key_down и останавливать по key_up. Так движение будет более равномерным.

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

Даешь текстуру кирпичей и платформы.

Ну, и хотелось бы подарки, выпадающие из кирпичей.

Байтика автору

 

PS Я бы кирпичи и платформу сделал объектами и при движении шарика анализировал не цвет экрана, а касание объекта.

Изменено пользователем Zer0Galaxy
  • Like 1

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


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

PS Я бы кирпичи и платформу сделал объектами и при движении шарика анализировал не цвет экрана, а касание объекта.

Слишком сложно. Я с этим не дружу. И разве определение цвета это не является опредением объекта? Как это должно работать? Я просто не представляю проверку.

 

На мой взгляд платформу лучше двигать не по событию key_down, а начинать движение по key_down и останавливать по key_up. Так движение будет более равномерным.

 

Буду работать над этим.

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


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

 

 

И разве определение цвета это не является опредением объекта?

Странное решение, определять по цвету. На других движках, возможно ты бы и не смог подобным способом решить проблему.

Можно по координатам определять, когда происходит прикосновение. 

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


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

Странное решение, определять по цвету. На других движках, возможно ты бы и не смог подобным способом решить проблему.

Можно по координатам определять, когда происходит прикосновение. 

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

А в чем проблема на других движках? Нельзя получить цвет пикселя? Тут же все просто, без особенностей.

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


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

Захочешь ты сделать кирпич, который не выбивается или выбивается с двух и более касаний, как ты это реализуешь анализируя только цвет экрана?

Подобные игры - идеальный случай изучить ООП.

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


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

Захочешь ты сделать кирпич, который не выбивается или выбивается с двух и более касаний, как ты это реализуешь анализируя только цвет экрана?

Подобные игры - идеальный случай изучить ООП.

В бета версии все в массиве. Цвет каждого кирпича, его прочность(0 - не ломаемый), координаты. Так же в массиве находятся конфиги карты. Например длина платформы. Пример массива {{32(plat), 2(speed)}, {1(x), 1(y), 10(w), 10(h), 321321(color), 0(prochka), X(bonus)}, {тоже}, {тоже}}

 

В ООП вообще не шарю. И не знаю с чего начинать. Термины, наверно, учить. Но это геморно.

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

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


Ссылка на сообщение
Поделиться на других сайтах
А в чем проблема на других движках? Нельзя получить цвет пикселя? Тут же все просто, без особенностей.

Если захочешь использовать одинаковые цвета - начнутся проблемы.

Захочешь использовать картинку фоновую или полупрозрачные кирпичи или сверху накладывать полупрозрачный фон - опять же будут проблемы.

Сделано хоть и нормально для OpenComputers компов, но в более серьёзных движках, это будет жёстким ограничителем, который будет мешать улучшать игру графически. Например я хочу сделать кирпичи которые будут радужными (менять плавно цвет), и с твоим подходом я не смогу осуществить их работу, так как у тебя стоит привязка к цвету.

С привязкой к координатам таких проблем бы не было и на полноценных движках можно было бы всячески улучшать графику игры. Например задавать рамку вокруг кирпичей (на которую шарик в твоём случае тоже бы реагировал)

 

Дело твоё конечно, но твой метод определения столкновения не универсален.

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

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


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

TraerTaer, давай я сделаю тебе объект-кирпич, ты увидишь насколько это проще и возьмешь меня в соавторы

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


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

TraerTaer, давай я сделаю тебе объект-кирпич, ты увидишь насколько это проще и возьмешь меня в соавторы

Ну насчет приминения в программе не знаю, но было бы полезно увидеть как это человеки с руками делают.

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


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

Ну насчет приминения в программе не знаю, но было бы полезно увидеть как это человеки с руками делают.

Вот. Ходил я по страничке cc.ru на вк. И наткнулся на статью о библиотеке про прямоугольники http://computercraft.ru/topic/1166-minibiblioteka-rectangle/. Может пригодиться ?

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


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

Вот. Ходил я по страничке cc.ru на вк. И наткнулся на статью о библиотеке про прямоугольники http://computercraft.ru/topic/1166-minibiblioteka-rectangle/. Может пригодиться ?

Спасибо, буду разбираться.

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


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

Если захочешь использовать одинаковые цвета - начнутся проблемы.

Захочешь использовать картинку фоновую или полупрозрачные кирпичи или сверху накладывать полупрозрачный фон - опять же будут проблемы.

Сделано хоть и нормально для OpenComputers компов, но в более серьёзных движках, это будет жёстким ограничителем, который будет мешать улучшать игру графически. Например я хочу сделать кирпичи которые будут радужными (менять плавно цвет), и с твоим подходом я не смогу осуществить их работу, так как у тебя стоит привязка к цвету.

С привязкой к координатам таких проблем бы не было и на полноценных движках можно было бы всячески улучшать графику игры. Например задавать рамку вокруг кирпичей (на которую шарик в твоём случае тоже бы реагировал)

 

Дело твоё конечно, но твой метод определения столкновения не универсален.

Я подумал... Можно. Использовать передний цвет и не писать символы. При этом цвет сохранится и можно будет найти кирпич. 

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


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

Я подумал... Можно. Использовать передний цвет и не писать символы. При этом цвет сохранится и можно будет найти кирпич. 

Если затеешь перейти на полноценный движок и нарисуешь спрайты для кирпичей, они не смогут взаимодействовать как ты задумал по цвету. Ты сейчас загоняешь себя в рамки, выбирая не традиционные способы решения проблем. Может оно и проще кажется сейчас, но в будущем будет сложнее.

 

Изучил бы работу с координатами - стало бы проще другие программы писать. А избегая эту тему, её не изучишь.

 

Насчёт библиотекой, что тебе подсказали. Там так же есть работа с координатами. Мог бы вместо того чтобы использовать её напрямую, подглядеть как там работает работа с координатами и научиться новому. Так было бы полезнее, если хочешь повышать свой уровень программирования.

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


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

По просьбам начал лечить больного, а не пришивать ему еще ног.

 

Проверка на кирпич. Выполняется при перемещении шара.

  for i = 1, #mass - 1 do
    if mass[i][1] < x + dx and mass[i][2] < y + dy and mass[i][1] + mass[i][3] > x + dx and mass[i][2] + mass[i][4] > y + dy then
      getKirpich(mass[i][1], mass[i][2], 111111111)
      if mass[i][1] < x + dx and mass[i][2] < y and mass[i][1] + mass[i][3] > x + dx and mass[i][2] + mass[i][4] > y then
        dx = 0 - dx
      elseif mass[i][1] < x and mass[i][2] < y + dy and mass[i][1] + mass[i][3] > x and mass[i][2] + mass[i][4] > y + dy then
        dy = 0 - dy
      else
        dx = 0 - dx
        dy = 0 - dy
      end
    end
  end

Так же воспользовался советом Зеро. 

if k4 == 203 and platformaS > 1 and k1 == "key_down" then
event.listen("key_down", platforma)
event.listen("key_up", platforma)

Вроде все. Вот пастбин. http://pastebin.com/wAhE1B0s

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


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

Сделал прочность кирпичей. Цвет изменяется очень странно, доработаю позже. 

Сейчас массив с данными выглядит так {{x, y, w, h, color, prochka, bonus(empty)}, ...{x, y, w, h, color, prochka, bonus(empty)}, {l(platforma)}}

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


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

Сделал прочность кирпичей. Цвет изменяется очень странно, доработаю позже. 

Сейчас массив с данными выглядит так {{x, y, w, h, color, prochka, bonus(empty)}, ...{x, y, w, h, color, prochka, bonus(empty)}, {l(platforma)}}

В принципе w и h можно не записывать в массив, так как они везде (скорее всего) будут одинаковые. Просто вывести их в отдельные переменные.

Color записывать тоже не вижу смысла. Вместо этого можно использовать переменную level, которая будет содержать уровень кирпича (от 1 и выше) и по отдельной таблице подбирать по уровню нужный цвет.

Тогда и переменная prochka не нужна будет.

 

В итоге получим следующую таблицу:

local w, h = 4, 1 --например так
local block = {}

for x=1, 10 do
  for y=1, 5 do
    table.insert(block, {x=x, y=y, level=math.random(1,5)}) --генерируем поле 10 на 5 с блоками случайного уровня
  end
end

color = { --создаём таблицу с цветами для каждого из пяти уровней блоков
  0xffffff,
  0xff0000,
  0x00ff00,
  0x0000ff,
  0xffff00
}

-- ...

-- где то в коде, когда назначаем цвет блока
require("component").gpu.setBackground(color[block[i].level]) --где i - индекс блока
Изменено пользователем qwertyMAN

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


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

W и H надо для полностью кастомных карт. Вообще думаю еще текстурки сделать. И с шаром побороться.

post-17430-0-93012200-1471885072_thumb.png

post-17430-0-55394700-1471885083_thumb.png

post-17430-0-24111600-1471885090_thumb.png

post-17430-0-38113000-1471885097_thumb.png

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×