Çözüldü Pygame 4 yöne mermi atışı nasıl yapılır?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

jinwo

Femtopat
Katılım
3 Aralık 2022
Mesajlar
22
Çözümler
2
Daha fazla  
Cinsiyet
Erkek
Pygame ile oyun yapmaya çalışıyorum. Tek düzlemde atışlar gerçekleştirebiliyorum. Ama mouse ile imleci tuttuğum yere doğru ateş etmesini istiyorum. Örnek kod verebilir misiniz? Ve mantığını anlatabilir misiniz?
 
Son düzenleyen: Moderatör:
Çözüm
Hadi geçmiş olsun.


@jinwo

Çok teşekkürler hocam,
Bu kodun mantığını kavramaya çalışacağım.
İlgin ve yardımların için ayrı ayırdığın vakit için ayrı teşekkür ederim.
Bana göre çok bilgilisiniz ne kadar sürede bu kadar geliştiniz merak ettim :)
Forumda ne yazık ki özel mesaj atma var mı yok mu bulamadım. Konuda da şahsi bilgilerimi paylaşmak istemiyorum ne yazık ki.

Kodunuza kendi işlerimi hallettikten sonra bakacağım. Ama şimdilik aklıma geleni söyleyeyim.

Anladığım kadarıyla şimdilik yapmaya çalıştığınız 2 ana şey var:
  1. Koddaki kareler yerine kendi görsellerinizi kullanmak.
  2. Her yöne ateş edebilmek.
2.sini zaten anlattım, kodu elleyebildiğim vakit kod üzerinde de düzenleme yapacağım.

1.si için kendiniz yapmayı deneyebilirsiniz. Aslında yapmanız gereken şey oyuncu ve mermi sınıflarına bir adet daha surface değişkeni eklemek ve bu değişkenlere görselinizi atamak.

Dörtgenler kalacak ama ekrana çizilmeyecek çünkü çarpışmaların tespiti için onlara ihtiyacınız var.
Dörtgenlerin boyutu görselinizle aynı olacak, yine görsellerle aynı şekilde hareket edecekler.
Dörtgenleri çizmek yerine görselleri çizeceksiniz her döngüde, o kadar.

Siz inceleyip düzenleyene kadar denemeye çalışacağım. Teşekkürler beklemedeyim.

Forumda ne yazık ki özel mesaj atma var mı yok mu bulamadım. Konuda da şahsi bilgilerimi paylaşmak istemiyorum ne yazık ki.

Kodunuza kendi işlerimi hallettikten sonra bakacağım. Ama şimdilik aklıma geleni söyleyeyim.

Anladığım kadarıyla şimdilik yapmaya çalıştığınız 2 ana şey var:
  1. Koddaki kareler yerine kendi görsellerinizi kullanmak.
  2. Her yöne ateş edebilmek.
2.sini zaten anlattım, kodu elleyebildiğim vakit kod üzerinde de düzenleme yapacağım.

1.si için kendiniz yapmayı deneyebilirsiniz. Aslında yapmanız gereken şey oyuncu ve mermi sınıflarına bir adet daha surface değişkeni eklemek ve bu değişkenlere görselinizi atamak.

Dörtgenler kalacak ama ekrana çizilmeyecek çünkü çarpışmaların tespiti için onlara ihtiyacınız var.
Dörtgenlerin boyutu görselinizle aynı olacak, yine görsellerle aynı şekilde hareket edecekler.
Dörtgenleri çizmek yerine görselleri çizeceksiniz her döngüde, o kadar.

Sanırsam mesajım gitmedi dediğinizi anladığım kadarıyla deneyeceğim sizin düzenlediğiniz hali içinde beklemedeyim teşekkürler şimdiden.
/düzenleme = ikinci bir sayfaya geçmişiz yeni anladım yabancıyım buraya baya
 
Son düzenleme:
Beklettiğim için üzgünüm. Kodu şimdi okudum da anlamamanıza şaşmamalı. Kod bildiğiniz spagetti.

Açıkçası işlerim hâlâ bitmedi ve muhtemelen bütün gece onlarla uğraşacağım ama koda baktığım kadarıyla neredeyse tamamını sizin tekrar yazmanız gerekiyor istediğiniz gibi yapabilmeniz için. Örneğin ana class'lar değişecek, tercihen canavar için de ayrı bir class açılacak. Ana döngüdeki kodlar class'ların içine taşınacak. Gereksiz kodlar ve fonksiyonlar değişecek. Ayrıca kodlar dosyalara ayrılacak.

Anlayacağınız, bu kodun üzerinden anlatmaktansa kodu baştan yazmak daha kolay ki bunun için ancak yarın vaktim olabilir.

Bu vakte kadar boşuna beklettiğim için tekrardan üzgünüm.
 
