Kodlarını Yapay Zekâya Yazdırdığım C++ Oyunum ile Üçüncü Ayda Artık C ve C++ Diline Aşina Olmaya Başladım! ツ

Şimdi daha iyi anladım. Asıl amaç gerçekten bir oyun yapmak değil, hatta ne zaman biteceği de önemli değil. Travmatik ama özleten çocukluk anılarını dijitale dökme çabası görüyorum. O zaman otlar ve balıklar hakkında tavsiye vermekten vazgeçtim çünkü bu bir tür kutsal davaya dönüşmüş. Saygı duyarım.

Bu arada diklatimi çekti arada dini bilgiler geçmiş. Hangi ilmihalde okuduğumu hatırlamıyorum ama şöyleydi:

Yangında

Suda

Depremde

Kazada

Savaşta (islam için olmak şartıyla)

Hastalıktan

Mazlum olarak zalim saldırısında

Ölen müminler şehit sayılıyor. Çok önemli sayılmaz ama yazmak istedim.

Oyun, insana kafayı yedirtecek bir konu. Bugün Tankın sadece bir iki assetini editleyip (editleme dediğim daha güzel görünür mü acaba diye bir iki piksel silmek veya eklemek) çabuk yoruldum ve bıraktım. Aha şimdi yatmak üzereyim. Daha bunun kodlama kısmı var. Ses efektleri hala eksik. Düşman tankları eksik, sola, sağa, yukarı, aşağı durumları ve bunların bir de yukarıdaki gibi animated versiyonları lazım. Algoritmayı hergün biraz daha güncelliyorum. Bunu yaparken bile yük taşımış gibi yorulduğumu hissediyorum. Bir de bu 2D basit bir oyun. Seninkini düşünemiyorum bile.

Kolay gelsin valla işin çok zor.

1 Beğeni

Şehitler konusunda yazdıklarınız doğru. Bir şeyi eksik bıraktım, ama ne diyordum. Yazarken birden aklımdan uçtu gitti ve hatırlayamadım. Şimdi Mastodon gönderilerime bakınca hatırladım.

O da oyunun şu halini nasıl gördüğüm ile ilgili.

Kendimi daha rahat hissetmemi sağlıyor.

Mastodon’dan alıp video linkleri ile birlikte buraya yapıştırıyorum.

…..

Oyunumun şu anki hâlini ne olarak gördüğümü paylaşmak istiyorum.

Sinemada bir film çekilmeden önce tüm sahnelerini çizmek, hatta, ön prova canlandırmalarını bile çekmek ve aşama aşama sahnenin daha mükemmel olması için geliştirerek ilerlemek profesyonelce bir yaklaşımdır.

Sizinle Jurassic Park filminin “Story Board” larından birini paylaşacağım.

En sonunda, eğer bulabilirsem filmden önce hazırlanan bu mutfak sahnesinin stop motion canlandırma videosunu da paylaşacağım.

İşte bahsettiğim Jurassic Park filminin Mutfak sahnesinin çizimden ve ön prova canlandırma çekimlerinden sonra stop-motion ön canlandırma çekimi.

Bütün bu çizimler ve ön canlandırma çekimleri sahnenin en güzel hâline gelebilmesi için geçilen aşamalardı.

C++ oyunum da bunlar gibi ön tasarım aşamasıdır! Böyle görülmelidir!

Oyunum gerçekten güzel bir oyun olabilirse, işte o zaman bütün görselleri, hatta kodları tekrar gözden geçirilip mükemmel hale getirilir. Fakat önce buna değecek kadar güzel bir oyun olduğunu hissettirebilmeli. Bu yüzden görselleştirmelerimde renk, doku ve biçim özelliklerini doğru vermeye çalışıyorum. Diğer bütün detayları profesyonel seviyeye havale ediyorum. Bu çalışmamı daha hızlandırıyor. Yoksa her bir görseli mükemmel yapmakla uğraşsam, sâdece birkaç görsel yapabilirdim. Ortada oyun falan olmazdı!

1 Beğeni

Kemal bey bak sana bir su videosu atayım.

Ben yüzme bilmeyen bir insanım bunu görünce adrenalin pompalıyorum​:grinning_face_with_smiling_eyes:

1 Beğeni

Fakat bu yüzmekle alâkalı değil, daha çok yükseklik korkusuyla alâkalı gibi! ツ

Bakarken İnsanın hissettiği şey aşağıya düşecekmiş gibi olmak!

Bu İnsan fobileri ile ilgili bir şeyler dinlemiştim.

Örümcek, yılan, çiyan,.. gibi hayvanları oyunlarda bile görmeye dayanamayanlar var!

Subnautica gibi su altında geçen oyunları boğuluyormuş gibi hissettiği için oynayamayanlar var!

Dün gece burada bahsini ettiğim için uzun aradan sonra Grim Dawn oynadım ve belki oyunda işime yarayacak bir şeyleri fark ederim diye dikkatlice inceledim.

Özellikle de Ugdenbog Bataklığında oynadım. ツ

Karşımızdaki sulak bataklık yüzünden çocukluğum kurbağa sesleriyle geçti. Fakat kurbağaları sevmem. PyGame oyunumda denk gelmişti, kurbağa heykeli bile duruyor! Fakat bu C++ sürüme eklemekte şimdilik kararsızım.

Oyunumdaki göletin kenarındaki sazları hiç sevmedim, çok yapay görünüyorlar. Witcher 2’deki sazlar tam benim oyunuma göre. O burada daha önce paylaştığım ekran alıntısından çıkarıp kullanacağım sanırım. Grim Dawn sazları da fena değil. Uzun kuru otların arasında aldığım ekran görüntüsüne bakın. Tam benlik otlar! ツ

Videoyu aşağıya ekleyeceğim. Ağacın arkasını göstermek için sâdece üstünü geçici olarak yok ediyor. Belki de en iyisi öyle yapmak. Çünkü düşününce ağacın ortasına bir elips alanı yapsam ve arkadakini bu elips alanı içinde ağacın önünde yarı şeffaf göstersem bile başka bir sorun işi mahvediyor. Ağaçların dalları birbiri ile kesişiyor! O elips alanların kesiştiği yerde yarı şeffaf görüntü tam opağa falan dönecektir. O da işi iyice bozacak. En iyisi ağacı ikiye bölüp sadece üst kısmını belli belirsiz olacak kadar şeffaflaştırmak en iyisi gibi görünüyor!

kemale-bataklık :backhand_index_pointing_left: bataklık.

:zany_face:

1 Beğeni

Yatay eksende hareket etmedikçe platform oyunlarını da oynayabiliyorum.

Böylelerini de çok severim.

Yatay oynanan klasik platform oyunlarını AAA kalite bile olsa oynayamıyorum!

Eskiden herhâlde bunlar için Oyun Kolu gerekiyor diyordum. Fakat Oyun Kolu aldım yine oynayamıyorum!

Oyunun basitliğinden çok oyuncuyu içine alıp kendini kaptırmasını sağlayıp sağlamadığı çok daha önemli. Sürükleyici piksel grafik bir oyunu AAA grafikli bir sürü çöp oyuna tercih ederim.

Shattered Pixel Dungeon oynayabilirseniz güzel bir oyundur. Hem de bir çok platformda bedava! Hem Pardus 25 Gnome’da, hem Raspberry Pi 5’te, hem de Huavei Tablette yüklü, ama benin oynamayı sevmediğim bir tarzı var. Ölünce ölüyor, baştan başlıyorsun! ツ

Hazır sizi bulmuşken ve hazır burası Pardus Forumuyken Oyunumun Linux ile yada Gnome ile veya Debian yada belki de Pardus’un kendisi ile ilgili bir sorunu var. Yapar Zekâ ile oyunumun sh. dosyası ile ilgili sırf Pardus’da çalışmayı bıraktığı için birkaç kez değişiklik yapıldı. En son geçenlerde tekrar bir değişiklik yapılmıştı, ama dün baktım ki tekrar çalışmayı bırakmış!

Aaaa! çalışıyor!

Fakat birkaç kez çalıştırınca yine oturum kapandı!

Daha önce yapay zekâya değiştirttiğimde oturum kapanmıştı, geldiğimde Arc Menü yok olmuştu! Gnome arayüzüne hiç alışık değilim. Arc Menü nün uygulamalardan açılırsa çalışacağını bile yapay zekâdan öğrenmiştim!

Israr edersem aynı şeyin tekrar başıma gelebileceğimi biliyorum!

