Looking for help with array and randomness
-
I think I forgot to put this in a function :
Take a Peek (rdurbin)card = createsprite () deck = loadimage ("Kenneyboardgames") tiles = numtiles (deck) setspritelocation(card, 0,67) tile = 15 // start at 2 of clubs // here's where I should put the function.... function deck & shuffle () array deck [53] array used [53] for z = 1 to 53 loop used [z] = 1 repeat for z = 1 to 53 loop a += (rnd (1) + 52 + 1) while used [a] ! // it is here the error msg says Fx not available a += 1 if a > 52 then a = 0 endif repeat used [a] = 0 deck [z] repeat loop clear (darkGreen) c = controls (0) if c.y and tile > 0 then tile -= 1 endif if c.a and tile < tiles -1 then tiles + = 1 endif setspritescale (card, 3, 3) setspriteframe (card,tile) if tile > 67 then tile = 15 drawsprites () update () repeat
-
while used [a] ! // it is here the error msg says Fx not
In while loop its needs to be !=1. 1 means its not used yet, 0 used
You should be able to also use
while !(used[a]) loop
I would also place the function after main loop but call it before main loop. Best to divide individual tasks into functions. Easier to read and understand
-
I think this should be:
while !used[a] loop
meaning keep looping while used[a] is equal to 0
Unless i've missed something, which is entirely possible!
Personally for legibility i would use:
while used[a] == false loop
Purely force of habit so i do get told off sometimes by the youngsters!
-
OK, thanks, I finally got that PGM working. But I have another question : I have here a program that displays cards, along the "X" axis, then after 13 cards it moves down the "Y" axis to start another row, but every time it displays a card, the previous card disappears, I'm trying to figure out how to make the previous card stay on the screen. I would like to get all 52 cards on the screen....I tried to setSpriteVisibility (card, true), but nothing seems to work, Heres a example of the program :
//.................................................................. card = createsprite ( ) deck = loadImage ("Kenneyboardgames") tiles = numtiles (deck) setspriteimage (card, deck) x = 150 y = 200 setspritelocation (card, x, y) setspriteanimation (card, 0, 64) tile = 15 loop clear (darkGreen) c = controls (0) if c.a and tile < tiles -1 then tile += 1 setspriteanimation (card, 0, 67) x = x += 80 // move along the "x" axis setspritelocation (card, x, y) if x > gwidth() - 180 then // once you go 13 cards across x = 70 y = y += 100 // move down the "y" axis to start a new row endif // end the 2nd if statment updatesprites ( ) drawsprites ( ) update ( ) endif // end the 1st if statment setspriteschale (card, 1.5, 1.5) setspriteanimframe (card, tile) // at this next line I would like to end the program with the end ( ) function, instead it goes back to the beginning... if tile > 67 then tile = 15 endif if tile == 54 then tile += 1 // skip the joker endif drawsprites ( ) update ( ) repeat // end of program.... //........................................................... // here i have an example of an end Function....It worked with other Programs, but not this one.... function end ( ) clear(lime) drawtext (120, 250, 180, black, "End of Deck") update() sleep(3) return void
-
Does Fuze have a Drop Shadow effect, like Photoshop ? (Just wondering)
-
@kendog400 Your program only has a single sprite. When you change the animation and location of that sprite it just moves and changes that single sprite. If you are going to use sprites you need to have a sprite for each card in the pack. The easiest way to do that is to use an array of sprites. I have shared an example of this.
The end function will not terminate your program it will just be called every time around the game loop. Instead you need to make your game loop conditional. Something like
finished = false while !finished loop // set finished = true to end program repeat clear(lime) drawtext (120, 250, 180, black, "End of Deck") update() sleep(3)
-
OK, thanks, I'LL try this to see if I could get the program to end after the deck of cards is used up...
-
As for a drop shadow effect, mabey i could put a rectangle under the sprite, re-set the opacity, then add a blur... (?)
-
I tried, but it seems I dont know exactly where to put the while loop......I tried to replace the for loop with the command while....It must be some sloppiness on my part.....could you give me a hint ?......
-
@kendog400 Sorry very busy at the moment. I will take a look on Wednesday
-
@kendog400 My friend code is 5139-4176-1902
Please add me as a Nintendo friend, share your project and I'll take a look today if I can!
-
@kendog400 OK I think that it is worth you looking at the 3 main different types of loop in Fuze: https://fuzearena.com/help/view/loop
- Infinite (loop ... repeat) - this doesn't end until it is interrupted (as in your program)
- Conditional (while condition loop ... repeat) - ends when the condition is met (e.g. the game has finished)
- For (for index = start to end loop ... repeat) - ends when index > end
You wouldn't normally use 1) as it can only be ended by stopping the program.
You would use 2) when you want something to carry on until something happens
You would use 3) when you have a fixed amount of work to doIn your example you could use 3) because you have a fixed amount of work - you deal the cards and then your program finishes.
In reality your program will probably want to do something else after dealing the cards so you would have loops inside loops
Here is an example of a simple game loop (and possibly the worlds dullest game)
finished = false while !finished loop gameScreen() endScreen() repeat function gameScreen() c = controls(0) while !c.a loop clear() c = controls(0) printAt(0, 0, "Game Screen. Press A to exit") update() repeat return void function endScreen() c = controls(0) while !c.x and !c.y loop clear() c = controls(0) printAt(0, 0, "End Screen. Press Y to play again and X to exit") update() repeat finished = c.x return void
-
@pianofire
Is there no way to break out of an 'infinite loop' using code? -
@QIsLegit OK yes there is. You can use the break command but it is not good practice https://fuzearena.com/help/view/break
loop c = controls(0) if c.a then break endif update() repeat