Beklettiğim için üzgünüm. Kodu şimdi okudum da anlamamanıza şaşmamalı. Kod bildiğiniz spagetti.

Açıkçası işlerim hâlâ bitmedi ve muhtemelen bütün gece onlarla uğraşacağım ama koda baktığım kadarıyla neredeyse tamamını sizin tekrar yazmanız gerekiyor istediğiniz gibi yapabilmeniz için. Örneğin ana Class'lar değişecek, tercihen canavar için de ayrı bir class açılacak. Ana döngüdeki kodlar Class'ların içine taşınacak. Gereksiz kodlar ve fonksiyonlar değişecek. Ayrıca kodlar dosyalara ayrılacak.

Anlayacağınız, bu kodun üzerinden anlatmaktansa kodu baştan yazmak daha kolay ki bunun için ancak yarın vaktim olabilir.

Bu vakte kadar boşuna beklettiğim için tekrardan üzgünüm.

Ne yalan söyleyeyim heyecanla siteyi yenileyip duruyordum mesaj bir şekilde gözümden kaçmış şimdi gördüm bende :D
Üzgün olmanızı gerektiren bir durum söz konusu olamaz ne kadar teşekkür etsem azdır.
Ben sabırla bekleyeceğim sonuç alabilirsem, sizin yazacağınız kodu anlayıp kavrayabilirsem ve projem için bir adım dahi atabilsem benim için müthiş bir durum.
Kod konusunda kesinlikle haklısınız her yer her yerde benim gibi iki haftalık birinin bunda düzenleme yapması çok zor. İşleriniz için kolaylık diliyorum geri dönüşünüzü dört gözle bekliyorum sağlacakla kalın :)

Rica ederim, anlamadığınız noktaları sorabilirsiniz bu konu üzerinden. Gördüğüm gibi cevaplamaya çalışacağım.

| kodlarını kendiniz şu şekilde düzeltebilirsiniz:
  1. | işaretinin bulunduğu tüm dosyaların en üstüne from typing import Optional yazın.
  2. Daha sonra örneğin bg: pygame.Surface | None şeklindeki kodları bg: Optional[pygame.Surface] şeklinde değiştirin.

Ayrıca main.py dosyasındaki bir kod için de hata alacaksınız eğer Python 3.10 altı sürüm kullanıyorsanız. Onu da şu şekilde düzeltebilrisiniz:
  1. main.py dosyasının başına from typing import List yazın.
  2. objects: list[BaseObject] = [] satırını objects: List[BaseObject] = [] şeklinde değiştirin.
Şimdi sorunuza gelecek olursak açıkçası bunu sadece pygame özelinde cevaplamak istemiyorum. Bunun sebebi yeni başlayan biri için herhangi bir dili öğrenmek adına 2 haftanın çok kısa bir süre olması. Öncelikle bolca proje yapmanız gerekiyor. Aslında bana kalırsa dil öğrenmenin tek yolu bu. Dillerin Syntax'ını öğrenmek zaten kolaydır genelde ama öğrenmesi zor olan programlama mantığıdır. Bunun için de bolca proje yapıp aklınızda belirli temelleri oturtmalısınız. Yapabiliyorsanız başkalarının yazdığı kodlara bakmalı ve onları anlamaya çalışmalısınız. Ha bir de kesinlikle İngilizce öğrenin.

Pygame ve genel oyun programlama için konuşacak olursak ben şahsen OOP mantığına kendinizi derhal aşina etmenizi tavsiye ederim. İşiniz çok daha kolay olur. Ayrıca Python başkalarıyla çalışmadığınız veya sunucular içinde çalışacak bir kod yazmadığınız takdirde her daim en son sürümü kullanmaya özen gösterin. Performans artışları kayda değerdir.

Son olarak ana hedefiniz oyun programlamaysa Python yerine C# veya C++ öğrenmenizi tavsiye ederim. Gerçek bir oyun yapmak için bu tarz dillere ihtiyacınız var. C# ile Unity, C++ ile Unreal kullanabilirsiniz. Kendinizi daha da ilerletmek istediğinizde C++ ile OpenGL, DirectX veya sdl2 (bu çok basit şeyler için) kullanarak kendi motorunuzu veya oyun altyapınızı tasarlayıp yazabilirsiniz.

Kendi kodunuzu da atabilirseniz yardımcı olmam kolaylaşır.

Bu kodu dediklerinizi yapınca çalıştırmayı başardım mermiler ekranda sekiyor dışarı çıkmıyor. Siz mi böyle mi yazdınız? Yoksa ben mi bir yerde hata yaptım :D
 
Son düzenleme:
Bu kodu dediklerinizi yapınca çalıştırmayı başardım mermiler ekranda sekiyor dışarı çıkmıyor. Siz mi böyle mi yazdınız? Yoksa ben mi bir yerde hata yaptım :D
Ben öyle yapmıştım, onu sağlayan kodun başına bir # yorumu bırakmıştım, istemiyorsanız o kısmı silebilirsiniz.
 