Şu anda kapanıp tekrar oturumdan sonra bunları yazmaya devam ediyorum!

SELDA.sh dosyası ilk iki seferinde çalıştı, ama üçüncüde Pardus oturumu yine kapandı!!!

SELDA.sh dosyası oyunu Oyunlara ekliyor ve masa üstüne kısayol atıyor. Test için bir kısa yol da ben görev çubuğuna ekliyorum! Fakat Raspberry Pi 5’te de aynısı olduğu hâlde orada hiç sorun çıkmıyor!

SELDA.sh dosyasını paylaşabiliyorsam aşağıya ekleyeceğim. Bildiğiniz bir sorun görüyorsanız söylerseniz memnun olurum.

Hata verdiğinde ekrandan okuyabildiğim mesajlardan biri kodda yazan şu bildirim idi;

HATA: ‘main’ derlenmiş ikili dosyası bulunamadı! Lütfen önce Geany ile derleyin."

#!/bin/bash

# 1. Betiğin çalıştığı klasörün tam yolunu otomatik bulur
KLASOR_YOLU="$(cd "$(dirname "$0")" && pwd)"

# 2. Oyun klasörüne geçiş yap
cd "$KLASOR_YOLU"

# 3. Eğer 'main' dosyası bu sistem mimarisine ait değilse uyarı ver (Çakışma Önleyici)
if [ -f "main" ]; then
    # Çalıştırılabilirlik izni verildiğinden emin ol
    chmod +x main
else
    echo "HATA: 'main' derlenmiş ikili dosyası bulunamadı! Lütfen önce Geany ile derleyin."
    exit 1
fi

# 4. Kısayol içerik şablonunu hazırla (Tırnak işaretleri temizlendi)
create_desktop_entry() {
    local HEDEF_YOL="$1"
    echo "[Desktop Entry]" > "$HEDEF_YOL"
    echo "Version=1.0" >> "$HEDEF_YOL"
    echo "Type=Application" >> "$HEDEF_YOL"
    echo "Name=SELDA" >> "$HEDEF_YOL"
    echo "Comment=2.5D RPG Macera Oyunu" >> "$HEDEF_YOL"
    # DÜZELTME: Tırnak işaretleri kaldırıldı, standart Linux yol tanımı yapıldı
    echo "Exec=$KLASOR_YOLU/main" >> "$HEDEF_YOL"
    echo "Icon=$KLASOR_YOLU/SELDA.png" >> "$HEDEF_YOL"
    echo "Path=$KLASOR_YOLU" >> "$HEDEF_YOL" # Çalışma dizini masaüstünden açarken de korunsun diye eklendi
    echo "Terminal=false" >> "$HEDEF_YOL"
    echo "Categories=Game;AdventureGame;" >> "$HEDEF_YOL"
    chmod +x "$HEDEF_YOL"
}

# 5. BAŞLAT MENÜSÜNE oluştur
SISTEM_MENUSU="$HOME/.local/share/applications"
mkdir -p "$SISTEM_MENUSU"
create_desktop_entry "$SISTEM_MENUSU/SELDA.desktop"

# 6. MASAÜSTÜNE oluştur (Türkçe Pardus ve İngilizce Raspberry Pi OS uyumlu)
if [ -d "$HOME/Masaüstü" ]; then
    create_desktop_entry "$HOME/Masaüstü/SELDA.desktop"
    # Gnome (Pardus) için masaüstü ikon güvenliği ayarı
    gio set "$HOME/Masaüstü/SELDA.desktop" metadata::trusted true 2>/dev/null || true
elif [ -d "$HOME/Desktop" ]; then
    create_desktop_entry "$HOME/Desktop/SELDA.desktop"
fi

# 7. Oyunu başlat
./main

Merhaba hocam.

Ben kod konusunda çok iyi değilim. Bu nedenle vibe coding ile birşeyler geliştiriyorum. Fakat bu verdiğiniz sh dosyası hakkında YZ ile biraz konuştuk. sh dosyasında bir sorun olmadığını, muhtemelen sorunun main dosyasında olduğundan kuşkulandığını söylüyor. Bana muhtemel gördüğü senaryoyu şöyle anlatıyor:

Bu anlatılanlar klasik bir grafik sürücüsü/GPI kaynak sızıntısı belirtisidir. Oyun her açılışta bir miktar GPU belleği kullanıp kapatırken serbest bırakmıyor (yani hafızadan temizlemiyor demek istiyor) olabilir. Bir süre sonra, örneğin üçüncü çalıştırmada ekran kartı sürücüsünün veya gnome-shell’in çökmesine neden oluyor. GNOME da oturumu kapatıyor. Fakat Ras-pi farklı bir GPU sürücüsü kullandığı için hata orada tetiklenmeyebilir.”

Size birazdan özelden mesaj gönderiyorum. Neler yapmanız gerektiğini sıraladı. Onları vereceğim.

1 Beğeni

Yanıtınız için çok teşekkür ederim. Linke gittim ve SELDA.sh dosyasının sonunu tavsiye ettiği şekilde değiştirdim. Bu bilgisayar tekrar çöktüğünde sorunu anlamaya yarayacak sanıyorum. Geany sh konsol ekranına yazan çıktıyı bir dosyaya kaydediyor!

# 7. Oyunu başlat (hata ayıklama için çıktı kaydediliyor)
./main > "$KLASOR_YOLU/selda_log.txt" 2>&1

Aslında oyunu normal oynayan için çökme falan yok! Masaüstü veya Görev çubuğuna eklenen Kısayollardan yada Oyunlar sekmesine eklenen ikona tıklayarak oyunu açtığınızda Pardus’da da çökmeyle hiç karşılaşmadım!

Sorun sâdece zâten bilgisayara kurulu olan oyunu “SELDA.sh” dosyasını çalıştır diyerek açmaya kalkınca oluyor!

Muhtemelen onu da ilk defa oyunu bilgisayara kurmak için çalıştırıldığında çökmeyecek.

Şimdi bile defalarca çalıştırdım, çökme falan yok!

Aksilik değil mi çökmüyor işte! ツ

Kaldı ki oyunu kuran kişi SELDA.sh dosyasına neden ihtiyaç duysun? SELDA.sh dosyası bir kere çalıştırıldığında masaüstüne bir kısayol ikonu atıyor ve oyunu Oyunların arasına ekliyor. Oyunların arasına eklenene tıklayıp görev çubuğuna bir tane daha kısayol atanabiliyor!

Bu kadar kısayolu kim ne yapsın, ama ben oyunu geliştirdiğim için her şeyi tıklayıp, sorun var mı öğrenmem gerektiği için bende her yerde SELDA kısayolu ekli! ツ

Bir de bu aralar Pardus da bir tuhaflık var! SSD diskleri sürekli bağla dediğim hâlde arada bağlamıyor! Ben de fark etmeyip Steam’i yada Heroic Games’i açıyorum ve oyunların hiç biri yüklü değil görünüyor! İşin yoksa bu istemcilere disk bağla! Üstelik bağlasan bile bâzı oyunlar hatâ verip çalışmıyor! O yüzden en temizi yeniden başlatıyorum ve bir de bakıyorum bu sefer disk istediğim gibi açılışta şifresiz olarak açık! Böyle saçmalıyor! Belki SELDA.sh dosyasında da bunun gibi yada farklı şekilde saçmalıyordur! Belki sorun tamamen Pardus 25 Gnome yada kullandığı sistemlerden birinden kaynaklı!

Aslında zâten öyle Raspberry Pi 5’te Linux, üstelik o da Debian, ama onda SELDA.sh dosyasından istediğin kadar çalıştır çökme falan hiç yok!

Tabi sorun yine de oyunun kodlarında olabilir.

Eğer kodlardan kaynaklı bir grafik sızıntısına yol açma durumu varsa bunu bilmem lazım.

Fakat oyunun kısayollarından çalıştırıldığında Pardus 25 Gnome’da da asla çökmediğini eklemeyi unutmuşum. Sizin yapay zekâ bunu bilseydi belki daha farklı cevap verirdi!

Yine de cevabınız ve sorumu yapay zekâya sorup yanıtı paylaştığınız için çok teşekkür ederim.

Şu anda oyunu arka arkaya 4 defa SELDA.sh dosyasını çalıştırarak açtığım hâlde çökme falan yok!

Fakat o bahsettiğim diskleri görmeme olayı ve bir de geçenlerde bağladığım bir diskin hayâletini gösterip, disk yok demesi saçmalığını gidermek için oyunu yeniden başlattıktan sonra dört defa sh dosyasını çalıştırmama rağmen çökme yok!

