Seryoga
-
Публикации
100 -
Зарегистрирован
-
Посещение
-
Победитель дней
6
Сообщения, опубликованные пользователем Seryoga
-
-
@NightFury
Для решения всех тех задач, которые ты написал не нужно писать новую ОС, вполне можно обойтись библиотечкой или программой, которая из себя запускает старую ОС.
Это сохранит совместимость твоих либ с написанными программами.
На данный момент существует тонна реализаций одноядерной многопоточности в майнкрафте. И делались они совсем не новичками в области программирования. Может лучше не делать новое, а модернизировать старое? Например создать программу, которой на вход подаётся исходник на lua, на выходе у нас максимально классно распараллеленная программа, или по проще мы подключаем библиотеку с нашей программой, пишем код при помощи её, а та пытается распараллелиться. Так например сделано тут .
Также можно написать библиотеку для работы с многопоточностью, на основе какой-то готовой. При запуске программы использующей эту библиотеку, будет вестись поиск всех компонентов на которых можно что-то хранить или считать, например на мониторе можно хранить данные. Далее программа пытается максимально классно использовать найденные ресурсы. При этом твоя библиотека должна будет ставится только на главный комп, остальные не должны знать о ней. -
Стоп. А как мне получить информацию?
Один профессор из моего университета говорил ("-л", так как у меня кончились его пары):
"Прежде чем решать задачу, подумайте что будете делать с её результатом".
Так вот зачем тебе это надо? Я например не могу придумать, где это может понадобиться.
-
старый добрый swing с криво заданными компонентами. =D
Я чаще всего создаю главную панельку, в него пихаю вертикальный BoxLayout. А в него панельки с горизонтальным BoxLayout. И задавать лучше размер главной панельки. Так будет ровнее и будет всё отлично resize'иться. Попробуй может тебе тоже понравиться.
-
1. Будите спамить сермертями поставлю автобан на сутки.
2. Если в этом у тебя интерес игры в скай, то вперед и с песней, от того что ты супер бустанешь ничего не изменится, сито быстрее не сеит. Думаю тот кто через ножницы пойдет, в два раза больше земли накопит и свой остров расширит.
3. Инвайт подразумевает инвайт в пати, для тп к игроку будет простой ТПА.
4. Серьезно? тоесть ты делаешь ачивку на 64 каблы, тебе дают 3 кожи, ты накопал +2 и опять получаешь кожу??
5. Не трогайте тп, а ты хочешь наверняка умереть? ну не пиши тп, кто хочет жить быстро тпшнится на спавн.
Объясняю еще раз, цель ская не создать геморой, тот же хангер на 50% упрощен, но с ним на скае хоть голодают и появляется смысл в еде, без него я за 8 часов игры скушал 2 стейка и 1 яблоко и то только потому что мне зомби дал леща. ...
4. Это я написал к тому, что надо challange переименовать в shop. Chellange -- это когда, кто-то не обязательно ты поставил рекорд, а ты его превосходишь и ставишь новый. ТО есть насобирал 64 коблы дали кожи, насобирал 128 дали ещё.
3. Я попросился к человеку в гости, дабы посмотреть как у него дела и что он построил. Мне приходит инвайт и я такой /accept. Прилетел к нему, погулял хочу варпнуться обратно домой, фразочка в чат: "У вас нет острова."
1, 2, 5. Я указал на изъяны, которых вы могли не заметить.
Ну ты ведь съел 2 стейка и 1 яблочко. А вообще я хз как ты так играешь в энергосберегающем режиме.
-
1. В топку моды на голод. Мне проще дропнуться в не бытье, чем кормить себя.
2. Если у меня друг или подруга играют на сервере, то можно создать остров, собрать ресы, удалить остров, спрятать ресы, создать остров, и тд. Прятать ресы можно на спавне в сундуках или у друга "под печкой"
3. Совершенно не очевидно, то что если я зайду в чужой приват, то мой остров удалиться. Причём запрос не сильно отличается от запроса "в гости".
4. Зачем за challang'ы забирать ресы. Если я съем сто бутеров и стану Burger King'ом, то из меня вытащат все бутеры и дадут корону?5. Ещё слишком быстрый телепорт на спавн, я забиндил макрос на кнопочку, теперь при падении раз и на спавне.
-
Убери из текстурки ящика тень и блик не очень красиво смотрится. Я помню ты делал сглаживание, почему здесь не сделаешь? ящики какими-то острыми кажутся.
Классно получается. И вообще топчик (как я понял из картинки)то что ящики могут вращаться. -
До сих пор понять не могу зачем нужны эти фракталы и зачем их рисуют, тратя большие ресурсы на прорисовку.
И этот человек боготворит матанчик с ОТО. Окей.
Фрактал -- это описание огромной и сложной модели одним рекуррентным выражением. Например, люди научились описывать целый лес всего лишь одной формулой. При этом по этой формуле можно узнать прошлое и будущее объекта.
Ещё многим людям нравится смотреть на видоизменяющиеся фигуры. По сравнению с другими screensaver'ами, фрактальные являются самыми "бесплатными"
-
3
-
-
Мне казалось, что у него так рисует:

-
Сделай не struct и boolean, а
[правильный ответ 1, правильный ответ 2, правильный ответ 3]
или
[правильный ответ 1, правильный ответ 2,правильный ответ 3]
или[
правильный ответ 1,
правильный ответ 2,
правильный ответ 3]
ну ты понял =)Ещё добавь строку с тем, что будет написано, если ответил не правильно
-
Эм...

cd -- команда, а xxx -- аргументы
Правильней будет не Lua-гуру, а OpenComputers-гуру или Sysadmin Алёна
Алё... с какого перепуга dir не правильно?
Идейка классная, я могу помочь вопросов настакать.
-
Добрый день, земляне!
...
И второй эксперимент:
Есть планета, с которой вылетела ракета с околосветовой скоростью. Вопрос: где время будет лететь быстрее, на планете или на ракете? Ведь относительно друг друга они движутся с одинаковой скоростью.
Мы должны принять 2 факта:
- Мы не можем рассуждать о том, где течёт время быстрее или медленнее в некоторый момент времени, так как по положению точки в пространстве не возможно определить поведение функции (момент это точка пространства-времени)
- Мы должны принять тот факт, что сжатие или растяжение наблюдаемой сс' относительно той в которой находится наблюдатель зависит от скорости сс'.
Выберем траекторию движения нашей ракеты относительно планеты. Для простоты возьмём прямой участок до некоторой точки пространства. Пусть длина этой траектории равна 2L. Рассмотрим этот путь относительно земли, он будет равен 2L. А вот это расстояние относительно ракеты будет другим и оно будет равно 2L*sqrt(1 - v*v / (c*c)). Имея эти два значения можно рассчитать время полёта относительно земли и относительно ракеты.
...
ч.т.д.
-
Идейка прикольная.
Я бы очень хотел, чтобы ты дальше развивал эту штуку. Люблю залипательные прилажки такого рода.
Пожелания:
1. Сделай хороший матан.-- Круто было бы, если бы ты написал свой движок. Так как этот Lёve2d делает операции, результатами которых ты не пользуешься.
-- Оптимизируй дымок трассера, и сделай его бесконечным. Например можно хранить пучок векторов, который будет аппроксимировать этот трассер с заданной точностью.
-- Убери движение относительно начала координат (игрок начало координат).
2. Убери космические станции, лучше вместо дай возможность выстрелить ракетку с каким-то запасом горючего, бросить камушек или астронавта за борт. Ну и наверное самое главное дай возможность посветить фонариком в иллюминатор.
3. При этом всём не забудь про преобразования Лоренца. И добавь над каждым объектом часики =)
4. Планетки, обычные Звёзды, Пульсары, спаренные Звёзды, чёрные дыры и etc -- это было бы круто.
5. Разогнавшись до высокой скорости, было бы прикольно видеть старение звезд и галактик, их столкновения.
6. Приятнее управлять летающей тарелкой, а не ракетой =)
7. Если на это всё смотреть с данной проекции и лететь при скорости в 250т км/с, то звёзды всё же должны двигаться.
И если к этому всему прикрутить отличную графику, то можно и продать в стиме =)
-
Какие языки поддерживаются?
C++, Java, Pascal, C#, Python, Scala, Hackell, Ruby и ещё немного. Lua нет.
-
-
Можно скакнуть ещё дальше:
вывод командой info без -m сделать такой же, как предложил Leshainc
Если указать info -m, то консоль продолжит свою работу, но сверху появится обновляемая инфа, то есть программа info запустится в фоне.
Далее можно сделать программку, которая будет запускать процессы и приложения, при этом сочетания клавиш alt + shift + t будет сворачивать приложение, alt + t будет переключаться между запущенными программами, ctrl + alt + d будет запускать приложение, в которой будет содержаться инфа о компе, о запущенных приложениях и тп. -
При перезагрузке сервера почему-то слетает разрешение на мониторах.
Грешу на дабл-буфер.
Нет это не дабл-буфер, это баг мода OpenComputers. Для теста попробуй задать не стандартное разрешение и выгрузить чанк, в котором находится комп. Ты заметишь, что разрешение слетело. При этом ты не юзал этот буфер.
-
А ноут закрывается?
-
pixel.lua удалён.
Изменена структура матрицы. Теперь она одномерная. -
А пиксели эти будут рисоваться с постоянной сменой цвета и фона, ага. Допустим, на экране изменился прямоугольник 5х2 синего цвета. Как будет работать твой код? Правильно, он выполнит 10 раз операцию gpu.setBackground() и 10 раз операцию gpu.set(), в то время как можно было бы всего лишь gpu.setBackground(); gpu.fill(). Напомню, каждая операция видеокарты - это реальные игровые тики, и при таком подходе к отрисовке любая более-менее сносная игра у тебя попросту будет фризится.
Кроме того, как я и сказал выше, у тебя крайне неразумен расход памяти. Надо скачать ради интереса твою либу и проверить, сколько памяти она сжирает при полноэкранных 160х50 отрисовках. Интересно, вылетит out of memory или нет? Как знать, как знать!
Хорошо, в ближайшие дни добавлю анализ соседних пикселей.
-
Крайне медленная и неоптимизированная отрисовка, цвет фона меняется каждый раз без проверки на соседние пиксели. Например, если мы имеем в памяти линию красного цвета длиной в 150 пикселей, то куда грамотнее будет разово изменить цвет фона на красный, а затем выполнить gpu.fill( ), нежели выполнять 150 итераций со сменой цвета (скриншот кода с гиста автора ниже). Это сократит количество GPU-операций в десятки и сотни раз, учитывая размеры мониторов. Так что "упором на скорость рисования 2D объектов" тут даже близко не пахнет, да и реализация библиотеки с упором на ООП у меня лично вызывают лютое отвращение: неудобно, некрасиво, бр-р-р. Кроме того, на форуме уже есть прекрасная графическая GML-либа: она написана куда приятнее, названия методов просты как божий день, да и прорисовка работает быстрее. Также рекомендую либу двойного буфера для максимальной скорости рисования. Шли бы лучше игрушки кодить для опенкомпов - и детишкам понравилось бы, и критики никакой не услышал бы, игры любят все!


