Farvardin's game (was: moving multiple objects with mouse)

Questions about the LÖVE API, installing LÖVE and other support related questions go here.
Forum rules
Before you make a thread asking for help, read this.
User avatar
cag
Citizen
Posts: 65
Joined: Sun Jun 29, 2008 5:09 am

Re: moving multiple objects with mouse

Post by cag »

oh, lovetris doesn't really snap blocks to places. it's state is actually (hackily) held by an array. :oops:
Plus, it's not a very good example in the first place. Don't do as I do unless you don't plan on maintaining your game. ;)

Example implementation of snapping:
hgonfanon-edit.love
(124.92 KiB) Downloaded 203 times
Scroll down to have a look at the last two functions. I'm afraid the snapping method is a bit cryptic, though, but note that floor(num + .5) is functionally equivalent to round(num), and the 28.35 seems to be the average pixel width of your boxes (after noodling around with it a bit...).
User avatar
farvardin
Party member
Posts: 167
Joined: Sat Jun 28, 2008 6:46 pm

Re: moving multiple objects with mouse

Post by farvardin »

your snapping system is really good! I've adapted it to my game, and changed a few things. The width of the boxes was not easy to use, so I've resampled the board to give a 30 pixels width instead (I'll work again on the appearance later).

thanks again.

I think I'll need some arrays later anyway, because I'll have to test the positions of the pawns and if a movement is allowed and such...
User avatar
farvardin
Party member
Posts: 167
Joined: Sat Jun 28, 2008 6:46 pm

Re: moving multiple objects with mouse

Post by farvardin »

I've worked a bit more on my game.

I'm not totally satisfied with my code with is probably not very clean, but I managed to do a few things anyway.

What is working so far:

- initial placement of the pawns.

- after a move the positions of the pawns are stored in the own reference of the board (not in pixel). The console can display the positions to check them. The previous positions are stored too. It will allow to test if a move a legible in the future.
The x coordinates are upside down though, I may change this in the future.

- every pawn is recognised and can be named.

- beginning of a system of turns. At the moment it's only changing turn between black and white (1 turn black / 1 turn white), and disallow a color to play in place of the other, but in the future it should be possible to move several pawns, and end the turn after a few movements. (the rules are quite complicated, and I'd like to be able to change the code easily if I discover a rule in my game system should be changed)

I was just wondering if it was possible with Löve to allow a kind of "hyperlink", when you click on a text it will do an action. It may be easier than to check for the text position. If not, I will make a button to end the turn, it'd probably be the best.
Attachments
hgonfanon.love
(196.47 KiB) Downloaded 200 times
User avatar
rude
Administrator
Posts: 1052
Joined: Mon Feb 04, 2008 3:58 pm
Location: Oslo, Norway

Re: Farvardin's game (was: moving multiple objects with mouse)

Post by rude »

farvardin wrote:I was just wondering if it was possible with Löve to allow a kind of "hyperlink", when you click on a text it will do an action. It may be easier than to check for the text position. If not, I will make a button to end the turn, it'd probably be the best.
There is no built-in support for this.

Maybe you can explain the rules of hgonfanon? Wikipedia and Google gives me nothing.
User avatar
farvardin
Party member
Posts: 167
Joined: Sat Jun 28, 2008 6:46 pm

Re: Farvardin's game (was: moving multiple objects with mouse)

Post by farvardin »

The rules are not from a known game, it's only an invention of my own.

They are there:
http://anamnese.online.fr/site2/index.p ... anon#toc13

I just don't know if the game would be playable or enjoyable, that's the reason the rules may change in the future.
User avatar
farvardin
Party member
Posts: 167
Joined: Sat Jun 28, 2008 6:46 pm

Re: Farvardin's game (was: moving multiple objects with mouse)

Post by farvardin »

is it possible to "factorise" the code like this:

I have a list which was created like this:

Code: Select all

	for i = 1,4 do 
		table.insert(objectsBG, 
		{ 
			x = 75, -- Position of the object.
			y = 75+i*boardSquareSize, 
			dx = 0, -- Displacement of the object.
			dy = 0,
			prevposx = 0, -- Previous Position in the checker's own referency
			prevposy = 0,
			posx = 2, -- Position in the checker's own referency
			posy = 2+i
		})
	end