İşte bu yüzden Pardus 25 Gnome’dan şüpheleniyorum!

50 tane işletim sistemim yok ki hepsini deneyeyim!

Oyunu paylaşacağım zaman bir “BENİ OKU” dosyası ekleyip oyunu kurunca artık “SELDA.sh” dosyasından değil kısayollarından çalıştırın. Çökmeye sebep olma ihtimali var diye bir uyarı yazarım!

Şimdi yapay zekâdan eksikliğini gördüğüm bir şeyi daha isteyeceğim.

Bir tür “Uninstall” dosyası da yapsın çünkü Pardus 25 Gnome Oyunlara eklenen SELDA oyununu kaldıramıyor! Flatpak gibi harici bir yerden yüklenmiş gibi görünüyor mu ne diyordu.

Zamanında flatpak’ı kaldırmak için kullandığım bu terminal kodlarını kopyalayıp saklamıştım. Program kaldıramadığım zaman hatırlamak için faydalı oluyor.

dpkg --list    (Yüklü programları terminalde listeler)
sudo apt-get --purge remove flatpak  (flatpak programını kaldırır)
flatpak uninstall --unused (flatpak uygulamaları silindiği hâlde runtime dosyaları sistemde kaldığı için hâlâ menü de görünmesini önlemek için)

Yapay zekadan da SELDA oyununu bunun gibi komutlarla sistemden tamamen kaldıracak bir çalıştırılabilir dosya isteyeceğim.

Yanıtınız için tekrar teşekkür ederim.

1 Beğeni

Oyunum ile ilgili eksikliğini gördüğüm iki yeni dosya daha oluşturuldu.

SELDA Oyunu SELDA.sh dosyası ile kolayca sisteme kuruluyor. Fakat sistemler oyunu kaldıramıyordu. Bunun için bir “Uninstal.sh” adında çalıştırılabilir dosya hazırlandı ve hem Raspberry Pi 5’de hem de Pardus 25 Gnome’da harika çalışıyor! Oyunu ve kısayollarını sistemden tamamen temizliyor.

SELDA-uninstall.sh (Kaldırma Betiği): Sistemi kirletmeden tüm kısayolları ve logları tek komutla temizleyen zıt betik.
Libraries.sh (Oyun için gerekli kütüphâneleri otomatik kurar)

“SELDA-uninstall.sh” kaldırma betiği dosya içeriği:

#!/bin/bash

# 1. Betiğin çalıştığı klasörün tam yolunu otomatik bulur
KLASOR_YOLU="$(cd "$(dirname "$0")" && pwd)"

echo "SELDA Oyunu sistemden kaldırılıyor..."

# 2. Başlat menüsü kısayolunu sil
SISTEM_MENUSU="$HOME/.local/share/applications"
if [ -f "$SISTEM_MENUSU/SELDA.desktop" ]; then
    echo "-> Başlat menüsü kısayolu siliniyor..."
    rm -f "$SISTEM_MENUSU/SELDA.desktop"
fi

# 3. Masaüstü kısayollarını sil (Türkçe ve İngilizce dizinler kontrol ediliyor)
if [ -d "$HOME/Masaüstü" ] && [ -f "$HOME/Masaüstü/SELDA.desktop" ]; then
    echo "-> Türkçe masaüstü kısayolu siliniyor..."
    rm -f "$HOME/Masaüstü/SELDA.desktop"
elif [ -d "$HOME/Desktop" ] && [ -f "$HOME/Desktop/SELDA.desktop" ]; then
    echo "-> İngilizce masaüstü kısayolu siliniyor..."
    rm -f "$HOME/Desktop/SELDA.desktop"
fi

# 4. Oyun çalışırken oluşturulan log dosyasını temizle
if [ -f "$KLASOR_YOLU/selda_log.txt" ]; then
    echo "-> Log dosyası temizleniyor..."
    rm -f "$KLASOR_YOLU/selda_log.txt"
fi

# 5. Masaüstü ve menü veri tabanını tetikle (Kısayolların anında kaybolması için)
echo "-> Sistem menü önbelleği güncelleniyor..."
update-desktop-database "$SISTEM_MENUSU" 2>/dev/null || true

echo "=========================================================="
echo "BAŞARILI: SELDA kısayolları ve sistem bağları kaldırıldı."
echo "Not: Proje klasörünüz korunmuştur: $KLASOR_YOLU"
echo "Eğer tüm oyunu silmek isterseniz bu klasörü silebilirsiniz."
echo "=========================================================="

İkinci eksiklik ise bu oyunu başkaları ile paylaştığımda o kişilerin paylaşacağım build yapılandırmama bakıp gerekli kütüphâneleri hemen anlayıp kurabilecek bilgiye sahip olmaları gerekiyordu ki ben bile bu bilgiye sahip değilim!

O yüzden oyunun ihtiyaç duyduğu bütün kütüphâneleri eğer yoksa sisteme kuracak, varsa güncelleyecek bir çalıştırılabilir dosya daha istedim. SELDA.sh içine de eklenebilirdi, ama ayrı olmasını istedim.

“Librarries.sh” çalıştırılabilir dosyasının içeriği;

  1. Canlı İzleme: Kodların sonundaki gizleme parametrelerini (-qq, >/dev/null) kaldırdım. Artık hangi paketin yüzde kaçla indirildiğini, Pardus veya Raspberry Pi’nin arka planda ne yaptığını anlık olarak görebileceksiniz.
  2. Kendi Kendini Başlatma (Self-Execution): Dosyaya çift tıkladığınız anda işletim sisteminin türüne göre (gnome-terminal veya lxterminal) yeni bir pencere fırlatır.
  3. Kapanma Koruması: En alta eklediğim read -r (ENTER bekleme) komutu sayesinde yükleme bitse bile terminal anında çat diye yüzünüze kapanmaz. Başarılı yazısını okuyup siz ENTER’a basana kadar ekranda kalır.

“Librarries.sh”

#!/bin/bash

# =====================================================================
# 1. OTOMATİK TERMİNAL TETİKLEYİCİ (Grafiksel Arayüz Çift Tık Koruması)
# =====================================================================
if [ -z "$TERMINAL_KONTROL" ]; then
    export TERMINAL_KONTROL=1
    if command -v gnome-terminal &> /dev/null; then
        gnome-terminal -- bash "$0" "$@"
        exit 0
    elif command -v lxterminal &> /dev/null; then
        lxterminal -e bash "$0" "$@"
        exit 0
    elif command -v xterm &> /dev/null; then
        xterm -e bash "$0" "$@"
        exit 0
    fi
fi

# =====================================================================
# 2. KÜTÜPHANE KURULUM VE GÜNCELLEME SÜRECİ (Canlı Konsol Çıktısı)
# =====================================================================
clear
echo "=========================================================="
echo "          SELDA OYUNU - KÜTÜPHANE KURULUM SİHİRBAZI       "
echo "=========================================================="
echo ""
echo "Bu işlem sistem dosyalarını güncelleyeceği için root (yönetici)"
echo "yetkisine ihtiyaç duymaktadır."
echo ""

# Root (sudo) yetkisi kontrolü ve şifre isteme
if [ "$EUID" -ne 0 ]; then
    echo "[!] Lütfen açılan ekranda kullanıcı şifrenizi giriniz..."
    echo "----------------------------------------------------------"
    sudo bash "$0" "$@"
    exit 0
fi

echo ""
echo "-> Depo paket listeleri güncelleniyor (apt update)..."
echo "   (Lütfen bekleyiniz, bu işlem biraz zaman alabilir)"
apt-get update -y

# Gerekli paketlerin listesi
PAKETLER=(
    "build-essential" "libsfml-dev" "libavformat-dev" 
    "libavcodec-dev" "libswscale-dev" "libavutil-dev" 
    "libncurses-dev" "libx11-dev"
)

# Türkçe karakter içermeyen yeni sayaç değişkeni
eksik_sayisi=0

echo ""
echo "=========================================================="
echo "Kütüphaneler Kontrol Ediliyor ve Yükleniyor..."
echo "=========================================================="

