Page 11 of 20

Re: Code Doodles!

Posted: Mon Mar 30, 2015 10:02 pm
by Sheepolution
I learned something new with math.

Image

Right mouse button to move the ball, left mouse button to pause.

You can add graphs by adding

Code: Select all

f[number](x) return --[[do stuff with x here]] end
You can add a differentiation with

Code: Select all

f[number]_ (x) etc.

Code: Select all

function love.load()
	love.window.setMode( 800, 800)
	colors = {
	{255,0,0},
	{0,255,0},
	{0,0,255},
	{255,0,255},
	{255,255,0},
	{0,255,255}
	}
	width = 400
	widthN = 10*(width/400)
	mod = (width/widthN)
	z = -6
	speed = 4
	love.graphics.setBackgroundColor(255, 255, 255)
end


function love.update(dt)
	if not love.mouse.isDown("l") and not love.mouse.isDown("r") then
		
	
		z = z + dt * speed
	end
	if love.mouse.isDown("r") then
		z = (love.mouse.getX()-400)/mod
	end

end


function love.draw()
	love.graphics.translate(width,width)
	love.graphics.setColor(0,0,0)
	love.graphics.setLineWidth(1)

	for i=-widthN,widthN do
		love.graphics.setColor(200,200,200)
		love.graphics.line(-width,i*mod,width+25,i*mod)
		love.graphics.line(i*mod,-width,i*mod,width+25)

		love.graphics.setColor(0,0,0)
		love.graphics.print(i,i*mod,-16)
		love.graphics.circle("fill",i*mod,0,3,10)

		love.graphics.print(-i,4,i*mod)
		love.graphics.circle("fill",0,i*mod,3,10)
	end

	love.graphics.line(-width,0,width+25,0)
	love.graphics.line(0,-width,0,width+25)

	love.graphics.setLineWidth(2)

	local F = 1

	while(true) do
		local f = _G["f" .. F]
		local f_ = _G["f" .. F .. "_"]
		if not f then break end

		--RED
		local col = 1 + ((F-1) % #colors)
		love.graphics.setColor(unpack(colors[col]))
		local line = {};
		for i=-widthN*20,widthN*20 do
			local x = i/20
			local y = _G["f" .. F](x);
			table.insert(line,x*mod)
			table.insert(line,-y*mod)
		end
		love.graphics.line(line)

		if f_ then
			local x = z*mod
			local y = -f(z)*mod
			local dirY = -f_(z)*mod

			love.graphics.setColor(0,0,0)
			love.graphics.line(x,y,x+mod,y+dirY)
			love.graphics.setColor(0,0,0);
			love.graphics.circle("fill",x,y,4,10)

			love.graphics.setColor(0,0,255)
			local line = {};
			for i=-widthN*20,widthN*20 do
				local x = i/20
				local y = f_(x)
				table.insert(line,x*mod)
				table.insert(line,-y*mod)
			end
			love.graphics.line(line)

			x = z*mod
			y = -f_(z)*mod

			love.graphics.setColor(0,0,0)
			love.graphics.circle("fill",x,y,4,10)
		end

		F = F + 1
	end

end


function f1(x)
	return math.sin(x)
end

function f1_(x)
	return math.cos(x)
end

-- function f2(x)
-- 	return x^2
-- end

-- function f2_(x)
-- 	return 2*x
-- end

-- function f3(x)
-- 	return math.sqrt(x)
-- end

-- function f3_(x)
-- 	return 1/(2*math.sqrt(x))
-- end

function love.mousepressed(x,y,key)
	if key == "wd" then
		speed = math.max(0,speed - 0.10)
	elseif key == "wu" then
		speed = math.min(10,speed + 0.10)
	end
end

Re: Code Doodles!

Posted: Mon Jun 08, 2015 8:41 pm
by HugoBDesigner
Random minigame I wrote just for the sake of passing time. So far, it works flawlessly and pretty optimized (and "prettified") for a 2-3 hours game:

Image

In this game, you just have to move to the next arc. Pretty easy, right? Not so much. You don't control the ship or the arcs. At all. This is a one-button game (you can use basically any key on keyboard or mouse button to fire), in which the arcs rotate around you at random speeds and random orientations, and you have to pass the ship through the hole in them. As levels increase, so does difficulty. Wheels get faster and holes get smaller. If you make it to level 10 without missing a single hole (it's possible, I did it myself), you can continue playing level 10 for as long as you possibly can, just increasing the high score. But if you fail (or failed) at least once, you start over after level 10.

Re: Code Doodles!

Posted: Mon Jun 08, 2015 8:55 pm
by Robin
It's so freaking annoying if two consecutive rings move in the same direction at roughly the same speed and you have to wait for a really long time!

Re: Code Doodles!

Posted: Mon Jun 08, 2015 8:55 pm
by Nixola
Robin wrote:It's so freaking annoying if two consecutive rings move in the same direction at roughly the same speed and you have to wait for a really long time!
I literally just thought "what if this happens? Nah, it's too rare, no one will face this"

Re: Code Doodles!

Posted: Mon Jun 08, 2015 9:08 pm
by HugoBDesigner
I actually had some special code to make sure that there will always be a minimum time interval between rings so that they don't move along or make you wait two minutes :P