Later I need to test if the 4 individual objects in this list are somewhere. So I have to test every instance like this:

if current == objectsBG[1] or current == objectsBG[2] or current == objectsBG[3]or current == objectsBG[4] then...

isn't it possible to do it a better way? Like objectsBG[1-4] for example ? I've tried to use a loop, but it's not accepted either.
What do you suggest?
User avatar
Merkoth
Party member
Posts: 186
Joined: Mon Feb 04, 2008 11:43 pm
Location: Buenos Aires, Argentina

Re: Farvardin's game (was: moving multiple objects with mouse)

Post by Merkoth »

I'm working in a little IMGUI module, I have a working button widget that works something like this:

Code: Select all

function update(dt)

	gui_start()
	
   -- gui_button(x_position, y_position, text_to_show)
	if gui_button(400,300,"ShowThisText") then
		-- do something if the user clicked the button
	else
		-- if not, do something else
	end

   gui_finish()
end

function draw()

	gui_draw()
end
I'm not sure how is the API really going to look. But maybe you find it useful? I also have scrollbar/slider and textbox widgets on the works, but they aren't ready yet. This button can look like a link if you want...

If you're interested, maybe I can put together some code for you :)
User avatar
farvardin
Party member
Posts: 167
Joined: Sat Jun 28, 2008 6:46 pm

Re: Farvardin's game (was: moving multiple objects with mouse)

Post by farvardin »

I've used a highlighted button in fact, like this:

I've defined the coordinate where I wanted to place the button (which is 14 px big)

Code: Select all

love.graphics.draw(endturnbutton, endturnx, endturny)
I've used a test for the coordinates:

Code: Select all

	if x > (endturnx-7) and x < (endturnx+7) then
		if y > (endturny-7) and y < (endturny+7) then
			endturnbutton = love.graphics.newImage("endturn2.png")
		else
		    endturnbutton = love.graphics.newImage("endturn.png")
		end
		else
		    endturnbutton = love.graphics.newImage("endturn.png")
	end
and elsewhere:

Code: Select all

function mousepressed(x, y, button)
	if x > (endturnx-7) and x < (endturnx+7) and button == love.mouse_left then
		if y > (endturny-7) and y < (endturny+7) then
			tour_de_jeu() -- change the turn of play
			return
		end
	end
end
It's working well like this. I've uploaded the new version.

What is working now:

- the turn system: after a few moves, the player can shift turn.

- moves : If the player is moving the "soldat" (black only at the moment), it will prevent to move more than 3 steps

known bug:

- it's possible to snap a pawn outside the board by mistake

Problem:

- In the rules, the "soldat" movement is:
Soldats can move 3 squares in any direction (colums, rows or diagonales). The only exception is for reaching a hill (= black square), which takes 2 moves instead of one, but for moving on a hill or going back to plains, it takes 1 normal move.
I really don't know how to implement this. The problem is

░░░░
S██E
░██░
░░░░
(S= start, E= end)

would be legal because the pawn can go round the "hill", while


░░░░
S██░
░██░
░░░E

wouldn't, because the hill should be crossed somewhere.

I'm still thinking about the problem.
Attachments
hgonfanon.love
hgonfanon 5 july 08
(198.27 KiB) Downloaded 175 times
User avatar
farvardin
Party member
Posts: 167
Joined: Sat Jun 28, 2008 6:46 pm

Re: Farvardin's game (was: moving multiple objects with mouse)

Post by farvardin »

I've opened a sourceforge project: http://hgonfanon.sourceforge.net/

I'd really like to have some contributors to help me working on it!
User avatar
rude
Administrator
Posts: 1052
Joined: Mon Feb 04, 2008 3:58 pm
Location: Oslo, Norway

Re: Farvardin's game (was: moving multiple objects with mouse)

Post by rude »

You could probably use the A* algorithm for this, maybe with a heuristic like: distance_to_goal + terrain_type. With a max movement cost of 3, it shouldn't take too long either. Let me know if you need any help with it.

(Disclaimer: there are probably simpler ways to do it.)
Post Reply

Who is online

Users browsing this forum: Google [Bot] and 8 guests