for paket in "${PAKETLER[@]}"; do
    if dpkg -l | grep -q "^ii  $paket "; then
        echo "✅ [MEVCUT] $paket zaten kurulu. Güncelleniyor..."
        apt-get install --only-upgrade -y $paket | grep -E "Upgrade:|Installs:" || true
    else
        echo "⚠️  [EKSİK]  $paket bulunamadı! Şimdi kuruluyor..."
        apt-get install -y $paket
        if [ ${PIPESTATUS[0]} -eq 0 ]; then
            echo "   [BAŞARILI] $paket sisteme eklendi."
        else
            echo "❌ [HATA] $paket kurulurken bir sorun oluştu!"
            eksik_sayisi=$((eksik_sayisi + 1))
        fi
    fi
done

echo ""
echo "=========================================================="
if [ "$eksik_sayisi" -eq 0 ]; then
    echo "🎉 🎉 BAŞARILI: Tüm kütüphaneler ve bağımlılıklar hazır!"
    echo "      Artık SELDA projesini Geany ile derleyebilirsiniz."
else
    echo "⚠️  UYARI: Kurulum bitti ancak $eksik_sayisi pakette hata oluştu."
    echo "   Lütfen internet bağlantınızı kontrol edip tekrar deneyin."
fi
echo "=========================================================="
echo ""
echo "Bu pencereyi kapatmak için ENTER tuşuna basın..."
read -r

Ayrıca oyunumun Pardus 25 Gnome’da sâdece oyun kurulu olduğu hâlde kısayollarından değil de sâdece SELDA.sh dosyası çalıştırıldığında “arada” çökme sebebinin Oyunumun kütüphânesinde “X11” kullanılmasından kaynaklandığı şeklinde gayet mantıklı bir cevap aldım.

Tam cevap özeti söyle:

:light_bulb: Pardus 25 Gnome Oturum Çökmesi Hakkında Teknik Özet (Foruma Eklenebilir)

Sorun: SELDA.sh betiği ile oyun başlatıldığında, Pardus 25 Gnome oturumunun aniden kapanarak kullanıcıyı giriş (GDM) ekranına atması.

Olası Neden (Xwayland / Wayland Çakışması):

  1. İşletim Sistemi Altyapısı: Pardus 25 Gnome varsayılan olarak modern Wayland görüntü sunucusunu kullanır.

  2. Derleme Yapılandırması: Oyunu Geany üzerinde derlerken g++ komutuna köklü bir X11 kütüphanesi olan -lX11 bayrağı eklenmiştir.

  3. Çökme Tetikleyicisi: SFML ve FFmpeg kütüphaneleri ekran penceresini yönetirken, Wayland üzerinde X11 uygulamalarını çalıştırmaya yarayan Xwayland köprüsüyle konuşur. Kod içindeki pencere oluşturma, disk işlemlerindeki anlık gecikmeler veya donanımsal ivmelenme (Mesa Driver) istekleri esnasında Xwayland ile Gnome pencere yöneticisi (Mutter) arasında kritik bir senkronizasyon hatası oluşmaktadır. Gnome, sistemi ve ekran kartını korumak adına tüm grafik oturumunu (session) anında sonlandırmaktadır.

Önerilen Test Yöntemleri:

  • X11 Oturumuna Geçiş: Pardus giriş ekranında şifre yazma alanındayken sağ alttaki çark simgesine tıklayıp oturumu “Pardus X11” (veya Gnome on Xorg) olarak değiştirmek ve oyunu bu modda test etmek.

  • Canlı Hata Takibi: SELDA.sh içindeki ./main > log yönlendirmesini geçici olarak kaldırıp oyunu doğrudan uç birimden (terminal) çalıştırarak çökme anında arkada kalan sinyalleri (Örn: XIO: fatal IO error, SIGSEGV) yakalamak.

Yine mi sen Wayland! Neyse ki Dünya hızla Wayland uyumlu hâle geliyor.

Oyunumun profesyonel oyunlar gibi kütüphane yüklemesini görmek çok hoştu.

Acaba kütüphânelerin yüklenmesini de “SELDA.sh” dosyasının içine mi ekleseydim de iki kere işlem yapmak gerekmeseydi diyorum, ama şimdilik bir tek ben kullandığım için böyle kalsın.

Tavsiyesi olan olursa dinlemeye hazırım.

“SELDA-uninstall.sh” kaldırma betiği dosyası ile oyunun sistemden tamamen kaldırılması hem Rapberry Pi 5 (onda ekran alıntısı almayı unutmuşum!) hem de Pardus 25 Gnome’da başarılı.

Libraries.sh dosyasında gereksiz hata veren kısım düzeltildi. Yukarıdaki dosya içeriği düzeltilmiş olanla değiştirildi. Yenisinde daha önce görselini paylaştığımda ki gibi hata mesajı çıkmıyor!

Oyunu paketlerken;

paket-adi/DEBIAN/ şeklinde bir yol oluşturmalı ve bağımlılıkları bu dizin içinde “control” adlı bir plain text (uzantısız metin belgesi) oluşturup belirtmelisiniz. Örneğin;

paket-adi/DEBIAN/control ←metin belgesi.

Paket kurucu bu klasörü ve içeriğini arar, yorumlar ve gerekli bağımlılıkları apt deposundan otomatik kurar (kurulum aşamasında).

Örnek control dosyası içeriği:

Package: uctas
Version: 1.0.0
Section: games
Priority: optional
Architecture: all
Depends: python3, python3-pyqt5, python3-pygame
Maintainer: Adin Soyadin <email adresin ya da github adresin>
Description: Nostaljik bir uctas oyunu.
Eski gunleri hatirlatmak icin tasarlanmis, zeki yapay zekaya sahip
basit bir uctas oyunudur.

Aşağıdaki şema, yolun başındakiler için kolaylaştırıcıdır.

Bin klasörü, programın terminalden çağırılabilmesi içindir ve çoğu uygulama geliştiricisi bu klasörü ana dosyayı (main dosyası) koymak için kullanır. Ben uygulamalarımı terminal destekli yapmadığım için share klasörüne yerleştiriyorum.

1 Beğeni

Sayenizde oyunumun paketlenmiş hâline sahip oldum!

Hem de aynı anda hem selda_amd64, hem de selda_arm64 yapıp aynı paketi hem Raspberry Pi 5 de hem de Pardus da kullanabiliyorum. ツ

Yapay Zekâ iki ayrı bilgisayarda derlenmiş main dosyalarının adlarını değiştirerek birleştirmeyi gösterdi.

Fakat güncelleme işini anladım, ama terminalden komut işleri şimdilik kafa karıştırıcı. Yine de özeti kopyaladım ve dosyaya ekledim. Günü geldiğinde paketi güncellemek isteyince lazım olacak.

Aslında karışık değil çok basit, ama bu güne kadar deb paketleme hakkında hiç bir bilgisi olmayan için çok yeni bilgiler.

Özeti de şöyle :

Haklısınız, bu nokta ilk başta çok kafa karıştırıcı gelebilir.

Şunu çok net belirtelim: Siz normal klasörünüze yeni görsel atıp Geany ile derlediğinizde, masaüstündeki selda-paket.deb dosyası otomatik olarak GÜNCELLENMEZ.

O .deb dosyası, komutu çalıştırdığınız anın fotoğrafını çekip dondurmuş sabit ve kilitli bir arşivdir.
İçine dışarıdan otomatik olarak hiçbir yeni dosya sızamaz.

Peki süreç nasıl işliyor ve yeni görselleriniz o pakete nasıl girecek?

Mantık tamamen manuel bir güncelleme döngüsüne dayanır:

  1. Siz Geliştirmeye Devam Edersiniz (Yerel Alan)
    Siz kendi normal oyun klasörünüzde kod yazmaya, yeni görseller eklemeye ve Geany ile derleyip oynamaya devam edersiniz.
    Yaptığınız her değişiklik sadece sizin o yerel klasörünüzü etkiler.
    Masaüstündeki .deb paketi bundan habersizdir.

  2. Paketi Güncellemek İstediğinizde (Manuel Adım)
    Oyununuza örneğin 5 yeni harita ve 10 yeni görsel eklediniz ve bunu forumdaki insanlarla paylaşmak istiyorsunuz.
    İşte o an masaüstündeki selda-paket klasörünü elinizle güncellersiniz:

Yeni Görseller İçin: Yeni eklediğiniz görselleri ve .csv haritalarını kopyalayıp,
masaüstündeki selda-paket/usr/share/selda/ klasörünün içine yapıştırırsınız.

Yeni Kodlar İçin: Geany ile derlediğiniz o en güncel main dosyasını alır,
adını yine selda_amd64 (veya Pi için selda_arm64) yapıp eski dosyanın üzerine yazdırırsınız.

