לחצו על R כדי לשחק שוב
חלק מהיחידה חוקי המשחק במסלול ה-Pygame של Coddy. שיעור 3 מתוך 29.
כשהמשחק מסתיים, השחקן רוצה לשחק שוב בלי להפעיל מחדש את התוכנית. הוסף שורה למסך סיום המשחק ומקש שמתחיל משחק חדש:
if event.key == pygame.K_r and state == "over":
player.x = 220
rock.y = -24
rock.x = random.randint(0, 456)
state = "play"לא מספיק להחזיר את המצב ל־"play". הסלע עדיין נוגע בשחקן, ולכן הפריים הבא יסיים את המשחק שוב. החזר את הדברים שזזו למקומות שבהם הם מתחילים במשחק חדש.
זו אותה תבנית כמו בתפריט: מקש, בדיקה של המצב הנוכחי ומצב חדש.
אתגר
קל- במסך סיום המשחק, מתחת ל־
Game over, הצג אתPress R to play againבמרכז בנקודה (240, 200). - כאשר לוחצים על R והמצב הוא
"over": החזר את השחקן ל־x 220, החזר את הסלע ל־y -24 עם ערך x אקראי בין 0 ל־456, והגדר את המצב ל־"play".
נסו בעצמכם
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Meteor Dodge")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
player = pygame.Rect(220, 300, 40, 40)
rock = pygame.Rect(random.randint(0, 456), -24, 24, 24)
score = 0
state = "menu"
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN and state == "menu":
state = "play"
if state == "play":
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 6
if keys[pygame.K_RIGHT]:
player.x += 6
player.clamp_ip(screen.get_rect())
rock.y += 4
if rock.top > 360:
rock.y = -24
rock.x = random.randint(0, 456)
score += 1
if rock.colliderect(player):
state = "over"
screen.fill((30, 30, 46))
if state == "menu":
title = font.render("Meteor Dodge", True, (240, 240, 240))
screen.blit(title, title.get_rect(center=(240, 140)))
hint = font.render("Press Enter to play", True, (240, 240, 240))
screen.blit(hint, hint.get_rect(center=(240, 200)))
else:
pygame.draw.rect(screen, (255, 196, 0), player)
pygame.draw.rect(screen, (235, 80, 80), rock)
score_text = font.render(f"Score: {score}", True, (240, 240, 240))
screen.blit(score_text, (10, 10))
if state == "over":
message = font.render("Game over", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
כל השיעורים ביחידה חוקי המשחק
תרגלו בעצמכם: Pygame אונליין