Posted By
|
Message
|
eski
Registered 20/09/2009
Points 39
|
28th September, 2009 at 20:23:39 -
Hi there, i'm new here and i have two newbie questions.
How do i make MMF pick 10 things out of 100 and never pick the same thing twice ?
And in the same loop i want to print out the name of the object which is in alterable text to a string object like so.
Thing 1
Thing 2
Thing 3
Always a new line for each item.
Currently i'm trying to use qualifier. Every object that is selected is marked with alterable value A as 1, then i know what item was chosen but MMF sometimes picks the same ojbect twice. Then it prints out in the string box text like
Thing 1Thing 2Thing3 ...
Thanks
Sigurgeir
eski@internet.is
n/a
|
Del Duio Born in a Bowling Alley
Registered 29/07/2005
Points 1078
|
28th September, 2009 at 20:34:04 -
I've never used it myself but I believe the MagicDeque object can pick different things without picking the same one twice. I think it was created to be used for card games and stuff but the idea's the same.
--
"Del Duio has received 0 trophies. Click here to see them all."
"To be a true ninja you must first pick the most stealthy of our assorted combat suits. Might I suggest the bright neon orange?"
DXF Games, coming next: Hasslevania 2- This Space for Rent!
|
MrMcFlurry
Registered 03/08/2009
Points 89
|
28th September, 2009 at 23:29:43 -
well, if you know how to use spread values and loops it's pretty simple.
spread value 0 in alterable value a of active (or group, if you want it over a variety of object types)
run loop 'testloop' 10 times
if loop index of 'testloop' = value a of active (or group, if you want it over a variety of object types); then add " object name" to alterable string on string object. ofc,if you're using the group you wanna hold the object name in one of the objects variable strings for ease.
that'll pick the first 10 of the 100. however, it'll be the same 10 each time, if you want 10 RANDOM choices, it's a bit more difficult.
you still spread and start the loop, and as you thought, you use a qualifier. Now this one will work if you are using a single object type, if multiple types then you need to use a group, and the methods become more complex,and an add on might be more worthwhile using.
on loop
+ if active's qualifier AV = 0(i.e.hasn't been picked)
+ pick active at random
then set qualifier AV to 1(has been picked, you can encode more detail into that, such as recording the order it was picked into the value)
and print out the object's name.
Now, for multiple object types you will need to remove the random object selection, as in the loop, it'll look only through the first object type randomly picked, due to how mmf's context works. (not a problem with 1 type of active).
So to do this you want to select x separate, random values(where x is the amount of object selctions you want, in this case 10) between 1 and y (where x is the amount of objects you want,in this case 100). First would be to keep adding numbers, checking for duplicates, and keep adding until you have just 10.but if you want to say, select 99 randoms in a list of 100, this will take a while due to the duplicates.
I think magicdeque can fix this though, I'm pretty sure you can add numbers to an array in it (say 1-100), shuffle the order, then pop the top ten entries and compare to their spread value.
here's a quick example of a single object type implementation
the object's name is basically the object type held in it's first alt string + it's spread value
http://www.mediafire.com/download.php?l2anybyxwow
n/a
|
eski
Registered 20/09/2009
Points 39
|
29th September, 2009 at 02:35:24 -
Alright i totally understand how to do this now with single object but i still dont understand how to do it with multiple objects.
I dont understand how you use magicdeque with this.. Is there some example like the other one with multiple objects ?
n/a
|
MrMcFlurry
Registered 03/08/2009
Points 89
|
29th September, 2009 at 16:15:49 -
OK, so, you have say, 100 objects, different types, all part of the same group qualifier
you do spread value 0 on the whole group, will number them 0-99
you push(add on to) the values 0-99 onto magicdeque, then call a shuffle on the current array.gives us 100 randomly organised values
this is where i have a problem. I tried this and went about using a line like
if spreadID of group = value in array at position(loop index)
then print out data etc.
but, this simply didn't work.So i tried to copy the value to check onto a counter and compare that instead. And, works perfectly, here it is...
http://www.mediafire.com/download.php?mlwmltmnmyy
(I screwed the triggered animation up a bit (edited graphics of the user anim 1 instead of walking, and i swapped from one to the other at one point fo some ease), but the code isfine)
Edited by MrMcFlurry
n/a
|
eski
Registered 20/09/2009
Points 39
|
29th September, 2009 at 20:06:40 -
Ok.. finally i got it to work.. thanks alot ! its great.
But one more thing if you can ?
Lets say when you can push the items that have AV B=1 the will be destroyed, how can you make the text in the string box disappear also ?
Can you put the name of each item to a new paragraph, if so can you display many paragraphs at once in the stringbox or is there something else that is used ?
I'm making a really easy hog game, so you get the idea what i'm doing.
Cheers
n/a
|
MrMcFlurry
Registered 03/08/2009
Points 89
|
29th September, 2009 at 21:38:31 -
So, you have 10randomly selected objects out of 100, and want specific selections of those ten to be destroyed, and the list of objects to reflect this change?
not too experienced with formatting strings in mmf, shouldn't be too hard to look into
n/a
|
UrbanMonk BRING BACK MITCH
Registered 07/07/2008
Points 49667
|
29th September, 2009 at 21:54:08 -
I'll make you an example.
n/a
|
MrMcFlurry
Registered 03/08/2009
Points 89
|
29th September, 2009 at 21:54:55 -
Well,for greater control on text, the formatted text object is an option.
But generally I assumed you would need tome special symbol for a carriage return (new line), typical example being /n, but no, it seems as though it's simpler,you just need to make a newline in the expression editor. Slight problem with that,is if you hit enter in the expression editor, it tries to complete the expression, so I copy and pasted a new line into it and it worked fine.
However, your idea of the separate paragraphs being displayed together could be done well enough.you simply have one string object that holds each in a separate paragraph, and a second string that collates them for display with a small loop whenever a change is made. im not too certain on what you're aiming for.
n/a
|
UrbanMonk BRING BACK MITCH
Registered 07/07/2008
Points 49667
|
29th September, 2009 at 22:23:40 -
Fully commented and uses no extensions.
http://www.jsoftgames.com/pickfromgroup.zip
If you have any questions feel free to ask!
n/a
|
eski
Registered 20/09/2009
Points 39
|
29th September, 2009 at 22:40:34 -
Yeah, almost like that.
The basic idea that i am trying to achieve is....
Hidden object game.
I have a scene where there are alot of items scattered around. Lets say there are 100 items (none the same) and the goal is to find 10 items that are randomly chosen each time you start the game. You will know what items they are because there is a list where they are named. Alright so when you find a item and click it the item will disappear and also the name of it in the string box. Just like in a normal hidden object game. I'm having trouble to get it all to work together. There is always some problem.
Also, i dont understand how loopindex work. There is so little help in the help file that comes with mmf.
Cheers
n/a
|
UrbanMonk BRING BACK MITCH
Registered 07/07/2008
Points 49667
|
29th September, 2009 at 22:44:33 -
loopindex is basically the # of the current loop, and it is only useful from within a loop.
So if you run a loop (say "monkisgreat") and you call the loopindex function within that loop and it returns 11 then that means that the loop has run 12(it starts at 0) times!
EDIT: My example is what you want, but instead just remove the repositioning code. The list and the random selection code is perfect for what you want to achieve. If you want I can update the example.
Edited by UrbanMonk
n/a
|
eski
Registered 20/09/2009
Points 39
|
29th September, 2009 at 23:18:46 -
Ok, understanding loopindex better now.
Yes, that would be sweet if you could update the example.. ?
n/a
|
UrbanMonk BRING BACK MITCH
Registered 07/07/2008
Points 49667
|
29th September, 2009 at 23:34:29 -
The engine of your game is basically done. All it needs is polish and a scoring mechanism. Just replace the graphics I used and to add more objects just clone the existing ones and change the graphic.
http://www.jsoftgames.com/pickfromgroup2.zip
n/a
|
MrMcFlurry
Registered 03/08/2009
Points 89
|
29th September, 2009 at 23:38:00 -
Your example is broken for me urban, it only picks objects from the first object type it comes across, not from every type (i.e.it's only grabbing blue objects, not the other colors) This is why I made use of the magicdeque add on to get around the issue.
Either way, this is my implementation of what you want eski.
http://www.mediafire.com/download.php?mjyznextmei
n/a
|
UrbanMonk BRING BACK MITCH
Registered 07/07/2008
Points 49667
|
29th September, 2009 at 23:43:12 -
Update mmf2, it works perfectly on R249
n/a
|
MrMcFlurry
Registered 03/08/2009
Points 89
|
29th September, 2009 at 23:51:22 -
Mm, im on 247.
But, either way, your example seems to replace removed objects,which i wouldn't see being a likely application in the game, but, whatever, 2 examples there for him to use.
/brofist
n/a
|
UrbanMonk BRING BACK MITCH
Registered 07/07/2008
Points 49667
|
29th September, 2009 at 23:57:21 -
Ahh, I think you missed the second example. Anyway here are both the examples I made.
Here is the original example:
http://www.jsoftgames.com/pickfromgroup.zip
Here is the updated one for the game:
http://www.jsoftgames.com/pickfromgroup2.zip
Also I fixed the 1st example by removing the spread value part, that was the part that was causing your confusion MrMcFlurry because it gave the illusion that the objects were being selected "as they were come across" when infact they were just being arranged in order after they were selected.
n/a
|
MrMcFlurry
Registered 03/08/2009
Points 89
|
30th September, 2009 at 00:20:25 -
Well, what i see in the first example (for some reason i cant install the update automatically...will try manually) is that it only picks from the blue objects, the rest are ignored.
your update halfway fixes this, but still, it only picks one sort. it'll pick either 10 yellow, 10blue, 10 purple, 10 green or 10red. not a mix
still, this might be related to the update.....but the latest download on the clickteam site is 246 =/ annoying
Edited by MrMcFlurry
n/a
|
eski
Registered 20/09/2009
Points 39
|
30th September, 2009 at 04:12:15 -
Ok, i dont have the newest update so there is somewhat buggy in the program from urban. i tried your stuff flurry and it worked almost.
The source that you had before worked well but after the alter there is something wrong..
i copied the code to my file with the items that i am using but there is something wrong.
It always picks the same object as the first item and sometimes it picks it twice, so when you click it there are two items that disappear from the stringbox. The item that it picks is the fruit basket
i uploaded the file.
http://www.mediafire.com/?mtgj2kz1mjn
I deleted all of the background images to ease up the size...
n/a
|
MrMcFlurry
Registered 03/08/2009
Points 89
|
30th September, 2009 at 09:27:10 -
double click the magicdeque object, set it to 0-based.
it defaults to 1-based. that is, the first array entry should be entry0, but atm, it's one. so looking for entry0 returns 0, i.e. the first object.
n/a
|
eski
Registered 20/09/2009
Points 39
|
30th September, 2009 at 10:47:02 -
Brilliant, its working perfectly now.
Thanks alot, both of you guys
Cheers
n/a
|
eski
Registered 20/09/2009
Points 39
|
30th September, 2009 at 18:02:24 -
hmm.. i posted a reply and i dont know where it went.. anyways..
you most be getting tired of this but you know.. beginners are like children with the questions.
So i am working with the same file. I have now added fade out transitions to the items. When i click a item of the list the item fades out and then its destroyed but the description text doesn't go because by the time the fade out is done the loop find10 has already repeated and thinks that the item is still there because it hasn't been fully destroyed. Can i delay the loop so the item can disappear before it starts again ?
I don't fully understand the timer object.
Is the set timer a global timer ?
If i set the timer to like 5 sec on the start of frame. Then put a new condition that the timer is equal to 0 then a active item is destroyed.
Or do i need to connect the timer to a counter ?
Hope you understand this mumble.
n/a
|
MrMcFlurry
Registered 03/08/2009
Points 89
|
30th September, 2009 at 23:27:04 -
Eh, that's because when you make it fade out, the object stays in existence, effectively adding a disappearing animation, the object isn't destroyed until after the fade.
The counter is just there to delay the object removal until the object is gone...here, an alternate, can fix it with a qualifier. The fix also removed the need for the delay counter all together, that was really just a quick fix for the problem. It works by using AValueC to tag whether an object is destroyed or not, if it is, the loop ignores it.
http://www.mediafire.com/download.php?4bdndcntg3i
n/a
|
eski
Registered 20/09/2009
Points 39
|
1st October, 2009 at 00:36:04 -
brilliant.. !!
thanks A lot!!
n/a
|
|
|