I'm doing a little random generator thing and when I'm trying to load the saved thing I run into a problem. It's not showing any errors but it's not working. Here is my code, at line 78 there is the loadSave function and on line 95 there is the createSave function. Because I can't save the whole classes that are in the list I'm saving just it's values and then when I load it back I create new classes with the same values, and the loading part is not working, I tested it.
from tkinter import *
from tkinter import simpledialog
import pygame as pg
import sys
import random
import os
import pickle
pg.init()
pg.font.init()
pg.display.set_caption("Random")
win = pg.display.set_mode((800, 600))
clock = pg.time.Clock()
isFirstDraw = True
numbers = []
def endScreen(win):
while True:
clock.tick(60)
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
pg.font.quit()
sys.exit()
if event.type == pg.MOUSEBUTTONDOWN:
pg.quit()
pg.font.quit()
sys.exit()
win.fill((255, 255, 255))
text = pg.font.SysFont("comicsans", 100).render("The end", True, (0, 0, 0))
win.blit(text, (300, 235))
pg.display.update()
def drawButtons(win, m_pos):
if m_pos[0] >= 290 and m_pos[0] <= 490 and m_pos[1] >= 450 and m_pos[1] <= 515:
pg.draw.rect(win, (155, 155, 155), ((290, 450), (200, 65)))
else:
pg.draw.rect(win, (177, 177, 177), ((290, 450), (200, 65)))
text = pg.font.SysFont("comicsans", 25).render("Generate random", True, (0, 0, 0))
text2 = pg.font.SysFont("comicsans", 25).render("number", True, (0, 0, 0))
win.blit(text, (310, 455))
win.blit(text2, (330, 485))
## next button
if m_pos[0] >= 0 and m_pos[0] <= 200 and m_pos[1] >= 535 and m_pos[1] <= 600:
pg.draw.rect(win, (155, 155, 155), ((0, 535), (200, 65)))
else:
pg.draw.rect(win, (177, 177, 177), ((0, 535), (200, 65)))
text = pg.font.SysFont("comicsans", 35).render("Save", True, (0, 0, 0))
win.blit(text, (35, 550))
## next button
if m_pos[0] >= 600 and m_pos[0] <= 800 and m_pos[1] >= 535 and m_pos[1] <= 600:
pg.draw.rect(win, (155, 155, 155), ((600, 535), (200, 65)))
else:
pg.draw.rect(win, (177, 177, 177), ((600, 535), (200, 65)))
text = pg.font.SysFont(""comicsans", 25).render("Load", True, (0, 0, 0))
text2 = pg.font.SysFont(""comicsans", 25).render("save", True, (0, 0, 0))
win.blit(text, (670, 540))
win.blit(text2, (660, 565))
def loadSave():
try:
pickle_in = open("numbers.save", "rb")
loadNum = pickle.load(pickle_in)
pickle_in.close()
except FileNotFoundError:
return numbers
numbers = []
print(numbers)
for i in loadNum:
numbers.append(Number(i[0], i[1], i[2], i[4], i[3]))
def createSave():
try:
os.remove("numbers.save")
except:
pass
numSave = []
for i in numbers:
numSave.append([i.x, i.y, i.num, i.isDead, i.fontSize])
pickle_out = open("numbers.save", "wb")
pickle.dump(numSave, pickle_out)
pickle_out.close()
def randomNum(win, answer, answer2):
global randNum
try:
rand = random.randint(answer, answer2)
if randNum == False:
randNum = Number(376, 400, rand, fontSize=40)
else:
randNum.num = rand
if numbers[rand - 1].isDead:
randomNum(win, answer, answer2)
else:
numbers[rand - 1].isDead = True
except RecursionError:
endScreen(win)
class Number:
def __init__(self, x, y, num, fontSize=40, isDead=False):
self.x = x
self.y = y
self.num = num
self.isDead = isDead
self.text = False
self.fontSize = fontSize
def render(self):
self.text = pg.font.SysFont("comicsans", self.fontSize).render(
str(self.num), True, (0, 0, 0)
)
win.blit(self.text, (self.x, self.y))
if self.isDead:
if self.num >= 10:
pg.draw.line(
win,
(255, 0, 0),
(self.x, self.y + 5),
(self.x + 45, self.y + 42),
5,
)
pg.draw.line(
win,
(255, 0, 0),
(self.x + 45, self.y + 5),
(self.x, self.y + 42),
5,
)
else:
pg.draw.line(
win,
(255, 0, 0),
(self.x, self.y + 5),
(self.x + 25, self.y + 42),
4,
)
pg.draw.line(
win,
(255, 0, 0),
(self.x + 25, self.y + 5),
(self.x, self.y + 42),
4,
)
def reDraw(win, anserw, anserw2, m_pos):
global isFirstDraw, randNum
win.fill((255, 255, 255))
if isFirstDraw:
previousPos = [10, 20]
for i in range(anserw, anserw2 + 1):
try:
if (
numbers[-1].num == 15
or numbers[-1].num == 27
or numbers[-1].num == 39
):
previousPos[1] += 50
previousPos[0] = -45
if numbers[-1].num >= 10:
numbers.append(Number(previousPos[0] + 65, previousPos[1], num=i))
else:
numbers.append(Number(previousPos[0] + 45, previousPos[1], num=i))
except:
numbers.append(Number(previousPos[0], previousPos[1], num=i))
if previousPos[0] >= 720:
previousPos[1] += 50
previousPos[0] = -45
else:
previousPos = [numbers[-1].x, numbers[-1].y]
isFirstDraw = False
for i in numbers:
i.render()
if randNum is not False:
randNum.render()
drawButtons(win, m_pos)
pg.display.update()
def main():
global win, isFirstDraw, randNum
tk = Tk()
tk.title("Input")
tk.geometry("100x100")
tk.withdraw()
#'''
answer = simpledialog.askinteger(
"min:1, max:49", "A legkisebb szám:", parent=tk, minvalue=1, maxvalue=49
)
answer2 = simpledialog.askinteger(
"min:1, max:50", "A legnagyobb szám:", parent=tk, minvalue=answer, maxvalue=50
) #'''
# answer = 1
# answer2 = 5
tk.destroy()
randNum = False
numbers = []
while True:
clock.tick(60)
m_pos = pg.mouse.get_pos()
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
pg.font.quit()
sys.exit()
if (
event.type == pg.MOUSEBUTTONDOWN
and m_pos[0] > 290
and m_pos[0] < 490
and m_pos[1] > 450
and m_pos[1] < 515
):
randomNum(win, answer, answer2)
elif (
event.type == pg.MOUSEBUTTONDOWN
and m_pos[0] >= 0
and m_pos[0] <= 200
and m_pos[1] >= 535
and m_pos[1] <= 600
):
createSave()
elif (
event.type == pg.MOUSEBUTTONDOWN
and m_pos[0] >= 600
and m_pos[0] <= 800
and m_pos[1] >= 535
and m_pos[1] <= 600
):
numbers = loadSave()
# print(m_pos)
reDraw(win, answer, answer2, m_pos)
main()