Menu
CoddyTech

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.

challenge icon

Tantangan

Sedang
  1. Tulis reset() yang mengatur player, rock, dan score ke nilai awalnya, dengan global player, rock, score sebagai baris pertamanya.
  2. Panggil reset() sekali sebelum perulangan, sebagai pengganti tiga baris yang mengatur variabel tersebut.
  3. 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()
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Aturan Game

Latihan sendiri: Playground Pygame