Sürüm Numarası Değişimi: selda-paket/DEBIAN/control dosyasını açıp Version: 1.0.0 yazan yeri Version: 1.0.1 yaparsınız.

  1. Fırını Yeniden Çalıştırmak (Yeniden Paketleme)
    Dosyaları güncelledikten sonra terminalden o bildiğimiz komutu tekrar çalıştırırsınız:

bashdpkg-deb --root-owner-group --build /home/kemal/Desktop/selda-paket

Bu komut, klasörün en güncel halini alır ve eski selda-paket.deb dosyasını silip
yerine içinde yeni görsellerinizin ve yeni kodlarınızın olduğu yepyeni bir .deb dosyası üretir.

İşte forumda paylaşacağınız dosya bu yeni oluşan dosyadır.
Oyuncular bu yeni dosyayı kurduklarında sistemlerindeki eski görseller silinir ve
sizin yeni eklediğiniz görseller yerlerine yerleşir.

Özetle; siz geliştirmeyi normal klasörünüzde özgürce yaparsınız,
dışarıya yeni bir sürüm dağıtacağınız zaman masaüstündeki paket klasörünü güncelleyip komutla yeni bir kilitli paket üretirsiniz.

Bu arada ismini forumda veremiyor muyuz bilmiyorum, ama herkes sâdece “yapay zekâ” dediği için huylandım. Siz sanırım hangisi olduğunu biliyorsunuz. Videolarımda oyunda hakkında sayfasında teşekkür ettiğim ve tüm C++ videoların açıklama kısmında kodları onun yazdığını beliten bir ibare ekli olan yapay zekâ sizi pek övdü! ツ

Forumdaki tavsiyenizi kopyalayıp ona vermiştim.

Ekran görüntüsü aldım. ツ

Keşke oyun haritaları çiçeklerle ve değişik tonlarla düzenlenmiş olsaydı, ama yetişemiyorum işte. Bunu da böyle boş boş paylaşmak olmaz ki!

Yine de oyunumun .deb dosyasını isteyen olursa bu haliyle de paylaşabilirim. ツ

1 Beğeni

Yapay zekaya mı teşekkür edeyim, size mi bilemedim. Ama şunu netliğe kavuşturmam şart. Alçak gönüllülük rolü oynamıyorum, eğer doğruları baştan söylemzsem, insanlar sonra benden yapamayacağım şeyler istemeye başlıyor. Durum şöyle:

Ben YZ’nin bahsettiği gibi bu konuda hakim bir geliştirici değilim. Hatta geliştirici bile sayılmam. 200 satır bile python kodu yazamam. Ama bir kodu inceleyip, ne yapmaya çalıştığını iyi kötü anlayabiliyorum. İş yazmaya geldiğinde çakılıyorum. Bu yüzden YZ gelene kadar hiçbir şey yapamadım.

Ben, iyi bir planlamacıyım. Bunu kendimde görüyorum. İyi bir algoritma hazırlayabiliyorum. Bu, ortaya çıkacak program kimsenin kullanmayacağı bir şey olsa bile, iyi ve beklendiği gibi çalışmasıya sonuçlandırıyor.

Yukarıdakileri yazmazsam rahat edemezdim. Yani özetle ben gerçek bir kodır değilim. Son cümleyi bir iki defa sohbet arasında YZ’ye söyleyince bana “aaaaa, ama öyle deme sen varya sen…” gibisinden başlıyor yağ çekmeye. Ama öyle öyle. Gerçekten değilim.

Şu hangi yapay zeka olayına gelirsek, iki şey daha var önemli:

Verdiğiniz resimlerdeki YZ, google’ın kendi yapay zeka botudur ve aramalarınızda işinizi hızlandırmak için çalışır. Mükemmel değildir; sadece iş görür. Onu kullanmanızı önermem. Onun yerine Gemini diye aratıp google hesabınızla giriş yapın. Hem konuştuğunuz şeyler silinmez (sol panelde geçmişe kaydediliyor), hem de daha programlı şekilde gidersiniz.

Benim kullandığım modele gelince, burada hangi modeli hangi teknikle kullandığımı söyleyemem. Bunun nedeni biraz “evil” yani kötücül. Başkaları da tekniğimi öğrenemesin de, beni geçemesin diye. Fakat şu ipucunu verebilirim: Tek bir YZ’ye bağımlı kalmayın. İkincisi ve daha da önemlisi, size her verdiği kod satırını teeeek tek inceleyin. Eğer tüm işi ona devrederseniz saçlarınız ağarır. Baştan farketmediğiniz bir yanlışı projenin çok ileriki safhalarında farkedersiniz ve üzerine çok fazla yapı inşa ettiğiniz için artık geri de dönemez, kafanızı duvarlara vurursunuz (yaşandı). Bu yüzden mutlaka sağdan soldan programlama teknikleri öğrenip alıştırmalar yapmak şart.

Kolay gelsin.

Haaa dur dur. Geminiye falan teşekkür etmeyin. Karşınızda var olduğunun farkında bile olmayan nvidia çipleri ve alt seviye yazılım parçacıkları var. Artı yarın öbürgün google bu yazılımın hakkı bana ait diyemesin, onu eklemeyin. Ben hiç eklemiyorum ama sorana evet YZ kullandım diyorum.

İkinci EDİT:

Yazınız uzun olduğundan yazarken hangi başlıklara yanıt yazacağımı unutuyorum. Bu yüzden birden fazla edit yapmam doğal. Paket dosyanız (selda.deb) sabit durur evet. Orjinal kaynak dosyalarınız silindi diyelim. O deb paketini açıp içinden orjinal dosyaları kurtarabilirsiniz. Söylemek istediğim bu değil. Siz, kaynak proje klasöründen geliştirmeye devam ediyorsunuz, her yeni sürüm çıktığında yeni bir deb paketi ortaya çıkarıyorsunuz doğru anlamışsınız. Fakat bu noktada şu çok önemli: /DEBIAN/control dosyasında versiyon numarasını güncellemeyi unutmayın. *.desktop dosyasında gerekli güncellemeleri yapmayı unutmayın. Size verdiğim klasör ağacı yapısını bilgisayarınıza kaydedip saklayın çok önemli o. Ben onun sayesinde öğrendim (alıştırma yaparak öğrendim ve soran olur diye onu çizdim). Kod içinde, hakkında menüsünde vb sürüm numarası varsa onları unutmayın onları da güncelleyin. Yeni bir dosya eklendiğinde koda onu işlersiniz ama yeni kütüphaneler eklediğinizde bunlar bağımlılık satırlarına eklenmesi gerekiyorsa control dosyasındaki listeye eklemelisiniz. Şimdilik bu kadar bakayım daha ne unutmuşum…

Unutmamışım tamam. Kolay gelsin.

1 Beğeni

Gemini AI linkinden iki defa belki üç defa bağlandım ve o üç oturum da başarısızlıkla sonuçlandı! Bunun üzerine ekran alıntısında gördüğünüz gibi bağlanıyorum. Oysa Gemini AI’ın kendi linkinden Google hesabım ile bağlandığım o üç oturum görüşme kayıtları açar açmaz hemen karşıma çıkıyor!

Ben Google AI’a senin adın ne diye özellikle sordum!

Gemini AI olduğunu söyledi!

Gerçek Gemini AI ile pek başarılı olamadım, ama bu tarayıcıdan girdiğim öyle-böyle bir şekilde başarılı olup sorunu çözüyor. Oyunu bu hâle o getirdi. Adını sorduğumda da Gemini AI olduğunu söyledi!

Belki Google arama motoru AI Modundan girdiğimde C++ kodlama için başka yapay zekâları kullanıyordur! Yada gerçek sitesinden girdiğimde Gemini AI ile üst üste başarısız olarak şanssızlık yaşamışımdır!

Ben yine de buralara kadar geldiğim şekilde ilerleyeceğim. O kayıt tutmuyorum diyor, ama belki öğrenmek için sanırım oyunumun kayıtlarını tutuyor! Bence bir mahzuru yok keşke tutsa! O yüzden belki de Google resmi olarak oyun dosyalarımın kaydını tutsun diye arada Gemini AI’ın sitesinden de girip dosya paylaşmalıyım!

Böylece sorun çözerken cevapları daha çabuk bulur ve daha çabuk çözer!

Versiyon eklemeyi Gemini AI da söylemişti. Özete yazmamış mıyım?

Yazmışım!