Hadi geçmiş olsun.


@jinwo

Çok teşekkürler hocam,
Bu kodun mantığını kavramaya çalışacağım.
İlgin ve yardımların için ayrı ayırdığın vakit için ayrı teşekkür ederim.
Bana göre çok bilgilisiniz ne kadar sürede bu kadar geliştiniz merak ettim :)
 
Çözüm
Çok teşekkürler hocam,
Bu kodun mantığını kavramaya çalışacağım.
İlgin ve yardımların için ayrı ayırdığın vakit için ayrı teşekkür ederim.
Bana göre çok bilgilisiniz ne kadar sürede bu kadar geliştiniz merak ettim :)
Rica ederim. Açıkçası çok bilgili olduğumu söylemek hata olur. Şahsen programlamayı iş amaçlı değil de tamamen zevk amaçlı yapanlardanım, dolayısıyla profesyoneller kadar iyi olmam imkânsız. Yaklaşık 4 yıldır Python biliyorum diyebilirim sanırım. Öylesine eğlence amaçlı projeler yapmak için öğrenmiştim, sonra yavaş yavaş bir iki nispeten elle tutulabilir şeyler yazdım ama herhalde 3. seneme tekabül ediyor zamanı. Arada canım sıkıldığı için az biraz C# ve Unity öğrenmişliğim var, şu anda da yine canım sıkıldığı için boş zamanlarımda C++ öğrenmeye çalışıyorum.
 
Rica ederim. Açıkçası çok bilgili olduğumu söylemek hata olur. Şahsen programlamayı iş amaçlı değil de tamamen zevk amaçlı yapanlardanım, dolayısıyla profesyoneller kadar iyi olmam imkânsız. Yaklaşık 4 yıldır Python biliyorum diyebilirim sanırım. Öylesine eğlence amaçlı projeler yapmak için öğrenmiştim, sonra yavaş yavaş bir iki nispeten elle tutulabilir şeyler yazdım ama herhalde 3. seneme tekabül ediyor zamanı. Arada canım sıkıldığı için az biraz C# ve Unity öğrenmişliğim var, şu anda da yine canım sıkıldığı için boş zamanlarımda C++ öğrenmeye çalışıyorum.

Anladım hocam, Python konusunda kaynak veya öğrenme şekli açısından tavsiyelerin varsa açığım.
Az çok anladığım kadarıyla bu öğrenme safası da zaten epey uzun, ne kadar çok mesai harcarsan o kadar gelişirsin.
Python'da kendimi tatmin edecek seviyelere gelince bende oyun motorlarını kullanmaya başlayacağım.
 
Anladım hocam, Python konusunda kaynak veya öğrenme şekli açısından tavsiyelerin varsa açığım.
Tek öğrenme şekli proje yapmak. Proje yaptıkça önünüze sürekli sorun çıkacak ve siz de o sorunları çöze çöze kendinizi geliştireceksiniz. Projeden kastımı yanlış anlamayın, illa büyük şeyler olması gerekmiyor. Örneğin işlem önceliklerine dikkat eden bir hesap makinesi, internetten otomatik olarak sevdiğiniz animelerin bölüm bilgilerini çeken bir bot, hatta bu soruyu sormanıza sebep olan basit bir PyGame oyunu da olur. Ayrıca dilin detaylarına hakim olmanın tek yolu ne yazık ki İngilizce. Programlamada ne ile uğraşırsanız uğraşın, hangi dili kullanırsanız kullanın İngilizce eksiği bir yerden sonra sizi sınırlamaya başlayacaktır.

Az çok anladığım kadarıyla bu öğrenme safası da zaten epey uzun, ne kadar çok mesai harcarsan o kadar gelişirsin.
Çok doğru ama kendinizi aşırı zorlamamaya dikkat edin. Şayet sonra sıkılıp birdenbire kodlamayı bırakabiliyorsunuz.

Python'da kendimi tatmin edecek seviyelere gelince bende oyun motorlarını kullanmaya başlayacağım.
Fena fikir değil ancak Python dili genel olarak oyun yapımında kullanılan dillerden çok farklı bir yapıda olduğundan geçiş aşamasında yine bolca zorlanacaksınız. Benim tavsiyem çok geçmeden C ile başlayın ve bir miktar C öğrendikten (C dilinde usta olmanıza gerek yok, sadece temel bilgi bile yeterli olabilir, hatta C'yi temelli es geçebilirsiniz) sonra C++ öğrenmeye başlayın. Eğer Unity kullanacaksanız direkt olarak C# da öğrenebilirsiniz.
 

Yeni konular

Geri
Yukarı