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


Фотография

Арканойд

игра

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

#1 Оффлайн   TraerTaer

TraerTaer
  • Пользователи
  • Сообщений: 94
  • Уровень сигнала: 0,08%
  • В игре: 0 час. 32 мин.

Награды

           

Отправлено 18 Август 2016 - 22:02

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

 

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

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

  • Редактор карт
  • Инсталлятор
  • Стартовая позиция шарика - платформа
  • Прочность кирпичей

  • Бонусы
  • Кастомные карты

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

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

 

Байтика

Прикрепленные файлы


Сообщение отредактировал TraerTaer: 22 Август 2016 - 19:10

  • 1Ridav, Zer0Galaxy, vx13 и еще 1 это нравится

#2 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 19 Август 2016 - 09:27

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

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

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

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

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

 

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


Сообщение отредактировал Zer0Galaxy: 19 Август 2016 - 09:33

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

#3 Оффлайн   TraerTaer

TraerTaer
  • Автор темы
  • Пользователи
  • Сообщений: 94
  • Уровень сигнала: 0,08%
  • В игре: 0 час. 32 мин.

Награды

           

Отправлено 19 Август 2016 - 10:00

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

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

 

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

 

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



#4 Оффлайн   qwertyMAN

qwertyMAN
  • Пользователи
  • Сообщений: 1 427
  • Уровень сигнала: 0,15%
  • В игре: 1 час. 3 мин.
  • ГородCity17

Награды

                             

Отправлено 19 Август 2016 - 10:17

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

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

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



#5 Оффлайн   TraerTaer

TraerTaer
  • Автор темы
  • Пользователи
  • Сообщений: 94
  • Уровень сигнала: 0,08%
  • В игре: 0 час. 32 мин.

Награды

           

Отправлено 19 Август 2016 - 10:22

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

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

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

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



#6 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 19 Август 2016 - 10:45

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

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



#7 Оффлайн   TraerTaer

TraerTaer
  • Автор темы
  • Пользователи
  • Сообщений: 94
  • Уровень сигнала: 0,08%
  • В игре: 0 час. 32 мин.

Награды

           

Отправлено 19 Август 2016 - 10:53

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

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

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

 

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


Сообщение отредактировал TraerTaer: 19 Август 2016 - 10:55


#8 Оффлайн   qwertyMAN

qwertyMAN
  • Пользователи
  • Сообщений: 1 427
  • Уровень сигнала: 0,15%
  • В игре: 1 час. 3 мин.
  • ГородCity17

Награды

                             

Отправлено 19 Август 2016 - 11:14

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

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

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

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

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

 

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


Сообщение отредактировал qwertyMAN: 19 Август 2016 - 11:20


#9 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 19 Август 2016 - 11:52

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



#10 Оффлайн   TraerTaer

TraerTaer
  • Автор темы
  • Пользователи
  • Сообщений: 94
  • Уровень сигнала: 0,08%
  • В игре: 0 час. 32 мин.

Награды

           

Отправлено 19 Август 2016 - 11:59

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

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



#11 Оффлайн   davial

davial
  • Пользователи
  • Сообщений: 440
  • Уровень сигнала: 15,08%
  • В игре: 105 час. 40 мин.
  • ГородТроон в системе Канопуса.

Награды

                    

Отправлено 19 Август 2016 - 13:04

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

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



#12 Оффлайн   TraerTaer

TraerTaer
  • Автор темы
  • Пользователи
  • Сообщений: 94
  • Уровень сигнала: 0,08%
  • В игре: 0 час. 32 мин.

Награды

           

Отправлено 19 Август 2016 - 13:38

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

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



#13 Оффлайн   TraerTaer

TraerTaer
  • Автор темы
  • Пользователи
  • Сообщений: 94
  • Уровень сигнала: 0,08%
  • В игре: 0 час. 32 мин.

Награды

           

Отправлено 20 Август 2016 - 20:44

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

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

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

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

 

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

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



#14 Оффлайн   qwertyMAN

qwertyMAN
  • Пользователи
  • Сообщений: 1 427
  • Уровень сигнала: 0,15%
  • В игре: 1 час. 3 мин.
  • ГородCity17

Награды

                             

Отправлено 20 Август 2016 - 22:09

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

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

 

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

 

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



#15 Оффлайн   TraerTaer

TraerTaer
  • Автор темы
  • Пользователи
  • Сообщений: 94
  • Уровень сигнала: 0,08%
  • В игре: 0 час. 32 мин.

Награды

           

Отправлено 21 Август 2016 - 01:37

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

 

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

  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



#16 Оффлайн   TraerTaer

TraerTaer
  • Автор темы
  • Пользователи
  • Сообщений: 94
  • Уровень сигнала: 0,08%
  • В игре: 0 час. 32 мин.

Награды

           

Отправлено 22 Август 2016 - 19:18

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

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



#17 Оффлайн   qwertyMAN

qwertyMAN
  • Пользователи
  • Сообщений: 1 427
  • Уровень сигнала: 0,15%
  • В игре: 1 час. 3 мин.
  • ГородCity17

Награды

                             

Отправлено 22 Август 2016 - 19:44

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

Сейчас массив с данными выглядит так {{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: 22 Август 2016 - 19:48


#18 Оффлайн   TraerTaer

TraerTaer
  • Автор темы
  • Пользователи
  • Сообщений: 94
  • Уровень сигнала: 0,08%
  • В игре: 0 час. 32 мин.

Награды

           

Отправлено 22 Август 2016 - 19:58


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

Прикрепленные файлы







Темы с аналогичным тегами игра

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

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