INFO: Ich arbeite gerade an einem Spiel und möchte die Idee eines Startmenüs nach unten ziehen, bevor es weitergeht, da dies mit weiteren Teilen meines Spiels helfen wird Design. Grundsätzlich möchte ich es so, wenn ich START GAME
drücke, wird das Spiel beginnen, wenn ich HELP
drücke, wird es eine Hilfeseite zeigen und wenn ich QUIT
drücke, wird das Spiel beendet. Bis jetzt ist das Spiel beendet, wenn QUIT
gedrückt wird, was ziemlich einfach war, aber ich bin mit dem Starten des Spiels festgefahren.Pygame, Spiel stoppt, wenn die Maus sich bewegt
DAS PROBLEM: Wenn ich Start-Spiel drücke, wird der Player Sprite sowie die Uhr angezeigt. Die Uhr funktioniert genauso gut wie die Frames, bis die Maus bewegt wird.
DER CODE
import pygame, random, time
pygame.init()
#Screen
SIZE = width, height = 1280, 720 #Make sure background image is same size
SCREEN = pygame.display.set_mode(SIZE)
pygame.display.set_caption("Cube")
#Events
done = False
menu_on = True
#Colors
BLACK = 0, 0, 0
WHITE = 255, 255, 255
#Fonts
FONT = pygame.font.SysFont("Trebuchet MS", 25)
MENU_FONT = (FONT)
#Info
time = 0
minute = 0
hour = 0
day = 0
year = 0
counter = 0
blink_clock = 0
blink = 0
#Year
YEARFONT = FONT.render("Year:{0:03}".format(year),1, BLACK) #zero-pad day to 3 digits
YEARFONTR=YEARFONT.get_rect()
YEARFONTR.center=(885, 20)
#Day
DAYFONT = FONT.render("Day:{0:03}".format(day),1, BLACK) #zero-pad day to 3 digits
DAYFONTR=DAYFONT.get_rect()
DAYFONTR.center=(985, 20)
#Hour
HOURFONT = FONT.render("Hour:{0:02}".format(hour),1, BLACK) #zero-pad hours to 2 digits
HOURFONTR=HOURFONT.get_rect()
HOURFONTR.center=(1085, 20)
#Minute
MINUTEFONT = FONT.render("Minute:{0:02}".format(minute),1, BLACK) #zero-pad minutes to 2 digits
MINUTEFONTR=MINUTEFONT.get_rect()
MINUTEFONTR.center=(1200, 20)
#Characters
def load_image(cube):
image = pygame.image.load(cube)
return image
class Menu:
hovered = False
def __init__(self, text, pos):
self.text = text
self.pos = pos
self.set_rect()
self.draw()
def draw(self):
self.set_rend()
SCREEN.blit(self.rend, self.rect)
def set_rend(self):
self.rend = MENU_FONT.render(self.text, 1, self.get_color())
def get_color(self):
if self.hovered:
return (255, 255, 255)
else:
return (100, 100, 100)
def set_rect(self):
self.set_rend()
self.rect = self.rend.get_rect()
self.rect.topleft = self.pos
class Cube(pygame.sprite.Sprite):
def __init__(self):
super(Cube, self).__init__()
self.images = []
self.images.append(load_image('Fine.png'))
self.index = 0
self.image = self.images[self.index]
self.rect = pygame.Rect(440, 180, 74, 160)
def update(self):
self.index += 1
if self.index >= len(self.images):
self.index = 0
self.image = self.images[self.index]
class Blink(pygame.sprite.Sprite):
def __init__(self):
super(Blink, self).__init__()
self.images = []
self.images.append(load_image('Blink.png'))
self.index = 0
self.image = self.images[self.index]
self.rect = pygame.Rect(440, 180, 74, 160)
def update(self):
self.index += 1
if self.index >= len(self.images):
self.index = 0
self.image = self.images[self.index]
class Blank(pygame.sprite.Sprite):
def __init__(self):
super(Blank, self).__init__()
self.images = []
self.images.append(load_image('Blank.png'))
self.index = 0
self.image = self.images[self.index]
self.rect = pygame.Rect(440, 180, 74, 160)
def update(self):
self.index += 1
if self.index >= len(self.images):
self.index = 0
self.image = self.images[self.index]
allsprites = Cube()
group = pygame.sprite.Group(allsprites)
blink = Blink()
blinking = pygame.sprite.Group(blink)
blankcube = Blank()
blankgroup = pygame.sprite.Group(blankcube)
start_game = [Menu("START GAME", (140, 105))]
help_ = [Menu("HELP", (140, 155))]
quit_ = [Menu("QUIT", (140, 205))]
#Game Speed
clock = pygame.time.Clock()
FPS = 60
CLOCKTICK = pygame.USEREVENT+1
pygame.time.set_timer(CLOCKTICK, 1000)
game_start = False
SCREEN.fill(WHITE)
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if menu_on == True:
for Menu in help_:
if Menu.rect.collidepoint(pygame.mouse.get_pos()):
Menu.hovered = True
else:
Menu.hovered = False
Menu.draw()
for Menu in quit_:
if Menu.rect.collidepoint(pygame.mouse.get_pos()):
Menu.hovered = True
if event.type == pygame.MOUSEBUTTONDOWN:
done = True
else:
Menu.hovered = False
Menu.draw()
for Menu in start_game:
if Menu.rect.collidepoint(pygame.mouse.get_pos()):
Menu.hovered = True
if event.type == pygame.MOUSEBUTTONDOWN:
game_start = True
else:
Menu.hovered = False
Menu.draw()
group.update()
group.draw(SCREEN)
if event.type == CLOCKTICK:
blink_clock=blink_clock + 1
if blink_clock == 60:
blink_clock = 0
if blink_clock == 0:
blink = random.randint(0, 1)
if blink == 1:
blinking.update()
blinking.draw(SCREEN)
if blink_clock == 41:
blink = 0
blankgroup.update()
blankgroup.draw(SCREEN)
if game_start == True:
menu_on = False
if event.type == CLOCKTICK:
minute = minute + 1
if minute == 60:
hour = hour + 1
minute = 0
if hour == 24:
day = day + 1
hour = 0
if day == 365:
year = year + 1
day = 0
SCREEN.fill(WHITE)
MINUTEFONT = FONT.render("Minute:{0:02}".format(minute), 1, BLACK)
SCREEN.blit(MINUTEFONT, MINUTEFONTR)
HOURFONT = FONT.render("Hour:{0:02}".format(hour), 1, BLACK)
SCREEN.blit(HOURFONT, HOURFONTR)
DAYFONT = FONT.render("Day:{0:03}".format(day), 1, BLACK)
SCREEN.blit(DAYFONT, DAYFONTR)
YEARFONT = FONT.render("Year:{0:03}".format(year), 1, BLACK)
SCREEN.blit(YEARFONT, YEARFONTR)
group.update()
group.draw(SCREEN)
if event.type == CLOCKTICK:
blink_clock=blink_clock + 1
if blink_clock == 60:
blink_clock = 0
if blink_clock == 0:
blink = random.randint(0, 1)
if blink == 1:
blinking.update()
blinking.draw(SCREEN)
if blink_clock == 41:
blink = 0
blankgroup.update()
blankgroup.draw(SCREEN)
clock.tick(FPS)
pygame.display.flip()
pygame.quit()
Jede Hilfe sehr geschätzt wird und ich würde gerne Ihre Feed-back :)