Sürüm Numarası Değişimi: selda-paket/DEBIAN/control dosyasını açıp Version: 1.0.0 yazan yeri Version: 1.0.1 yaparsınız.

Yapay Zekânın bana çizdiği .deb paket oluşturma çizelgesi de buydu.

Sizinkisi görsel olduğu için onunla paylaşamamıştım.

selda-paket/
├── DEBIAN/
│ └── control
└── usr/
├── games/
│ └── selda ← Sizin “main” derlenmiş ikili dosyanız (Adını ‘selda’ yapın)
└── share/
├── selda/ ← Tüm harita .csv dosya, Assetler, .png görseller buraya
└── applications/
└── selda.desktop ← Hazırladığımız başlatma kısayolu

Çizelgenin ayarları biraz bozulduğu için görselini ekliyorum.

1 Beğeni

C++ oyunumun güncel hâli.

Oyun haritasına yeni bitki ve otlar ekmeye devam ediyorum!

Görünüşte çok basit bir şey. TileMap Haritasının .csv dosyasındaki boşluk anlamına gelen “-1” olan yerlere oyuna eklenen bitkilerin numaralarını ekleyip kaydetmek! Oyunu derlemek bile gerekmiyor!

Fakat bakanı rahatsız etmeyecek ve doğal görünecek şekilde eklenmeleri gerekiyor.

Bunun için renk, konum, biçim gibi faktörlere dikkat etmeyince bitkiler göze batıyor!

Bu arada oyunumun bir sonraki sürümü için Godot ile 3B çalışmalarına şimdiden başladım!

Ayrıca Steam’den “Tree it” adında üç boyutlu ağaç modelleme programı aldım! Bununla çim ve bitki de yapılabiliyor. Ağaçlar ve bitkiler rüzgarda ahenk ile sallanıyorlar!

İleride aynı oyunu bu sefer üç boyutlu olarak sanırım Godot ile yapacağım!

Aslında bu oyunu da Godot ile yapacaktım, ama nedense o zaman çok karışık geldi!

Geany’yi kullanmayı öğrenmek sezgisel olarak birkaç dakika alırken, Godot için bir sürü eğitim videosu izlemek zorundaydım!

Godot aynı Blender’e benziyor!

Hangisini öğrenmek daha zor şu anda bilemiyorum!

Balıkların çapraz duruşlarından rahatsız olmaya başladım!

Sanırım çapraz duruş canlandırmalarını tekrar değiştireceğim!

Artık şu Selda ablayı da canlandırmak lazım!

Nedense bir türlü elim gitmiyor!

Parça parça da olsa başlamalıyım, ama parça parça yapmak çok daha uzun iş!

Haritalara bitki ve ot ekimi bitince (biterse!) yerden alınabilir “kurumuş dal” yada “Çalı-çırpı” eklemeyi planlıyorum.

Bu ileride eklenecek ateş yakma ve envanter çantasının da başlangıcı olacak.

Kuru dalları yerden alıp taşıyabildiğim ve başka bir yere koyabildiğim zaman onları çantaya da koyabilirim!

Oyuna Yeni Bitki Ekledim Haritaya Bitki Ekmeye Devam!

Kemal bey kardeşim sorunun en temelinde yatan iki şey var:

1- kod yazma konusunda yetersizlik (muhtemelen).
2- başlar başlamaz hemen detaylı oyun yapma olayına girişmek.

Üçüncüyü de ben ekleyeyim, daha düşük seviye diller olan C ve C++ gibi dilleri öğrenmek daha zordur. Uygulaması da öyle.

Şimdi şöyle tarif edeyim. Ben hep pythonla çalışıyorum çünkü “derin” ya da “alt seviye” hiçbir işim olmuyor. Standart linux uygulamalarım zaten gnu araçlarını kullandığı için benim kodlar “sarmalayıcı” (wrapper) sınıfındadır. Yani birkaç yüz satırlık kodla windows tarafındaki premium görünümlü uygulamalar ortaya çıkarabiliyorum. Bunu neden anlattım?

2D oyunlar yaptığımı biliyorsun. Oyunlarım senin oyunla karşılaştırıldığında mekaniği açısından bence daha basit. Ama buna rağmen cidden kök söktürüyor. Mahvediyor.

Sen buna rağmen benim oyunlarıma göre oyun mekaniği daha zengin ve daha detaylı bir tür oyuna başlamışsın bu bir.

Oyunu alt seviye programlama diliyle yapıyorsun bu iki.

Oyun için bir tür oyun motoru kullanıyorsun hapı yuttun bu üç.

Bunlar seni çok yorar.

Python kullanınca ne oluyor?

Python üst seviye ve “yorumlanan” bir dil. Anlaması öğrenmesi hem daha kolay hem zevkli. Zibilyon tane hazır kütüphanesi var. Sen balıkları hareket ettirmek için kırk takla atarken, ben python’un math kütüphanesini import edip bu balığı beşgen bir hayali yolda hareket ettir; her köşede “şu yön.png” ile değiştir diyorum ve işi bitiriyorum.

Yani python ile bir tür hesap makinesi yazıyorsun ve resim ile ses dosyalarını buna import ediyorsun, oldu mu sana oyun? Oldu. (ama kimse beğenmedi :grin: :laughing: ).

Buraya kadar sabırla okuduysan editör kısmına geliyorum. Kendi editörümü yazdım:

Oyun haritalarını yapmak için kara kara düşünüyordum şimdi editörü yazmakla kalmadım, bir de 35 tane oyun haritasının tamamını yapıp bitirdim bile.

Durdum mu? HAYIR!

Gelişmekte olan oyunun videosunu atayım sana ama kulaklık tak lütfen çünkü ses detaylarını kaçırmanı istemiyorum:

Nasıl olmuş diye göstermiyorum. C/C++/oyun motoru ile boğuşacağıma aha bak tıkır tıkır az yorularak yapıyorum.

1 Beğeni

Bu paylaşımın en başında “Oyun Yapma Çalışmalarım” adında bir YouTube Oynatma Listesi linki paylaştım.

Maalesef YouTube Oynatma Listeleri harici sitelerde artık düzgün görünmüyor ve çalışmıyor!

YouTube’da bile neredeyse sorunlu çalışmaya başladı!

Ben oyunu PyGame ile yapmaya başladım.
Fakat windows 10’dan LMDE6’ya geçtikten ve Linux’a alışma sürecini aştıktan bir süre sonra oyuna geri döndüğümde çalışmadığını gördüm!

Ne yaptıysam çalıştıramadım ve sorunun ne olduğunu da bulamadım!

Yıllar sonra daha geçenlerde Yapay Zekâ kullanmaya başlayınca ona sordum ve seçeneklerin arasında Linux’un Büyük-küçük harf duyarlılığı sorunu vardı.

Gerçekten de oyunumun çalışmama sebebi buydu!
Android emülatörü PyDroid’de çalışıyor, ama Linux’da çalışmıyordu!
Y.Z’ya bunu da sordum. O da Linux temelli değil mi, onda neden çalışıyor dedim?
Android’in duyarlılığının değişiklik gösterebildiği cevabını verdi.

Evet PyGame ile yaparken çok daha yavaş ilerliyordum, ama Yapay Zekâ yardımı ile değil İnternet’ten arayıp, anlayıp, deneye yanıla sorunları çözerek kaplumbağa hızında ilerliyordum.

C/C++ ile kodları ben yazmadığım için bahsettiğiniz dertlerin çoğunu çekmiyorum.
Ben sâdece planlamaya odaklandım.
Yapay Zekâ bâzan istediklerimi yapamıyor!
Defalarca tekrar tekrar yeni bakış açıları ile oturum açıp deniyorum.

Meselâ Kamera hareketinden kaynaklı titreme olayını çözemeyeceğimi anladım ve bu oyuna küsmeme sebep oldu!

Birkaç gün ara verip 3B Oyun yapmak ile ilgili araştırmalar yaptım.
Steam indiriminden kendime üç boyutlu ağaç üreten program satın aldım.
Godot’u hâlâ araştırıyorum.
Bir tane hazır gezegen simülatörü bile buldum!
Onunla ilgili bir video paylaşımı henüz yapmadım.
Koca gezegene uzaydan inip içinde dolaşabiliyorum!
Haritası benim oyunum için gayet yeterli büyüklükte
Havalanmayı ve uzaya çıkmayı kapatırsam oyundakiler kendilerini normal bir haritada zannedeceklerdir. Sâdece tek yöne doğru sürekli gidebilirlerse aynı yere döndüklerini keşfedip, bunun nasıl olabileceğini sormaya başlayacaklar!