- Если тебе захочется нарисовать огромный прямоугольник, то можно сделать это за 1 операцию XD
- Упор идёт на динамические структуры. Я не спорю можно сделать анализ соседних пикселей, это в среднем сократит количество операций вдвое, хотя не факт. Так для рисования больших прямоугольников лучше использовать скомпилированные функции. Над чем я и работаю, просто сюда не добавил. Так как очень сырые.
- Ты нарисуешь один раз кучу объектов, подождёшь 0.1 сек, а дальше будет изменение 1 - 10 пикселей.
Преимущества векторизации:
- Возможность создания view-портов, что позволит только перемещать матрицу в мире, а не объекты.
- Сейчас работаю над созданием матрицы у которой контур не прямоугольник, а полигон, что позволит создавать необычные сцены.
- Код легко расширяем, например чтобы сделать анализ соседних пикселей, я могу сопенсорсить твою функцию draw.
-
Added an description of color
Added an description of pixel
Added an description of matrix
Added an description of painter -
Added an description of vector2d
Added an description of section2d
Added an description of line2d
Added an description of polyline2d
Added an description of polygon2d -
Либа прикольная, только какой в ней смысл не понятно.Попробуй запустить файл painter.test. Там ты увидишь два двигающихся объекта и много статических. + один из этих объектов полупрозрачный.
- Когда перемещаются эти объекты экран не мигает.
- Простота анализа пересечений объектов. Например чтобы проверить пересекаются ли два прямоугольника, нужно написать кучу проверок. Здесь тебе нужно задать два прямоугольника и в цикле проверить входят ли углы одного прямоугольника в другой. При помощи метода isInside(Vector): Boolean. В будущем я добавлю функции по типу intersectionFF(Polygon2d, Polygon2d): Boolean и intersectFF(Polygon2d, Polygon2d): Polygon2d
- Объекты заданные векторно легко масштабируются, перемещаются, искривляются, поворачиваются и мн. др.
- Это всё упростит разработку редакторов и игр на луа
- и др...
Все тесты с циферками приведу позже, пока что все оценки скорости на глазок. Очевидно, что полное перерисовывание экрана каждый такт менее производительно, чем частичное перерисовывание.
-
1
-
Последнее время пишется очень много GUI библиотек для open computers. Я решил не отставать от моды и начал разрабатывать свою библиотеку. Так как все гонятся за красивостью и универсальностью, я решил сделать упор на скорость рисования 2D объектов и их математических представлениях.
В этой библиотеке содержится описание примитивных математических объектов:
https://gist.github.com/DeveloperHacker/18e08fdfc2269f1ad5c8
- Вектор
Важно!! не изменяйте вручную поля классов. Это может привести к неопределённым ошибкам
Vector:new(x, y): Vector -- создаёт вектор с координатами x, y
Vector:clone(): Vector -- создаёт копию текущего вектора
Vector:sabs(): Double -- возвращает квадрат модуля вектора
Vector:abs(): Double -- возвращает модуль вектора
Vector:__add(v): Vector -- возвращает результат сложения двух векторов
Vector:__sub(v): Vector -- возвращает результат вычитания двух векторов
Vector:__mul(v): Double -- возвращает число, где знак это направление вектора результата, а модуль -- модуль этого вектора
Vector:__unm(v): Vector -- возвращает противоположный вектор
Vector:dot(v): Double -- возвращает скалярное произведение двух векторов
Vector:cos(v): Double -- возвращает косинус угла между векторами
Vector:scale(a): Vector -- возвращает вектор в а раз больший текущего
Vector:rotate(theta): Vector -- возвращает вектор повёрнутый на theta радиан относительно данного вектора
Vector.ceil(v): Vector -- возвращает вектор у которого координаты округлены до целого
Vector:equals(v): Boolean -- возвращает результат сравнения двух векторов
Vector:toString(): String -- приводит вектор к строке
Vector:print(): void -- выводит координаты вектора - Отрезок
Важно!! не изменяйте вручную поля классов. Это может привести к неопределённым ошибкам
Section:new(p1, p2): Section -- создаёт новый отрезок с концами в точках p1, p2
Section:clone(): Section -- создаёт копию текущего отрезка
Section:IsInside(p): Boolean -- возвращает результат проверки включения точки p отрезку
Section.intersection(s1, s2): Boolean -- возвращает результат проверки пересечения двух отрезков
Section:equals(v): Boolean -- возвращает результат сравнения двух отрезков
Section:toString(): String -- приводит отрезок к строке
Section:print(): void -- выводит координаты отрезка - Линия
Важно!! не изменяйте вручную поля классов. Это может привести к неопределённым ошибкам
Line:new(s): Line -- создаёт линию проходящую через отрезок s
Line:solve(p): Double -- ...Line:y(x): Double -- ...
Line:x(y): Double -- ...Line:equals(l): Boolean -- возвращает результат сравнения двух прямых
Line:print(): void -- выводит уравнение прямой
Line:toString(): String -- приводит линию к строке
- Ломаная
Важно!! не изменяйте вручную поля классов. Это может привести к неопределённым ошибкам
Polyline:new(pos, outline): Polyline -- создаёт новую ломаную в точке pos где координаты остальных вершин находятся по координатам относительно точки pos, которые содержатся в массиве outline
Polyline:add(v): void -- добавляет координаты новой вершиныPolyline:equals(poly): Boolean -- возвращает результат сравнения двух ломаных
- Многоугольник
Важно!! не изменяйте вручную поля классов. Это может привести к неопределённым ошибкам
Polygon:new(polyline): Polygon -- создаёт новый полигон на основе ломаную
Polygon:rectangle(pos, width, height): Polygon -- создаёт прямоугольник
Polygon:rightFigure(pos, qVertexes, radius, theta): Polygon -- создаёт правильную фигуру, где theta -- это угол отклонения первого угла от нормали
Polygon:convex(): Boolean -- возвращает результат проверки, того что полигон является выпуклым
Polygon:height(): Double -- рассчитывает высоту полигона, лучше использовать поле с таким же названиемPolygon:width(): Double -- рассчитывает ширину полигона, лучше использовать поле с таким же названием
Polygon:isInside(v): Boolean -- проверяет принадлежит ли точка полигонуPolygon:center(): Vector -- рассчитывает координаты центра полигона, лучше использовать поле с таким же названием
Polygon:rotate(origin, theta): Polygon -- возвращает результат поворота полигона на theta радиан относительно точки origin
А также есть классы, которые участвуют в рисовании:
https://gist.github.com/DeveloperHacker/c54e3442202274b0ca9a
- Цвет RGBA
Color.decode©: int, int, int, int -- раскодирует укороченную запись цвета rgba
Color.code(r, g, b, a): hex -- создаёт укороченную запись цвета rgbaColor.decodeRGB©: int, int, int -- раскодирует укороченную запись цвета rgb
Color.codeRGB(r, g, b): hex -- создаёт укороченную запись цвета rgbColor.toRGBA(rgb, a): hex -- создаёт укороченную запись цвета rgba на основе rgb и его alpha-канале 0 <= a <= 255
Color.toRGB(rgba): hex -- создаёт укороченную запись цвета rgb на основе rgbaColor.mix(c1, c2): hex -- возвращает значение выражения (c1.alpha) * c1.rgb + c2.rgb, реализует полупрозрачное наслоение цвета c1 на цвет c2
- Matrix для рисования низкоуровневых объектов
Важно!! не изменяйте вручную поля классов. Это может привести к неопределённым ошибкам
Matrix:new(x, y, w, h, gpu): Matrix -- создаёт новую матрицу, x, y координаты (в пикселях) позиции матрицы на экранеMatrix:paint(): void -- рисует новые объекты на экран
Matrix:repaint(): void -- полностью перерисовывает матрицуMatrix:setBackground(rgba): void -- изменяет цвет фона
Matrix:setBrush(rgba): void -- изменяет цвет кистиMatrix:drawPixel(x, y): void -- рисует пиксель на матрицу
Matrix:drawLine(x1, y1, x2, y2, drawEndPixel): void -- рисует линию на матрицу, если drawEndPixel = false, то не отображается последний пиксель.Matrix:drawPolyline(vectors): void -- рисует ломаную на матрицу, где в массиве vectors расположены вершины ломаной
Matrix:drawPolygon(vectors): void -- рисует полигон на матрицу, где в массиве vectors расположены вершины полигона
Matrix:clear(): void -- очищает матрицу
Matrix:clone(): Matrix -- копирует матрицу
Matrix:revert(prev): void -- откатывает матрицу self до матрицы prev
- Painter для рисования высокоуровневых объектов
Важно!! не изменяйте вручную поля классов. Это может привести к неопределённым ошибкам
Painter:new(matrix, pos): Painter -- создаёт нового художника, где pos -- позиция матрицы в пространстве, где заданы фигуры
Painter:drawPoint(vector): void -- рисует точку на матрицеPainter:drawLine(section): void -- рисует линию на матрице
Painter:drawPolyline(polyline): void -- рисует ломаную на матрицеPainter:drawPolygon(polygon): void -- рисует полигон на матрице
Вспомогательные программки без которых сложно, что либо проектировать:
https://gist.github.com/DeveloperHacker/5f4925b04a9524790036
- Расширение gpu
Future description
- Программа для быстрой смены цвета текста и фона консоли, можно добавить изменение разрешения
Future description
- Программы для запуска файлов с расширением
Future description
Пример работы с моей библиотекой:
https://gist.github.com/DeveloperHacker/cc84c09a0980fcd21472
- Рисование при помощи матрицы
Future description
- Рисование при помощи painter'а
Future description
В планах:
- Написать документацию
- Добавить проверку соседних пикселей
- Добавить закрашивание фигур
- Добавить рисование растровых изображений
- Добавить класс Intersector, он будет специализироваться на обнаружении наложений объектов и их пересечении
- Добавить сохранение матрицы в растровом и векторном виде
- Добавить закрашивание фона фигур и матрицы растровым изображением
- Попробовать уменьшить пиксели до половины, как это сделал Zer0Gelaxy http://computercraft.ru/topic/1451-graficheskaia-biblioteka-graffiti/?do=findComment&comment=20699
- Добиться максимальной производительности
- Написать небольшой проект использующий эту библиотеку
- Реализовать 3D
Писал это библиотеку максимально гибко, поэтому возможна интеграция с другими Gui lib'ами. Если вам она понравиться, то я продолжу разработку в ускоренном темпе. Не откажусь от чьей либо помощи. Надеюсь вам понравится.
P.s моя реализация похожей библиотеки на языке java https://github.com/DeveloperHacker/2DEngine
-
5
- Вектор

Идеи для игр (кодинг, разработка)
в Флудилка
Опубликовано:
Я могу предложить свои руки растущие из плеч и немного человекочасов ~(5-10). Не испытываю больших проблем в изучении новых языков (бомбит только на динамически типизированные =D) Никогда не работал с движками Love2D и Unity3D, но есть небольшой опыт в разработке библиотек для работы с векторными математическими и физическими моделями, также писал на них пару игрушек:
2DEngine(s1, s2, s3, s4) -> Snake(s1, s2)
Utils(...) -> BubbleWar(s1, s2, s3)
НО вам нужно исправить вот это:
@LuaGamer: А так я вообще бес понятия как это дело работать будет.
Без хорошего лидера проект развалиться не успев начаться. Ну и нужно чтобы вы ни забивали на проект хотя бы в течении месяца =)