Re: Code Doodles!

Posted: Sat Jul 18, 2015 11:46 pm
by Garmelon
Here are a few doodles, cba to take screenshots now :D
Nothing special because I'm not very creative.

E02.love: Just press any key
E03.love: Hover above the circles and click on them/hold the mouse button down
E04.love: Toggle balls with 1, 2 and 3, toggle canvas/trails with 4 (also clears canvas), clear canvas with C

EDIT: I posted this after looking at the first page. I've looked through all pages now and the more I see the more I like this thread.
Most of my cöde doodles are lost because I didn't save them, I just tried something out while creating something else.
But now that I know of this thread... :P

Re: Code Doodles!

Posted: Sun Jul 19, 2015 10:03 am
by Nixola
What is a "normal canvas", and what OpenGL version does it require?

Re: Code Doodles!

Posted: Sun Jul 19, 2015 10:39 am
by Garmelon
The "normal" is the [wiki]CanvasFormat[/wiki] (color).

Here's another doodle (totally not inspired by a doodle from this thread):
(Press any key to toggle the random "snow". Use the mouse (lmb) to create "snow" wherever you click.)

Code: Select all

function love.load()
	lgr = love.graphics
	lmo = love.mouse
	lgr.setBackgroundColor(255, 255, 255)
	
	s = {} -- settings
	s.cellWidth = 5 -- pixels
	s.updateTime = 0.02 -- updates after 0.02 seconds
	
	s.width = math.floor(lgr.getWidth()/s.cellWidth)
	s.height = math.floor(lgr.getHeight()/s.cellWidth)
	constantSnow = true
	
	t = 0 -- time
	world = {}
	for x = 1, s.width do
		world[x] = {}
		for y = 1, s.height do
			world[x][y] = false
		end
	end
end

function love.update(dt)
	t = t + dt
	if t < s.updateTime then return else t = 0 end
	
	-- calculate falling of - umm - things
	for x, t in ipairs(world) do
		for y, cell in ipairs(t) do
			if cell and not cell.moved then
				local c1, c2, c3 = getCell(x-1, y+1), getCell(x, y+1), getCell(x+1, y+1)
				if c2 == false then -- move down
					cell.moved = true
					world[x][y+1], world[x][y] = world[x][y], world[x][y+1] -- swap the values
				else
					if math.random(0, 1) == 0 then
						if c1 == false then
							cell.moved = true
							world[x-1][y+1], world[x][y] = world[x][y], world[x-1][y+1] -- swap the values
						elseif c3 == false then
							cell.moved = true
							world[x+1][y+1], world[x][y] = world[x][y], world[x+1][y+1] -- swap the values
						end
					else
						if c3 == false then
							cell.moved = true
							world[x+1][y+1], world[x][y] = world[x][y], world[x+1][y+1] -- swap the values
						elseif c1 == false then
							cell.moved = true
							world[x-1][y+1], world[x][y] = world[x][y], world[x-1][y+1] -- swap the values
						end
					end
				end
			end
		end
	end
	
	for x, t in ipairs(world) do
		for y, cell in ipairs(t) do
			if cell then
				cell.moved = false
			end
		end
	end
	
	spawn = not spawn
	if spawn then
		if lmo.isDown("l") then
			world[math.floor(lmo.getX()/s.cellWidth) + 1][math.floor(lmo.getY()/s.cellWidth) + 1] = {r = math.random(0, 255), g = math.random(0, 255), b = math.random(0, 255)}
		end
		if constantSnow then
			world[math.random(1, s.width)][1] = {r = math.random(0, 255), g = math.random(0, 255), b = math.random(0, 255)}
		end
	end
end

function love.draw()
	for x, t in ipairs(world) do
		for y, cell in ipairs(t) do
			local w = s.cellWidth
			if cell then
				lgr.setColor(cell.r, cell.g, cell.b)
				--lgr.setColor(255, 127, 0)
				lgr.rectangle("fill", (x-1)*w, (y-1)*w, w, w)
			end
			--lgr.setColor(127, 127, 127)
			--lgr.rectangle("line", (x-1)*w, (y-1)*w, w, w)
		end
	end
end

function love.keypressed()
	if key == "escape" then love.event.quit() end
	constantSnow = not constantSnow
end

function getCell(x, y)
	if world[x] then
		return world[x][y]
	else
		return
	end
end

Re: Code Doodles!

Posted: Sun Jul 19, 2015 10:54 am
by Nixola
Weird. I was really really sure this PC supported canvases.
EDIT: This indeed sounds like a bug. First of all, the error is misleading, as this pc supports normal canvases just fine.
Then, "fsaa" is specified in conf.lua. As far as I know, if the pc doesn't support it, it should fall back to zero, and nothing else should change; it instead throws that error (normal canvas format is not supported by your OpenGL implementation).

Re: Code Doodles!

Posted: Sun Jul 19, 2015 1:03 pm
by Garmelon
The same thing happens on my school's computers (kinda old :P) too - When I reduce the samples to 0 it works.

Another doodle! :D The pattern moves btw. Use the arrow keys to change pattern
Image
Image