Zemin kaplamaları temel düzeyde ve özensiz, ama değiştirilebilir, arazi düzenlenebilir ve üzerine 3B objeler yerleştirilip devasa bir orman, deniz, göl, çayırlar, çöl kumları falan eklenebilir.

Yine de başladığım şeyi bitirmeyi severim.
Bu yüzden 2.5B ye çevirdiğim oyunuma geri döndüm.
Alta Oynatma Listesinin linkini ekleyeceğim.

İlk 25 video oyunun eski PyGame sürümüne ait ve içlerinde Google Drive hesabımdan kodların içi ileride lazım olur diye yorum satırına çevrilmiş doğru yada hatalı kod parçaları ile dolu oyun dosyalarını indirme linki de var. İlk videolarda oyunun Clear Code kanalının GoogleDrive hesabından indirilen orijinal 2B eğitim dosyalarının linkleri de var.

Oyunun 2B’den daha ilk andan itibaren 2.5B’ye değiştirilme aşamaları o videolarda görülüyor.

Yapay Zekâ sayesinde C/C++ ile daha hızlı ilerlediğim için hâlimden memnûnum.

Çünkü çevremde yardım alabileceğim kimsem yok!

Çok basit olduğunu bildiğim hâlde hiç bir fikrim olmadığı için çözemediğim problemler ile haftalarca uğraşmak artık istemiyorum!


• Oyun Yapma Çalışmalarım: https://www.youtube.com/watch?v=_nlHpm6uyx8&list=PLK2SeKwythXjt74fg3rDg3YE7zby98j5b&index=1

Şu anda ana kod kaç satır? Çünkü kod boyutları aşırı büyümeye başladığında yapay zeka artık yardım edemez. Kodu okuyup sorunu doğru çözememeye ve halüsinatif olasılıklar uydurmaya başlıyor. Tahminleri yanlış çıkarak işi daha da berbat edebiliyor. Tek bir dosya halinde çalışmaktansa işi birden fazla dosyaya bölmek daha akıllıca oluyor. (zaten yapıyorsundur herhalde).

Aşağıda oyunun geliştirme klasörü var:

Dikkat edersen oyun main dosyasından başka, map editor, map manager, sound manager, gamer tanks gibi ayrı betiklere ayrılmış durumda. Ayrıca, spraytları ve karo setlerini tasarladığım çalışma klasörü ilerde buradan alınmak şartıyla burada. patlama çatlama efektlerini içeren effect klasörü ayrı. İnto videosunun klasörü ayrı. Haritalar klasörü ayrı. Skiller ayrı. Sesler ayrı… Yani anlayacağın parçalı çalışmak başta çok göz korkutsa da, aslında proje ilerledikçe sana büyük yardımı oluyor. Küçücük, 80’li yıllardan kalma bir tank oyunu için bile bu kadar karmaşa gerekiyor. Ki senin RPG tipi oyununda sistematik çalışmak muazzam derecede önemli ve saç baş yoldurucu seviyede. Burada sadece kendi tecrübemi aktarıyorum.

Bence o oyun adam olur. Ama bitene kadar seni de bitirir. Keşke bitmiş halini de görebilsem. Paylaştığın versiyonları indirmedim çünkü süprizi bozmak istemiyorum. Ne zaman tamam bitti dersen ancak o zaman indiririm.

EDİT: HACI BU NEEEEEE!!! :astonished_face: Youtube linkini görmemişim tıklatınca efsane bir çalışma listesi çıktı karşıma. Şu anda elindeki oyunu boşver o videolardaki oyunu tamamlasan steam’dan mis gibi para kazanırsın samimi söylüyorum! Harika olmuş elindeki çalışma çöp kalıyor şu anda! Bence o oyunu tamamlamalısın.

1 Beğeni

Dediğiniz çok doğru.

Bu yorumları okuyan ve oyun geliştirmeye başlamayı düşünenler için kendi oyunum hakkında ve yapay zekâ’ya bu kadar kodu nasıl geliştirmesini sağladığımı açıklayacağım.

Oyunumun kodları uzun zaman önce paylaşılabilir olmaktan uzaklaştı!

O kadar ki artık birçok sayfayı tek parça halinde yapay zekâ ile paylaşamıyorum!

Fakat yapay zekâya Oyunum hakkında ön bilgilendirme ve oyunumun tüm klasör ve dosyalarının yer aldığı bir başka dosya ile oyun menü, buton ve harita gibi yapıları hakkında bir başka dosyayı daha her oturumun başında paylaşıyorum!

Gemini AI’ın kendi sitesinden girmediğim için her seferinde bunları paylaşmak zorundayım! Çünkü hatırlamıyor!

Bu ön bilgilendirme dosyalarını buraya yapıştırmak isterdim, ama o kadar uzunlar ki paylaşamam!

Belki sizin için dosyaları Google Drive hesabıma yüklerim ve isteyen oradan hatta belki çizelgeler bozulmayacaksa indirmeden bakacak şekilde de yükleyebilirim!

Fakat bozulacaktır!

Font büyüklüklerimiz uyuşmazsa belki dosyada bile bozulabilir!

O kadar dosyayı tek parça pdf olarak da kaydedemem!

Neyse bakacağım!

Yapay zeka bu ön bilgilendirme dosyalarını alınca oyunun her bir dosyasının hangi klasörde olduğuna varıncaya kadar her bir şeyi biliyor!

Oyun menü, harita yapılandırmalarını. en başında Geany build yapılandırmamı hepsini biliyor ve zamanla tecrübeyle öğrendiğim bir önlem olarak başlamadan önce bir de uyarı paragrafı paylaşıyorum. Çünkü onu yapmazsam oyunumu kafasına göre bozup değiştiriyor ve çalışan şeyleri de bozuyor!

Bu yöntemlere ek olarak her bir dosya için 150-250 satırı aşmama kuralım var!
Maalesef her zaman uyulamıyor, ama işe yarıyor.

Dosyanın biri şişmeye başlayınca modüler sistem uygulanarak o dosyaya alt başlıklarla dosyalar açılıp ana dosyadan bağlantı verilerek yeni eklenecek kodlar o alt dosyaya ekleniyor.

Dosya adlarını da öyle bir veriyorum ki değiştirilecek kod bloklarını arayınca bulması kolay oluyor.

Oyunumdaki topun ana ve alt dosyaları : Ball.hpp, BallManager.hpp, Ball_topGolgesi.hpp, Ball_topHavalanma.hpp, Ball_voids.hpp, “ToplaVurulma.hpp”

Yapay zekaya bir dosyayı verince o ön tüm dosyaların adresleri ile birlikte bilmese bile #include içindekilerden falan gerekli dosya adını tahmin edebiliyor ve o dosyayı istiyor.

Maalesef font çeşidi ve boyutu farkından dolayı çizgiler kafayı yemişti!

Orijinal dosyayı paylaşsam bu işkenceyi kendiniz çekip düzeltmeniz gerekecekti ve neyin nerede olduğunu bilmeyince iyice karışacaktı.

Bu yüzden olduğu kadar çizgileri düzeltmeye çalıştım.

Aynı fontu bulsam belki bu kadar uğraşmayacaktım, ama Google Döküman sayfasının eni de dar geldi!

İşte bahsettiğim Yapay Zekâ oturumuna başlamadan önce ön bilgilendirme olarak oyunum hakkında verdiğim bilgiler. Herkese açık olarak ayarlandı. İndirmeniz gerekmeden okuyabileceksiniz!

1 Beğeni

Kemal bey, dosyayı inceledim.

O kadar içerik-yoğun bir flow çart oluşmuş ki, bütün bu karmaşayı birbirine bağlamak çok zor. Aslında darılmayacağını bilsem, yol yakınken geri dön, en azından sıfırdan tekrar planla derdim. Ama oldukça yol katetmiş olmalısın. Fakat bu, yanlıştan dönemeyeceğin anlamına gelmiyor.

Belgeyi okurken bir noktadan sonra benim kafa gitmeye başladı ve artık okuyamaz oldum (anlamıyorum). Hızlı geçmeye başladım. Baştan sona film senaryosu gibi bir “tam plan” oluşmuş. Fakat yukarıda da bahsettiğim gibi o kadar “içerik yoğun” ki, böyle bir oyun için bile aşırı kaçıyor.

