Python

Panduan Seru Membuat Game Tembak Balon dengan Python dan Pygame

Halo, teman-teman! Siapa di sini yang suka bermain game? Nah, kali ini kita akan belajar cara membuat game sederhana yang pasti bikin kalian ketagihan: Game Tembak Balon! 🎈

Kenapa Harus Pygame?

Sebelum kita mulai, mungkin ada yang bertanya-tanya, “Kenapa harus menggunakan Pygame?” Pygame adalah library Python yang sangat cocok untuk membuat game. Dengan Pygame, kita bisa membuat game dengan grafis yang menarik dan kontrol yang mudah. Jadi, siap-siap ya untuk berkreasi!

Langkah Pertama: Siapkan Lingkungan Kerja

Pertama-tama, pastikan kalian sudah menginstal Python dan Pygame di komputer kalian. Jika belum, kalian bisa mengunduhnya dari situs resmi Python dan Pygame. Setelah itu, buat folder baru untuk proyek kita, misalnya gametembakbalon.

Struktur Folder

Di dalam folder gametembakbalon, kita akan membuat beberapa file:

  • gametembak.py: Ini adalah file utama yang berisi kode game kita.
  • high_score.txt: File ini akan menyimpan skor tertinggi.
  • assets/: Folder ini akan menyimpan gambar balon yang akan kita gunakan.

Jangan lupa untuk menambahkan gambar balon ke dalam folder assets! 🎈 unduh file balon disini

Kode Game

Sekarang, mari kita mulai menulis kode! Berikut adalah contoh kode untuk game kita:


import pygame
import random
import os
import sys
<h1>Inisialisasi Pygame</h1>
pygame.init()
<h1>Dimensi layar</h1>
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT), pygame.RESIZABLE)
pygame.display.set_caption("Game Tembak Balon")
<h1>Warna</h1>
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
<h1>Menentukan path ke file balloon.png</h1>
if getattr(sys, 'frozen', False):
# Jika aplikasi dijalankan sebagai executable
base_path = sys._MEIPASS
else:
# Jika dijalankan sebagai skrip Python
base_path = os.path.dirname(<strong>file</strong>)

balloon_image_path = os.path.join(base_path, 'assets', 'balloon.png')
balloon_image = pygame.image.load(balloon_image_path)
balloon_image = pygame.transform.scale(balloon_image, (50, 70))
<h1>Font untuk skor dan timer</h1>
font = pygame.font.Font(None, 36)
<h1>Kelas Balon</h1>
class Balloon(pygame.sprite.Sprite):
def <strong>init</strong>(self):
super().<strong>init</strong>()
self.image = balloon_image
self.rect = self.image.get_rect()
self.reset_position()
<pre><code>def reset_position(self):
    # Mengatur posisi balon secara acak di layar
    self.rect.x = random.randint(0, SCREEN_WIDTH - self.rect.width)
    self.rect.y = random.randint(SCREEN_HEIGHT, SCREEN_HEIGHT + 100)
    self.speed = random.randint(1, 3)

def update(self):
    # Memperbarui posisi balon
    self.rect.y -= self.speed
    if self.rect.y &lt; -self.rect.height:
        self.reset_position()</code></pre>
