Python Forum
Gui slot machine-out of memory error
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Gui slot machine-out of memory error
#11
thankyou deanhystad
but I am struggling to insert this and make it work
due to new or renamed variables or lists etc.
def spin_reels(): """Pseudo spin, best I can do for now.""" spinner = ['FH', 'FD', 'FC', 'WH', 'WD', 'WC', 'JH', 'JD', 'JC', 'JS', 'QH', 'QD', 'QC', 'QS', 'KH', 'KD', 'KC', 'KS', 'AH', 'AD', 'AC', 'AS', 'BH', 'BD', 'BC'] Glo.hold_btn1.configure(state=DISABLED) Glo.hold_btn2.configure(state=DISABLED) Glo.hold_btn3.configure(state=DISABLED) for i in range(3): # Spin reel on X times, two 2X times, three 3X times for _ in range(18): for j in range(len(reel_labels)): # Don't spin a held reel. if not hold[j] and j >= i: reel[j] = randrange(len(spinner_images)) reel_label[i].config(image=spinner_images[reel[i]]) time.sleep(0.025) check_for_win() rnd_hold() save_bank()
Also my original description of spinr wasn't
quite right it's more this:
# spinr represents how many symbols to display for the spin.
# the bigger the value the longer the spin will take.
18seemed about right, but can be tweeked.

To know where I am coming from you really need to look
at the full game source and play a few reels to see the context.

I have uploaded the game to Github:
https://github.com/steveshambles/Freespin-Frenzy

cheers for your time again I appreciate it.
Reply
#12
okay I have been trying to improve the readability of the function and
working out what does what exactly. Please see copious notes:

def spin_reels(): """Pseudo spin, Best I can do for now. loading files on the fly uses a lot of memory, so need to fix this.""" reel_symbols = ['FH', 'FD', 'FC', 'WH', 'WD', 'WC', 'JH', 'JD', 'JC', 'JS', 'QH', 'QD', 'QC', 'QS', 'KH', 'KD', 'KC', 'KS', 'AH', 'AD', 'AC', 'AS', 'BH', 'BD', 'BC'] # Required or causes not defined errors in places. temp_lbl_one = Label(cards_frame) card_lbl_one = Label(cards_frame) temp_lbl_two = Label(cards_frame) card_lbl_two = Label(cards_frame) temp_lbl_three = Label(cards_frame) card_lbl_three = Label(cards_frame) # Disable all three hold buttons. disable_hold_btns() # The 4 detrmines how many times we loop over spinr loop, # in other words how long we spin reels for. for spins in range(4): for spinr in range(18): # spinr represents how many randomly chosen symbols to display # for the spin. # the bigger the value the longer the spin will take. # Choose a random symbol for each reel. # This is just for show, to simulate some sort of reel # spin effect. rnd_symb1 = randrange(len(reel_symbols)) # Create filename to fetch corresponding graphic file. symb1 = reel_symbols[rnd_symb1]+'.png' rnd_symb2 = randrange(len(reel_symbols)) symb2 = reel_symbols[rnd_symb2]+'.png' rnd_symb3 = randrange(len(reel_symbols)) symb3 = reel_symbols[rnd_symb3]+'.png' # This block of code does the spinning, but does not # handle the outcome of the spin, that's in the next block. # If you comment out this block you will see no spin, # but a random card will still be displayed at the end # by the next block of code, so it will still work. if spins < 1 and not Glo.btn1_is_held: temp_lbl_one = Label(cards_frame) temp_img_one = PhotoImage(file='cards/gfx/'+str(symb1)) temp_lbl_one.config(image=temp_img_one) temp_lbl_one.grid(row=0, column=1, padx=2, pady=2) temp_lbl_one.photo = temp_img_one temp_lbl_one.update() # When spins have finished, i.e == 1, and the reel was not # originally held, we can now display the symbol we have # settled on for the reel and store it in global var # Glo.reel_one for use in other functions, like detect win. if spins == 1 and not Glo.btn1_is_held: card_lbl_one = Label(cards_frame) reel_one_img = PhotoImage(file='cards/gfx/'+str(Glo.reel_one)) card_lbl_one.config(image=reel_one_img) card_lbl_one.grid(row=0, column=1, padx=2, pady=2) card_lbl_one.photo = reel_one_img card_lbl_one.update() # Now do again for reel 2. # Reel 2 runs a bit longer than reel 1 for effect. if spins < 2 and not Glo.btn2_is_held: temp_lbl_two = Label(cards_frame) temp_img_two = PhotoImage(file='cards/gfx/'+str(symb2)) temp_lbl_two.config(image=temp_img_two) temp_lbl_two.grid(row=0, column=2, padx=2, pady=2) temp_lbl_two.photo = temp_img_two temp_lbl_two.update() if spins == 2 and not Glo.btn2_is_held: card_lbl_two = Label(cards_frame) reel_two_img = PhotoImage(file='cards/gfx/'+str(Glo.reel_two)) card_lbl_two.config(image=reel_two_img) card_lbl_two.grid(row=0, column=2, padx=2, pady=2) card_lbl_two.photo = reel_two_img card_lbl_two.update() # Reel 3 runs a bit longer than reel 2. if spins < 3 and not Glo.btn3_is_held: temp_lbl_three = Label(cards_frame) temp_img_three = PhotoImage(file='cards/gfx/'+str(symb3)) temp_lbl_three.config(image=temp_img_three) temp_lbl_three.grid(row=0, column=3, padx=2, pady=2) temp_lbl_three.photo = temp_img_three temp_lbl_three.update() if spins == 3 and not Glo.btn3_is_held: spins = 99 # end of spins. card_lbl_three = Label(cards_frame) reel_three_img = PhotoImage(file='cards/gfx/'+str(Glo.reel_three)) card_lbl_three.config(image=reel_three_img) card_lbl_three.grid(row=0, column=3, padx=2, pady=2) card_lbl_three.photo = reel_three_img card_lbl_three.update() time.sleep(0.025) # Destroy temp vars holding labels that were used in rnd spin. # and zero image references in hope of saving memory. It doesnt! temp_lbl_one.destroy() temp_img_one = '' temp_lbl_two.destroy() temp_img_two = '' temp_lbl_three.destroy() temp_img_three = '' card_lbl_one.destroy() # perform only after spin finished to clean up. reel_one_img = '' symb1 = '' card_lbl_two.destroy() reel_two_img = '' symb2 = '' # card_lbl_three.destroy() #causes problems reel_three_img = '' symb3 = '' # Note: when all 3 reels are held hardly any memory used # proving its the displing of the cards that use up the memory. check_for_win() rnd_hold() save_bank()
Reply
#13
Instead of deleting things you should reuse. I tried my best to follow the conventions you use in your program but I cannot force myself to not use a list when the code is SCREAMING for you to use a list. So instead of reel_one, reel_two and reel_three I use reel[].
def make_images(): card_images = {} for card in Glo.ranks: card_images[card] = PhotoImage(file='cards/gfx/'+card+'.png') return card_images def spin_reels(): """Pseudo spin, Best I can do for now. loading files on the fly uses a lot of memory, so need to fix this.""" disable_hold_btns() cards = list(Glo.card_images.values()) for reel in range(len(Glo.reel)): for _ in range(18): # Randomly display different images for i in range(len(Glo.reel)): if i >= reel and not Glo.hold_btn_is_held[i]: card = random.choice(cards) Glo.card_labels[reel].configure(image=card) Glo.card_labels[reel].update() time.sleep(0.025) # The reel is stopped. Display the final image card = Glo.card_images[Glo.reel[reel]] Glo.card_labels[reel].configure(image=card) Glo.card_labels[reel].update() check_for_win() rnd_hold() save_bank(reels) # Add this to initialization code. Maybe in the same place where you make # the hold buttons (once) and the hold button images (once) Glo.card_labels = = [Label(cards_frame), Label(cards_frame), Label(cards_frame)] Glo.card_images = make_images() def get_rnd_cards() """Randomly select cards for slots that are not held. Can only use a card once. """ # Get unused cards cards = Glo.ranks.copy() for i in range(len(Glo.reel)): if Glo.hold_btn_is_held[i]: cards.remove(Glo.reel[i]) # Choose from remaining cards for i in range(len(Glo.reel)): if not Glo.hold_btn_is_held[i]: card = random.choice(cards) Glo.reel[i] = card cards.remove(card)
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Getting an error while trying to process data, low memory when memory is not low? bkeith12 0 1,171 Dec-20-2024, 03:06 PM
Last Post: bkeith12
  Understanding and debugging memory error crashes with python3.10.10 Arkaik 5 6,523 Apr-18-2023, 03:22 AM
Last Post: Larz60+
  Memory Error While generating cheksum no mg24 2 2,397 Sep-25-2022, 10:33 PM
Last Post: mg24
  Help For Slot Machine Code Rayaan 1 4,218 Mar-30-2020, 05:01 AM
Last Post: SheeppOSU
  Memory consumption grows during execution only on single machine Jendker 2 3,036 Feb-10-2020, 01:57 PM
Last Post: Jendker
  Go around memory error Pytonormen 1 3,089 Oct-19-2019, 04:31 PM
Last Post: Gribouillis
  memory error using permutation list of 11 elements kikidog 1 5,347 Sep-10-2019, 08:22 PM
Last Post: ichabod801
  machine learning error (using jupyter) calonia 1 5,527 Jun-26-2019, 05:16 PM
Last Post: ThomasL
  Fix Memory Error while installing a library for Qgis alexastorga 0 3,453 Apr-13-2018, 04:54 PM
Last Post: alexastorga
  Dictionaries and memory error. jarrod0987 5 7,759 Feb-23-2018, 12:15 PM
Last Post: buran

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020
This forum uses Lukasz Tkacz MyBB addons.
Forum use Krzysztof "Supryk" Supryczynski addons.