Visual Studio Code ile yapılan pygame oyun nasıl dışarı EXE olarak aktarılır?

yilmazefebcir

Decapat
Katılım
8 Eylül 2023
Mesajlar
519
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Visual Studio Code ile yaptığım pygame oyunumu nasıl dışarı EXE veya ZIP dosyası olarak aktarabilirim? Oyunda görseller var.
 
PyInstaller diye bir kütüphane var, daha önce pek çok kez kullandım. Eğer (basit ama) consoldan yazmak istemiyorsanız auto-py-to-exe diye bir kütüphane var, o da PyInstaller altyapısını kullanıyor ama GUI de içeriyor. Ama resimleri direkt exeye ekleyemiyorsunuz diye biliyorum. Kodda belirttiğiniz dizinde olmalı.
 

Peki resimleri ZIP dosyasında daha rahat bir şekilde birleştirebilir miyim?
 
PyInstaller'ın --onedir ayarı ile programınızı paketleyebilirsiniz.
Programınızın ana .exe dosyası ve gerekli kütüphaneleri bir klasörde toplar.
Resimlerinizi de buraya kopyalarsınız.
Tüm klasörü zipleyerek dağıtabilirsiniz.

--onefile olanı tavsiye etmem, çünkü; aslında yaptığı şey, herşeyi paketleyip, paketten çıkaran, kapsayıcı bir .exe yaratmak. Yani bu gerçek anlamıyla, makina koduna dönüştürülmüş bir .exe yapmıyor, bir paketleyici->paketten çıkarıcı hazırlıyor.

Bu yüzden, hız olarak, --onedir, --onefile'dan daha hızlı olabiliyor:


çevirelim:

 
Resimler için bu konuya bakabilirsiniz.
 

Anladım, ama bak ben yaptığım oyunu kendi dosyasındayken açabiliyorken başka bir yere çıkarınca açılmıyor yani imagesları tanımlayamıyor.
 
Anladım, ama bak ben yaptığım oyunu kendi dosyasındayken açabiliyorken başka bir yere çıkarınca açılmıyor yani imagesları tanımlayamıyor.
Resimleri dizin belirterek mi yazdınız koda?
 
Sorunu görmek için mini bir proje yarattım (ChatGPT yardımıyla), sonra da onu çalışır hale getirdim.

Görünüşe göre, --add-data parametresini eklemek gerekiyor.

Ayrıca, en önemlisi, Python script haliyle, paketlenmiş haldeki script'in path'i aynı değil. Sorun da bu yüzden çıkıyor. Aşağıda bir print() satırı ekledim, doğru path'i gösteriyor.

Belki sizde çok daha fazla resim vardır, daha genel bir şekilde ele almak gerekir, ama, bu kod sorunu gösteren ve path farkını ortaya koymak amacıyla var.

Dosyalarımız şu şekilde:

Kod:
alien.png
pack.sh
simple_game.py

Resimi kullanan kod:

Python:
import pygame
import sys
import os

pygame.init()

WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Simple Pygame - Load Image")

if getattr(sys, 'frozen', False):
    # eğer paketlenmiş ise
    print('sys._MEIPASS', sys._MEIPASS)
    image_path = os.path.join(sys._MEIPASS, 'alien.png')
else:
    # paketlenmeden açık çalışıyorsa
    image_path = 'alien.png'

try:
    alien_image = pygame.image.load(image_path)
    alien_rect = alien_image.get_rect()
    alien_rect.topleft = (100, 100)
except pygame.error as e:
    print(f"Error loading image: {e}")
    sys.exit()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((255, 255, 255))

    screen.blit(alien_image, alien_rect)

    pygame.display.flip()

    pygame.time.Clock().tick(60)

pygame.quit()
sys.exit()

paketleyici (Linux shell script formatında, ama pyinstaller komutu Windows'da da aynı olmalı):

Bash:
#!/bin/bash

clear
pyinstaller --clean --onedir --add-data "alien.png:." simple_game.py
 

Hocam ZIP halinde yapsam? Çünkü ChatGPT'de EXE'yi bende sordum yapımı uzun sürüyor direkt bence ZIP halinde yapsam daha kısa olur. Sizce öyle nasıl yapabilirim?
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…