<h1>Inisialisasi grup sprite</h1>
balloons = pygame.sprite.Group()
all_sprites = pygame.sprite.Group()
<h1>Membuat balon awal</h1>
for _ in range(10):
balloon = Balloon()
balloons.add(balloon)
all_sprites.add(balloon)
<h1>Skor dan timer</h1>
score = 0
high_score = 0
high_score_player = ""
countdown = 30  # Hitungan mundur 30 detik
<h1>Memuat skor tertinggi dari file</h1>
high_score_data = []
if os.path.exists("high_score.txt"):
with open("high_score.txt", "r") as file:
high_score_data = file.read().split(",")  # Membaca data sebagai elemen daftar
<h1>Pastikan ada cukup elemen sebelum mengakses</h1>
if len(high_score_data) &gt; 1:
high_score = int(high_score_data[0])
high_score_player = high_score_data[1]
else:
high_score = 0  # Atau nilai default lainnya
high_score_player = ""  # Atau nilai default lainnya
<h1>Memuat skor saat ini dari file (opsional)</h1>
if os.path.exists("current_score.txt"):
with open("current_score.txt", "r") as file:
current_score = int(file.read())
else:
current_score = 0  # Nilai default jika file tidak ada
<h1>Fungsi untuk menampilkan layar mulai</h1>
def show_start_screen():
screen.fill(WHITE)
title_text = font.render("Game Tembak Balon", True, BLACK)
instructions_text = font.render("Klik balon untuk mendapatkan skor!", True, BLACK)
start_text = font.render("Klik untuk Mulai", True, RED)
high_score_text = font.render(f"High Score: {high_score} oleh {high_score_player}", True, BLACK)
screen.blit(title_text, (SCREEN_WIDTH // 2 - title_text.get_width() // 2, SCREEN_HEIGHT // 2 - 100))
screen.blit(instructions_text, (SCREEN_WIDTH // 2 - instructions_text.get_width() // 2, SCREEN_HEIGHT // 2 - 50))
screen.blit(start_text, (SCREEN_WIDTH // 2 - start_text.get_width() // 2, SCREEN_HEIGHT // 2))
screen.blit(high_score_text, (SCREEN_WIDTH // 2 - high_score_text.get_width() // 2, SCREEN_HEIGHT // 2 + 50))
pygame.display.flip()
<h1>Fungsi untuk menampilkan layar akhir</h1>
def show_end_screen(score, high_score, high_score_player):
screen.fill(WHITE)
final_score_text = font.render(f"Final Score: {score}", True, BLACK)
high_score_text = font.render(f"High Score: {high_score} oleh {high_score_player}", True, BLACK)
restart_text = font.render("Klik untuk Mulai Lagi", True, RED)
screen.blit(final_score_text, (SCREEN_WIDTH // 2 - 100, SCREEN_HEIGHT // 2 - 50))
screen.blit(high_score_text, (SCREEN_WIDTH // 2 - 100, SCREEN_HEIGHT // 2))
screen.blit(restart_text, (SCREEN_WIDTH // 2 - restart_text.get_width() // 2, SCREEN_HEIGHT // 2 + 50))
pygame.display.flip()
<h1>Fungsi untuk menampilkan layar input nama</h1>
def show_name_input_screen():
screen.fill(WHITE)
input_box = pygame.Rect(SCREEN_WIDTH // 2 - 100, SCREEN_HEIGHT // 2, 200, 50)
color_inactive = pygame.Color('lightskyblue3')
color_active = pygame.Color('dodgerblue2')
color = color_inactive
active = False
text = ''
done = False
<pre><code>while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if input_box.collidepoint(event.pos):
                active = not active
            else:
                active = False
            color = color_active if active else color_inactive
        elif event.type == pygame.KEYDOWN:
            if active:
                if event.key == pygame.K_RETURN:
                    return text
                elif event.key == pygame.K_BACKSPACE:
                    text = text[:-1]
                else:
                    text += event.unicode

    screen.fill(WHITE)
    txt_surface = font.render(text, True, color)
    width = max(200, txt_surface.get_width() + 10)
    input_box.w = width
    screen.blit(txt_surface, (input_box.x + 5, input_box.y + 5))
    pygame.draw.rect(screen, color, input_box, 2)

    # Tambahkan keterangan masukan nama
    instruction_text = font.render("Masukkan Nama:", True, BLACK)
    screen.blit(instruction_text, (SCREEN_WIDTH // 2 - instruction_text.get_width() // 2, SCREEN_HEIGHT // 2 - 30))

    pygame.display.flip()</code></pre>
<h1>Loop utama permainan</h1>
def main_game():
global score, high_score, high_score_player  # Tambahkan high_score_player di sini
running = True
start_ticks = pygame.time.get_ticks()  # Mulai timer
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
pos = pygame.mouse.get_pos()
clicked_balloons = [b for b in balloons if b.rect.collidepoint(pos)]
for balloon in clicked_balloons:
balloon.reset_position()
score += 1
elif event.type == pygame.VIDEORESIZE:
global SCREEN_WIDTH, SCREEN_HEIGHT, screen
SCREEN_WIDTH, SCREEN_HEIGHT = event.w, event.h
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT), pygame.RESIZABLE)
<pre><code>    # Update balon
    all_sprites.update()

    # Hitung waktu yang tersisa
    seconds = (pygame.time.get_ticks() - start_ticks) / 1000  # Hitung berapa detik
    remaining_time = countdown - int(seconds)

    # Periksa apakah waktu habis
    if remaining_time &lt;= 0:
        if score &gt; high_score:
            high_score = score
            high_score_player = show_name_input_screen()
            # Simpan skor tertinggi baru ke file
            with open("high_score.txt", "w") as file:
                file.write(f"{high_score},{high_score_player}")

        # Simpan skor saat ini ke file
        with open("current_score.txt", "w") as file:
            file.write(str(score))
        return  # Kembali untuk memulai ulang permainan

    # Gambar semuanya
    screen.fill(WHITE)
    all_sprites.draw(screen)

    # Gambar skor dan timer
    score_text = font.render(f"Score: {score}", True, BLACK)
    screen.blit(score_text, (10, 10))
    timer_text = font.render(f"Time: {remaining_time}", True, BLACK)
    screen.blit(timer_text, (SCREEN_WIDTH - 150, 10))

    # Segarkan layar
    pygame.display.flip()

    # Kecepatan frame
    pygame.time.Clock().tick(60)</code></pre>
<h1>Loop permainan dengan opsi restart</h1>
while True:
# Tampilkan layar mulai dan tunggu pengguna untuk mengklik untuk memulai
waiting_to_start = True
while waiting_to_start:
show_start_screen()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
waiting_to_start = False
<pre><code># Jalankan permainan utama
main_game()

# Reset skor untuk permainan baru
score = 0</code></pre>
<h1>Copyright audhighasu.com</h1>

Menambahkan Fitur

Setelah kita memiliki dasar game, kita bisa menambahkan berbagai fitur menarik, seperti:

  • Skor: Hitung berapa banyak balon yang berhasil ditembak.
  • Timer: Berikan waktu terbatas untuk menembak balon.
  • Skor Tertinggi: Simpan skor tertinggi agar pemain bisa bersaing.

Uji Coba Game

Setelah semua kode ditulis, saatnya untuk menguji game kita! Jalankan file gametembak.py dan lihat apakah semuanya berjalan dengan baik. Jika ada yang tidak berfungsi, jangan khawatir! Debugging adalah bagian dari proses belajar.

Ekspor ke Executable

Jika kalian ingin membagikan game ini kepada teman-teman, kalian bisa mengemasnya menjadi file executable menggunakan PyInstaller. Cukup jalankan perintah berikut di terminal:

pyinstaller --onefile --add-data "assets/balloon.png;assets" gametembak.py

Kesimpulan

Nah, itu dia! Sekarang kalian sudah tahu cara membuat game Tembak Balon menggunakan Python dan Pygame. Semoga panduan ini bermanfaat dan menginspirasi kalian untuk membuat game-game seru lainnya. Jangan lupa untuk berbagi hasil karya kalian dengan teman-teman!

Selamat bermain dan berkreasi! 🎮✨

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *