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

Арканойд на двоих

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

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

 

http://pastebin.com/5K6yh6g6 - арканойд на двоих(не работает)

 

Там весьма подробный комментарии. Вопрос таков, как сделать чтобы он после соприкосновении с платформой летел нормально? 

Так же просьба рассказать о всех костылях и вообще переписать пол проги за меня чтоб я понял свои косяки. Как я понимаю их много.

 

И как определить закрашен ли пиксель. Например:

  gpu.setBackground(color)
  gpu.set(x, y, " ")

Как узнать какой цвет в координатах х у?

 

  • Like 1

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


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

И как определить закрашен ли пиксель. Например:

  gpu.setBackground(color)
  gpu.set(x, y, " ")

Как узнать какой цвет в координатах х у?

local char, foreColor, backColor = gpu.get(x, y)

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


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

Замутить арканоид? Пфф да запросто, там много ума не надо. Хоть на четверых можно играть  :) Но мне лень пока писать, занят был созданием хардкорной сборки, сейчас тестить начну.

 

А пока просто по накидаю советов по программированию в ОС:

  • Когда пишешь проги в отдельном редакторе, возможно, нужна перезагрузка компа или выход/вход в игру, чтобы изменения вступили в силу. (в одиночной игре) Чтобы изменения сразу вступали в силу без перезагрузки, нужно в конфигах одну строку изменить. (для одиночной игры)
  • Если пишешь библиотеку - готовься после каждого изменения файла перезагружать комп. Увы, но мне лень было придумывать способ выгрузки библиотек из памяти. Пусть гуру луа пояснят, что в таких случаях нужно делать.
  • Если используешь event.listen, и перед выключением проги не производишь event.ignore - готовься что у тебя будут повторяться некоторые действия. Быстрое решение - перезагружать комп каждый раз после выхода из проги. Более правильное решение - не выходить из проги через Ctrl + C и по завершении проги использовать event.ignore (как я понял ты с этой проблемой столкнулся и она тебе дико мешает)

Удачи с реализацией!

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


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

 

  • Если используешь event.listen, и перед выключением проги не производишь event.ignore - готовься что у тебя будут повторяться некоторые действия. Быстрое решение - перезагружать комп каждый раз после выхода из проги. Более правильное решение - не выходить из проги через Ctrl + C и по завершении проги использовать event.ignore (как я понял ты с этой проблемой столкнулся и она тебе дико мешает)

 

Нет, event.listen как я его использовал подходит только для одного игрока. Пока один перемещаю платформу другой не может. Так то он мне не мешает. Еще не сталкивался с проблемойю

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


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

Нет, event.listen как я его использовал подходит только для одного игрока. Пока один перемещаю платформу другой не может. Так то он мне не мешает. Еще не сталкивался с проблемойю

Лень мне вникать в код, в общем вот проблема:

-- физика(нет) не работает. Если у шарика у < 1 то меняет направление несколько раз = не работает

Вот причина которая подходит по описанию к проблеме:

В твоём коде есть event.listen, но нет event.ignore. (ужасная ошибка, исправь немедленно) Значит при каждом запуске проге, будет всё больше и больше раз выполнтся функция.

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


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

Я бы не использовал event.listen, а использовал event.pull. По событию "key_down" платформа начинает движение, а по "key_up" останавливается. Не нужно два десятка раз жмакать на клавишу да и с ignore не будет проблем.

Собственно перемещение платформы осуществлять по таймеру. Можно через os.sleep, но тогда нужно использовать многопоточность, что бы движение одной платформы не влияло на другую.

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

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


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

Я бы не использовал event.listen, а использовал event.pull. По событию "key_down" платформа начинает движение, а по "key_up" останавливается. Не нужно два десятка раз жмакать на клавишу да и с ignore не будет проблем.

Собственно перемещение платформы осуществлять по таймеру. Можно через os.sleep, но тогда нужно использовать многопоточность, что бы движение одной платформы не влияло на другую.

С event.listen можно запросто певдомногопоточность замутить. Чтобы несколько игроков могли управлять одновременно. Вон же змейка у меня как то работает на большое количество игроков с помощью event.listen. Единственная при этом проблема, краши и выходы без event.ignore. При тесте особо тяжко, приходится комп перезагружать в случае ошибок.

 

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

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

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


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

С event.listen можно запросто певдомногопоточность замутить. Чтобы несколько игроков могли управлять одновременно. Вон же змейка у меня как то работает на большое количество игроков с помощью event.listen. Единственная при этом проблема, краши и выходы без event.ignore. При тесте особо тяжко, приходится комп перезагружать в случае ошибок.

 

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

А в pcall нельзя добавить?

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


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

А в pcall нельзя добавить?

Проблема именно во время тестов. Я часто проги тестирую и каждый раз через Ctrl + C завершать прогу и потом перезагружать комп долго. А вот когда готовая уже прога то там ошибок не должно быть и всё норм работает. Это проблема именно тестирования проги.

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


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

Проблема именно во время тестов. Я часто проги тестирую и каждый раз через Ctrl + C завершать прогу и потом перезагружать комп долго. А вот когда готовая уже прога то там ошибок не должно быть и всё норм работает. Это проблема именно тестирования проги.

Я с такими проблемами боролся. переопредели event.shouldInterrupt() если true, тогда ignore сделай для всех функции.

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

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


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

Тестовый вариант арканойда на одного http://pastebin.com/Pg8edkzJ . Хромой больной, но рабочий код с играбельной игрушкой.

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


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

Тестовый вариант арканойда на одного http://pastebin.com/Pg8edkzJ . Хромой больной, но рабочий код с играбельной игрушкой.

sB_9tsg42B4.jpg

  • Like 2

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


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

sB_9tsg42B4.jpg

Ну пока тестовый вариант. Может кто посоветует что... Про евент игнор уже понял.

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


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

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

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

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

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

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

Войти

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

Войти сейчас

×