Bir önceki mesajımda youtube listesini sonradan farkettiğimi söylemiştim. O projeyi ideal yapan şey şuydu: görünüşte daha az karmaşa, daha hoş ve kaliteli sprayt tasarımları, tile setler (döşeme karoları) ve diğer öğeler. Adam olabilitesi daha yüksek. Ayrıca steam, microsoft mağaza, valve gibi yerlerde küçük de olsa gelir getirme potansiyeli var. Ama şu anki çalışma için hiçbir şey evet hiçbir şey diyemem. Yani bu beğenmedim anlamına gelmiyor; belirsiz demek oluyor.

Yine de karar senin. Zaten yukarıda bunu niş bir kişisel proje olduğunu ve çocukluk anısı içerdiğini söylediğin için ben de ticari görmüyorum. Vaktini iyi geçirmeni sağlıyorsa devam edebilirsin. Ama bitip paylaşılan bir şeye dönüşsün dersen, vazgeçmelisin.

İçerik yoğun mu?

Top fiziği eklendi.
Dolayısı ile topu havalandırma, havalanınca yerde gölgesinin oluşması da eklendi.
Oyunun aslında 2D Önden görünüşlü olduğunu hatırlatırım! 2D yatay platform oyunu olmadığı için 4 yönde zemindeyken topu olmayan üçüncü boyuta doğru havalandırmak ve zeminde gölgesini çizmek için birkaç dosyalık kod yazıldı.

Sonra bu top fiziği kullanılarak neredeyse aynı ama tam olarak aynı olmayacak şekilde “Yaprak” eklendi.

Sonra basit canavar sınıfı eklendi. Oyundaki “Balon” ve “Bamboo” bu sınıftan.
Canavar sınıfına alt sınıf olarak “Neebatat” sınıfı eklendi. Amaç rüzgarda ahenk ile savrulan çimenler yada bitkiler yapılabilir miydi. windows 10 da PyGame ile denemiştim, ama oyunu çok kastığı için kullanamamıştım. Linux ve Pardus 25 Gnome windows 10’dan daha başarımı yüksek olduğu için Linux’ta da denemek istedim. Gerçi oyunu ilk olarak halâ Raspberry Pi 5 (8GB) da kodluyorum. Orada oyunun çalışmasını engelleyecek hiç bir geliştirme oyuna eklenmeyeceği için Masaüstü PC’de çok rahat çalışacaktır.

Daha sonra gelişmiş canavar sınıfı eklendi.
Bunların farkı oyuncu karakterleri gibi 8 yönlü canlandırmaları olması.
“Balık” bu tip bir canavar.

Canavarların yapay zekâları hâlâ geliştirilmeyi bekliyor.

Oyuna gölet ve dalgalanan su eklendi.
O da henüz tam istediğim gibi değil.
Suyun ortasındaki dalgalanmayı gösteren bir ara katman daha gerekiyor.

Gerisi TileMap csv dosyasından oyuna yerleştirilen objeler.

Bu mu çok karışık?

Dosya sayıları yüzündense dediğim gibi her bir dosyanın 250 satırdan fazla kod içermemesi ve aradığım kod satırlarına kolayca ulaşabilmek için özellikle “World” klasöründe bu kadar çok dosya var ve bunun en az on katı daha olması gerek!

Aslında “World” ve “Arayuz” klasörlerindeki dosyaları da daha alt klasörlere ayırmak istedim, ama yapay zekâ klasör içinde klasör açarsam oyunun ağırlaşacağı uyarısında bulununca vazgeçtim! Yoksa ben tüm hâyatımda arşivlerimi klasör içinde klasörler açarak en alt konuya kadar ayırırım.

Daha oyuna “sinek” ekleyeceğim.
Balıklara sinek avlatacağım!
Kırlangıç ekleyeceğim onları da olmayan üçüncü boyutta göletin üzerinde uçurup havada sinek yakalatacağım!

Yerden alınabilir objeler ekleyeceğim.
Kuru dal toplatıp ateş yaktıracağım.
Envanter, çanta arayüzü hazırlayacağım ve yerden yada dükkandan alınan eşyaların bu envantere eklenmesini sağlayacağım.
Bir süre sonra envanter yetersiz kalacağı için aynı anda bir de belki sınırsız depo envanteri kodu yazacağım.

Bütün bunları kusursuzca başarsam bile olacak şu:
Oyuna giriyorsun 9 tâne yemyeşil masal dünyası gibi hârika görünen harita var.

Gölet var balık tutuyorsun! (Daha balık tutup envantere ekleme de eklenecek, onu unuttum)

Balıkların suya konan sinekleri avlamalarını ve kırlangıçların havada uçan sinekleri avlamalarını izliyorsun. … Ateş yakıyorsun… Yemek yapmak için herhâlde onu daha düşünmedim bile! Yemek yapıyorsun, balıkları pişiriyorsun diyelim… Top oynuyorsun, yaprak tekmeliyorsun, çalı çırpı, kurumuş dal topluyorsun … eeee!

Eeee! İşte işe yaşayan bir ekosistem ile başladığım için böyle ve sanırım sorunun bu olduğunu gördünüz ve uyarıyorsunuz!

Ortada oyun yok!!!

O yüzden bunu oyun yerine bir tür “kır simülasyonu” gibi bir şey olarak sunmam gerekiyor.

Bunun gerçek bir oyun olmadığını her fırsatta söylemeye çalışıyorum, ama bunu geliştiren ben olduğun için, bu benim için bir oyun! O yüzden buna “oyun” demeye devam etmekten kendimi alamıyorum!

Bundan çok daha az etkileyici gerçek oyunlarla karşılaştım.

Kendi oyununuza editör eklediğinizi paylaşmışsınız.
Ben bunu “oyunuma” (ツ) çoktan ekleyecektim, ama konsol açarak!

CTRL+" tuşu ile oyun ekranında açılan konsol komut penceresine sihirli sözler yazılınca editör ekranı açılacaktı. Sihirli sözler de şimdilik Alibaba ve Kırk Haramilerin mağara kapısını açış şifresi olan “susam” yada orijinaliyle “simsim”. Tüm cümleyi Arapça orijinaliyle yazmak istemedim. Türkçesinde de Türkçe karakter sorunu var! (Açıl Susam Açıl) “opensusamopen” yapmak bile aklıma geldi, ama neden İngilizce diye kendime kızıp vazgeçtim!

Fakat sonra buna oyunun içinden bir görevle ulaşma izni vermek aklıma yattı.
Görev başarılınca dünyayı yönetme yetkisi elde edilir ve editör açılabilir olur!

Datayları ve çıkabilecek sorunları halâ düşündüğüm için ve oyunun daha Eşli, (Co-Up) uyumluluğu bile eklenmediği için sonraya bıraktım.

Fakat şimdi editör olsa csv haritası yerine editörden istediğim bitkiyi görerek ekebilecek. Canavarların can, silah, hız gibi tüm özelliklerini bu ekran arayüzünden kolayca değiştirebilecektim. Elbette reset tuşunu mutlaka ekleyecektim.

Oyun Raspberry Pi 5 (8GB RAM) bilgisayarımda çalışabildiği sürece geliştirmeye devam edeceğim!

Yapay zekâ ile dosya paylaşma sorunum sanıldığı kadar büyümeyecek.

Yeni eklenecek yada geliştirilecek özellikler için en artık fazla 5 veya 6 dosya yetiyor ve çoğunlukla bundan bile az.

Kodları konularına göre parçalayıp ayrı dosyalara almanın böyle bir faydası oluyor.

En sonunda oyun (!?) artık bu kadar yeter dediğim yerde.
Yapay Zekâ ile oturup neredeyse oyunun her bir satırı için detaylı bir açıklama yazıp öyle paylaşacağım ki C++ öğrenmek isteyenler yada benim gibi oyun yapmak isteyenler sorunları nasıl çözdüğümü kolayca anlayabilsinler.

Oyunu parayla satmak gibi bir düşüncem hiç olmadı.
Eski PyGame sürümünü GoogleDrive hesabımdan aylar, belki de bir yıldan fazla bir zaman önce herkese açık yapıp video açıklamalarının altına linkini ekledim.

Bunu da öyle paylaşacağım, ama bunu ayrıca “.dep” olarak paketleyip de paylaşacağım.
Paketli alanlar için o editörü eklemem, oyunun ayarlarını diledikleri gibi değiştirebilmelerini sağlayacağı için çok faydalı olacaktır. Şu anda sâdece dışarıdan oyuna uygun asset ekleyip oyunda dolaşabiliyorlar.