Reputation: 9
I'm creating a quiz based game, I currently have a main menu form called Quiz.py as shown below in the code, this is simply to build my main menu. This is then imported into another file called Maths.py which is currently one of the 3 tests I will be building.
My questions is, how can I code the buttons in my Maths.py file so that when the maths button is clicked by the user they start a cycle of randomly generated maths question.
Here is the code in my quiz file
import random
import time # these are importing everything I will need for my program.
import pygame
pygame.init() # Initiates pygame so it runs.
display_width = 1600 # This sets the boundaries of the pygame screen
display_height = 800
gamedisplay = pygame.display.set_mode((display_width,display_height))
white = (255,255,255)
black = (000,000,000)
grey = (169,169,169)
clock = pygame.time.Clock()
buttonheight = 100
buttonwidth = 250
class Button:
x=0
y=0
height=100
width=250
body = None
text="Maths"
def __init__(self):
self.body = pygame.Rect(self.x, self.y, self.width, self.height)
def setText(self, textOfButton):
self.text = textOfButton
def clicked(self):
print("test")
def checkClicked(self):
click = pygame.mouse.get_pressed()
x, y = 0,1
click = 0
if pygame.mouse.get_pos()[x] > self.x and pygame.mouse.get_pos()[x] < self.x + self.width:
if pygame.mouse.get_pos()[y] > self.y and pygame.mouse.get_pos()[y] < self.y + self.height:
self.clicked()
def draw(self):
smallText = pygame.font.Font ('RINGM___.ttf',20, )
TextSurf, TextRect = text_objectsW(self.text,smallText)
TextRect.center = ( (self.x+(self.width/2)), (self.y+(self.height/2)))
pygame.draw.rect(gamedisplay, black, self.body)
gamedisplay.blit(TextSurf, TextRect)
#gamedisplay.blit(smallText.render(self.text, False, white), TextRect)
class mathsButton(Button):
def __init__(self):
self.x = 95
self.y = 400
self.text = "Maths"
super().__init__()
class historyButton(Button):
def __init__(self):
self.x=690
self.y=400
self.text = "History"
super().__init__()
class englishButton (Button):
def __init__(self):
self.x=1255
self.y=400
self.text="English"
super().__init__()
def text_objectsB (text, font): # These 2 functions are the same with the colour of the text being the exception. its renders the text and its colour
textSurface = font.render(text, True, black)
return textSurface, textSurface.get_rect()
def text_objectsW (text, font):
textSurface = font.render(text, True, white)
return textSurface, textSurface.get_rect()
my_image = pygame.image.load('Background2.jpg').convert()
gamedisplay.blit(my_image, [0,0])
intro = True
btnMaths = mathsButton()
btnHistory = historyButton()
btnEnglish = englishButton()
def main_menu():
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
elif event.type == pygame.MOUSEBUTTONDOWN:
btnMaths.checkClicked()
btnHistory.checkClicked()
btnEnglish.checkClicked()
largetext = pygame.font.Font('RINGM___.ttf',80)
TextSurf, TextRect = text_objectsB("Are you smarter than a 13 year old?", largetext)
TextRect.center = ((display_width/2),(display_height/6))
gamedisplay.blit(TextSurf, TextRect)
#button("Maths Quiz",95,400,black,grey,"Maths")
#button("English Quiz",675,400,black,grey,"English")
#button("History Quiz",1255,400,black,grey,"History")
btnMaths.draw()
btnHistory.draw()
btnEnglish.draw()
pygame.display.update()
clock.tick(60)
And here is the code for my Maths file
import pygame
import random, time
import Quiz
t0 = time.time()
while True:
Quiz.main_menu()
if time.time() - t0 > 5:
Quiz.btnMaths.setText("New Text") # This code is proof on concept that I can change the text in this box
Thanks for any help you can provide.
Upvotes: -1
Views: 1005
Reputation: 359
I would say return a boolean in the checkClicked function.
def checkClicked(self):
click = pygame.mouse.get_pressed()
x, y = 0,1
click = 0
if pygame.mouse.get_pos()[x] > self.x and pygame.mouse.get_pos()[x] < self.x + self.width:
if pygame.mouse.get_pos()[y] > self.y and pygame.mouse.get_pos()[y] < self.y + self.height:
return True
else:
return False
and then an if statement in the program loop
if checkClicked() == True:
StartQuestions()
Upvotes: 0