Fungsi Reset
Termasuk bagian Aturan Game dalam perjalanan Pygame di Coddy. Pelajaran 4 dari 29.
Mainkan sebuah game, raih beberapa poin, kalah, lalu tekan R. Game baru dimulai dengan skor lama. Setiap nilai yang diubah oleh game harus dikembalikan ke nilai awalnya, dan sering kali ada satu yang terlupakan.
Letakkan semua nilai awal dalam satu fungsi dan panggil fungsi itu sebelum game pertama dimulai dan saat menekan R:
def reset():
global player, rock, score
player = pygame.Rect(220, 300, 40, 40)
rock = pygame.Rect(random.randint(0, 456), -24, 24, 24)
score = 0
reset()Baris global itu penting. Variabel yang kamu tetapkan di dalam fungsi menjadi milik fungsi tersebut, kecuali kamu menyatakan sebaliknya. Tanpa global, score = 0 akan membuat variabel lokal score baru yang hilang saat fungsi berakhir, dan skor game tidak akan berubah.
Sekarang, bagian awal game hanya ditulis sekali. Saat nanti kamu menambahkan nilai, seperti nyawa, kamu menambahkannya di satu tempat, lalu game pertama dan setiap game baru akan menggunakannya.
Tantangan
Sedang- Tulis
reset()yang mengaturplayer,rock, danscoreke nilai awalnya, denganglobal player, rock, scoresebagai baris pertamanya. - Panggil
reset()sekali sebelum perulangan, sebagai pengganti tiga baris yang mengatur variabel tersebut. - Saat tombol R ditekan, panggil
reset()dan atur state ke"play".
Coba sendiri
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 event.key == pygame.K_r and state == "over":
player.x = 220
rock.y = -24
rock.x = random.randint(0, 456)
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)))
hint = font.render("Press R to play again", True, (240, 240, 240))
screen.blit(hint, hint.get_rect(center=(240, 200)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Aturan Game
1Status Game
Variabel StatusLayar MenuTekan R untuk Bermain LagiFungsi ResetSatu Fungsi untuk Setiap StatusLatihan sendiri: Playground Pygame