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

Физика в OpenComputers

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

По приколу написал прогу с демонстрацией физический свойств, по типу игры Angry Birds

 

Использование:

 зажать -> тащить -> отпустить левую кнопку мыши

 

Установка:

 pastebin run m96mrzf9

 

Код:

 

 

-- Можно тыкать на экран, запуская пиксель как птичку в Angry Birds 
local koef = 2 -- коэффициент стартового запуска

local component = require("component")
local gpu = component.gpu
local term = require('term')
local event = require('event')

local h = {['x'] = 20,['y'] = 30,['dx'] = 5,['dy'] = -3}
local xm,ym = gpu.getResolution()

function line(x1,y1,x2,y2)
	x= x1
	y= y1
	for i = 1 , math.floor( ( (x2-x1 )^2+( y1-y2 )^2)^0.5) do
		gpu.set(math.floor(x),math.floor(y),'█')

		rad = math.atan2(y1-y2,x2-x1)
		x = x + math.cos(rad)
		y = y - math.sin(rad)
	end
end

function fiz(usl,dxx,dyy,xx,yy)
	if usl then
		h.dx = h.dx * dxx
		h.dy = h.dy * dyy
		h.x = xx
		h.y = yy
	end
end

term.clear()
while true do

	local e1 = {event.pull(0.05)}
	gpu.set(math.floor(h.x),math.floor(h.y),' ')

	if e1[1] == 'touch' then
		local e2 
		repeat
			e2 = {event.pull()}
			if e2[1] == 'drag' then term.clear() line(e1[3],e1[4],e2[3],e2[4]) end
			if (e2[1] == 'touch') then break end
			gpu.set(1,1,'dx '..tostring((e1[3] - e2[3])/koef))
			gpu.set(1,2,'dy '..tostring((e1[4] - e2[4])/koef))
		until e2[1] == 'drop'
		term.clear()
		if e2[1] == 'drop' then
			h.x = e1[3]
			h.y = e1[4]
			h.dx = (e1[3] - e2[3])/koef
			h.dy = (e1[4] - e2[4])/koef
		end
	end	
	h.dx = h.dx
	h.dy = h.dy + 0.45
	h.x = h.x + h.dx
	h.y = h.y + h.dy

	fiz(h.y > ym,0.9,-0.85,h.x,ym) -- низ
	fiz(h.y < 0 ,0.9,-0.85,h.x,0) -- верх
	fiz(h.x > xm,-0.85,0.9,xm,h.y) -- право
	fiz(h.x < 0 ,-0.85,0.9 ,0,h.y) -- лево
	gpu.set(math.floor(h.x),math.floor(h.y),'█')
	gpu.set(1,1,'dx '..tostring(h.dx))
	gpu.set(1,2,'dy '..tostring(h.dy))
end

 

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

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


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

Круто.

Я бы пиксель сделал квадратным.

А еще за пикселем можно гаснущий след рисовать.

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


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

Круто.

Я бы пиксель сделал квадратным.

А еще за пикселем можно гаснущий след рисовать.

Отличная идея, попробую реализовать) В ближайшее время обновлю пост

 

---------------------

UPD : когда пройдет депресняк, попробую дописать)

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

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


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

Эх, мне бы уметь пользоваться радианами(((

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


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

Неплохая идея 🤔, можно было бы ссылку на программу учтелям подкинуть, будет что продемонстрировать

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

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...