1.
tetris vs yapan vardı fakat kendileri kodları düzeltiyordu izlediğim videolarda. bende dedim ki tetris yerine kendi oyunum vardı (bkz: scratch) ile yaptığım. bunu ptyhon ile yazdırabilirmiyim acaba dedim. önce bahsettiğim oyunu görün buradan
işte bu oyunun daha ilkel versiyonunu hiç bir şekilde koda ekleme/çıkarma yapmadan, en ufak hatalarda bile chatgpt ye sorarak bunu yapabilirmiyim dedim ve sonuç inanılmaz.sadece uzun metinlerde yarıda kaldığında koda devam et dedim o kadar.
şimdi şunu söyleyeyim kesinlikle kolay değildi, saçma sapan hatalar yaptı. mesela mermi yerine mermmi yazması gibi(hayır yani zaten kodda mermi değişkenin varken gidip nasıl aynı kelimeyi yanlış yazıyorsun ?)
sonra sürekli unutmuşum diyor, oğlum sen insanmısın? neyi unutuyorsun? sonra sonuna olmaması gereken kodu ekliyor, sonra hata alınca abi o sondakini sil ondan diyor, lan madem olmaması gerekiyor neden yazdın? yani çok sabırlı ve mala anlatır gibi anlatmanız lazım, bir şeyi düzeltip 3 şeyi bozuyor bazen hem düzeltmiyor üstüne bozuyor sonra önceki koda devam et falan....
neyse gel gelelim en az 20-30 defa revizyon vererek ve adım adım ilerleyerek yaptırdığım sonuca
visual studio code üzerinde çalıştım bu arada, isteyen yapıştırıp denyebilir. visualda akıcı ama internet sitesinde denedim ve oradan mı kaynaklı yoksa optimizasyon kaynaklımı bilmiyorum ama aşalğıda saf kodu visualda deneyebilir yada buradaki siteden kasan versiyonunu deneybilirsiniz. lakin akıcı çalıştığı yer visual stüdyo. ve ben bilgisayardan denedim, telefonda ne olur bilmiyorum.
import pygame
import sys
import random
# pygame başlatma
pygame.init()
# oyun ekranı boyutları
wıdth, heıght = 800, 600
screen = pygame.display.set_mode((wıdth, heıght))
pygame.display.set_caption("balon oyunu")
# renkler
whıte = (255, 255, 255)
blue = (0, 0, 255)
red = (255, 0, 0)
transparent = (0, 0, 0, 100) # yarı şeffaf renk (r, g, b, a)
# balon özellikleri
balon_x = wıdth // 2
balon_y = heıght // 2
balon_r = 20
# kontrol edilen daire özellikleri (hafifçe şeffaf)
kontrol_x = wıdth // 2
kontrol_y = heıght // 2
kontrol_r = balon_r * 2 # balonun iki katı büyüklüğünde
kontrol_alpha = 100 # dairenin şeffaflık değeri
# mermi özellikleri
mermi_r = 5
mermi_x = []
mermi_y = []
mermi_hiz = 3
mermi_sayisi = 5 # daha az mermi
# oyun durumu
oyun_bitti = false
skor = 0
en_yuksek_skor = 0
clock = pygame.time.clock()
# oyun başlangıcı için geri sayım
def geri_sayim():
font = pygame.font.font(none, 36)
sayim = 3
while sayim > 0:
screen.fill(whıte)
text = font.render(str(sayim), true, blue)
screen.blit(text, (wıdth // 2 - 20, heıght // 2 - 20))
pygame.display.flip()
pygame.time.wait(1000) # 1 saniye bekle
sayim -= 1
# oyun başlama aşaması
geri_sayim()
# oyun döngüsü
while true:
while not oyun_bitti:
for event in pygame.event.get():
if event.type == pygame.quıt:
pygame.quit()
sys.exit()
# fare pozisyonunu al
fare_x, fare_y = pygame.mouse.get_pos()
kontrol_x, kontrol_y = fare_x, fare_y # kontrol edilen dairenin konumunu güncelle
# ekranı temizle
screen.fill(whıte)
# balonu çiz
pygame.draw.circle(screen, blue, (balon_x, balon_y), balon_r)
# mermileri çiz ve hareket ettir (balonun bulunduğu konuma doğru)
for i in range(len(mermi_x)):
pygame.draw.circle(screen, blue, (mermi_x[i], mermi_y[i]), mermi_r)
# mermi hareketi
dx = balon_x - mermi_x[i]
dy = balon_y - mermi_y[i]
uzaklik = (dx ** 2 + dy ** 2) ** 0.5
# mermi hızını hesapla (tam sayılara dönüştür)
mermi_hiz_x = int((dx / uzaklik) * mermi_hiz)
mermi_hiz_y = int((dy / uzaklik) * mermi_hiz)
# mermiyi güncelle
mermi_x[i] += mermi_hiz_x
mermi_y[i] += mermi_hiz_y
# kontrol daireye değen mermileri yok et
dx_mermi = kontrol_x - mermi_x[i]
dy_mermi = kontrol_y - mermi_y[i]
uzaklik_mermi = (dx_mermi ** 2 + dy_mermi ** 2) ** 0.5
if uzaklik_mermi < kontrol_r:
mermi_x.pop(i)
mermi_y.pop(i)
skor += 1 # mermi yok olduğunda puan kazan
break # bir mermi yok olduğunda döngüyü sonlandır
# mermi oluşturma (sahnenin herhangi bir tarafından)
if len(mermi_x) < mermi_sayisi:
for _ in range(mermi_sayisi - len(mermi_x)):
x = random.choice([-20, wıdth + 20])
y = random.choice([-20, heıght + 20])
if x == -20: # sol kenar
y = random.randint(0, heıght)
elif x == wıdth + 20: # sağ kenar
y = random.randint(0, heıght)
elif y == -20: # üst kenar
x = random.randint(0, wıdth)
y = -20
elif y == heıght + 20: # alt kenar
x = random.randint(0, wıdth)
y = heıght + 20
mermi_x.append(x)
mermi_y.append(y)
# mermi - balon çarpışma kontrolü
for i in range(len(mermi_x)):
distance = ((mermi_x[i] - balon_x) ** 2 + (mermi_y[i] - balon_y) ** 2) ** 0.5
if distance < balon_r + mermi_r:
oyun_bitti = true
# kontrol edilen daireyi çiz (hafifçe şeffaf)
kontrol_daire = pygame.surface((kontrol_r * 2, kontrol_r * 2), pygame.srcalpha)
pygame.draw.circle(kontrol_daire, transparent, (kontrol_r, kontrol_r), kontrol_r)
screen.blit(kontrol_daire, (kontrol_x - kontrol_r, kontrol_y - kontrol_r))
pygame.display.flip()
clock.tick(60)
# oyun bitti ekranı
screen.fill(whıte)
font = pygame.font.font(none, 48)
oyun_bitti_mesaj = font.render("oyun bitti", true, red)
skor_mesaj = font.render("skor: " + str(skor), true, blue)
en_yuksek_skor_mesaj = font.render("en yüksek skor: " + str(en_yuksek_skor), true, blue)
# mesajları ekranda göster
ekran_ortasi = (wıdth // 2, heıght // 2)
ekran_ortasi_x, ekran_ortasi_y = ekran_ortasi
ekran_ortasi_x -= oyun_bitti_mesaj.get_width() // 2
ekran_ortasi_y -= oyun_bitti_mesaj.get_height() // 2
screen.blit(oyun_bitti_mesaj, (ekran_ortasi_x, ekran_ortasi_y - 50))
screen.blit(skor_mesaj, (ekran_ortasi_x, ekran_ortasi_y + 20))
screen.blit(en_yuksek_skor_mesaj, (ekran_ortasi_x, ekran_ortasi_y + 90))
# skoru kaydet
if skor > en_yuksek_skor:
en_yuksek_skor = skor
# "tekrar oyna" butonunu çiz
tekrar_oyna_renk = (0, 255, 0)
tekrar_oyna_mesaj = font.render("tekrar oyna", true, tekrar_oyna_renk)
tekrar_oyna_x = ekran_ortasi_x + oyun_bitti_mesaj.get_width() // 2 - tekrar_oyna_mesaj.get_width() // 2
tekrar_oyna_y = ekran_ortasi_y + 160
pygame.draw.rect(screen, tekrar_oyna_renk, (tekrar_oyna_x, tekrar_oyna_y, tekrar_oyna_mesaj.get_width(), tekrar_oyna_mesaj.get_height()))
screen.blit(tekrar_oyna_mesaj, (tekrar_oyna_x, tekrar_oyna_y))
pygame.display.flip()
# tekrar oyna butonuna tıklanıp tıklanmadığını kontrol et
mouse_x, mouse_y = pygame.mouse.get_pos()
tekrar_oyun_buton = pygame.rect(tekrar_oyna_x, tekrar_oyna_y, tekrar_oyna_mesaj.get_width(), tekrar_oyna_mesaj.get_height())
if tekrar_oyun_buton.collidepoint(mouse_x, mouse_y):
for event in pygame.event.get():
if event.type == pygame.mousebuttondown:
# oyunu yeniden başlat
oyun_bitti = false
skor = 0
mermi_x = [] # mermileri sıfırla
mermi_y = []
# yeniden mermi oluştur
for _ in range(mermi_sayisi):
x = random.choice([-20, wıdth + 20])
y = random.choice([-20, heıght + 20])
if x == -20: # sol kenar
y = random.randint(0, heıght)
elif x == wıdth + 20: # sağ kenar
y = random.randint(0, heıght)
elif y == -20: # üst kenar
x = random.randint(0, wıdth)
y = -20
elif y == heıght + 20: # alt kenar
x = random.randint(0, wıdth)
y = heıght + 20
mermi_x.append(x)
mermi_y.append(y)
for event in pygame.event.get():
if event.type == pygame.quıt:
pygame.quit()
sys.exit()
bazı kesitler



işte bu oyunun daha ilkel versiyonunu hiç bir şekilde koda ekleme/çıkarma yapmadan, en ufak hatalarda bile chatgpt ye sorarak bunu yapabilirmiyim dedim ve sonuç inanılmaz.sadece uzun metinlerde yarıda kaldığında koda devam et dedim o kadar.
şimdi şunu söyleyeyim kesinlikle kolay değildi, saçma sapan hatalar yaptı. mesela mermi yerine mermmi yazması gibi(hayır yani zaten kodda mermi değişkenin varken gidip nasıl aynı kelimeyi yanlış yazıyorsun ?)
sonra sürekli unutmuşum diyor, oğlum sen insanmısın? neyi unutuyorsun? sonra sonuna olmaması gereken kodu ekliyor, sonra hata alınca abi o sondakini sil ondan diyor, lan madem olmaması gerekiyor neden yazdın? yani çok sabırlı ve mala anlatır gibi anlatmanız lazım, bir şeyi düzeltip 3 şeyi bozuyor bazen hem düzeltmiyor üstüne bozuyor sonra önceki koda devam et falan....
neyse gel gelelim en az 20-30 defa revizyon vererek ve adım adım ilerleyerek yaptırdığım sonuca
visual studio code üzerinde çalıştım bu arada, isteyen yapıştırıp denyebilir. visualda akıcı ama internet sitesinde denedim ve oradan mı kaynaklı yoksa optimizasyon kaynaklımı bilmiyorum ama aşalğıda saf kodu visualda deneyebilir yada buradaki siteden kasan versiyonunu deneybilirsiniz. lakin akıcı çalıştığı yer visual stüdyo. ve ben bilgisayardan denedim, telefonda ne olur bilmiyorum.
import pygame
import sys
import random
# pygame başlatma
pygame.init()
# oyun ekranı boyutları
wıdth, heıght = 800, 600
screen = pygame.display.set_mode((wıdth, heıght))
pygame.display.set_caption("balon oyunu")
# renkler
whıte = (255, 255, 255)
blue = (0, 0, 255)
red = (255, 0, 0)
transparent = (0, 0, 0, 100) # yarı şeffaf renk (r, g, b, a)
# balon özellikleri
balon_x = wıdth // 2
balon_y = heıght // 2
balon_r = 20
# kontrol edilen daire özellikleri (hafifçe şeffaf)
kontrol_x = wıdth // 2
kontrol_y = heıght // 2
kontrol_r = balon_r * 2 # balonun iki katı büyüklüğünde
kontrol_alpha = 100 # dairenin şeffaflık değeri
# mermi özellikleri
mermi_r = 5
mermi_x = []
mermi_y = []
mermi_hiz = 3
mermi_sayisi = 5 # daha az mermi
# oyun durumu
oyun_bitti = false
skor = 0
en_yuksek_skor = 0
clock = pygame.time.clock()
# oyun başlangıcı için geri sayım
def geri_sayim():
font = pygame.font.font(none, 36)
sayim = 3
while sayim > 0:
screen.fill(whıte)
text = font.render(str(sayim), true, blue)
screen.blit(text, (wıdth // 2 - 20, heıght // 2 - 20))
pygame.display.flip()
pygame.time.wait(1000) # 1 saniye bekle
sayim -= 1
# oyun başlama aşaması
geri_sayim()
# oyun döngüsü
while true:
while not oyun_bitti:
for event in pygame.event.get():
if event.type == pygame.quıt:
pygame.quit()
sys.exit()
# fare pozisyonunu al
fare_x, fare_y = pygame.mouse.get_pos()
kontrol_x, kontrol_y = fare_x, fare_y # kontrol edilen dairenin konumunu güncelle
# ekranı temizle
screen.fill(whıte)
# balonu çiz
pygame.draw.circle(screen, blue, (balon_x, balon_y), balon_r)
# mermileri çiz ve hareket ettir (balonun bulunduğu konuma doğru)
for i in range(len(mermi_x)):
pygame.draw.circle(screen, blue, (mermi_x[i], mermi_y[i]), mermi_r)
# mermi hareketi
dx = balon_x - mermi_x[i]
dy = balon_y - mermi_y[i]
uzaklik = (dx ** 2 + dy ** 2) ** 0.5
# mermi hızını hesapla (tam sayılara dönüştür)
mermi_hiz_x = int((dx / uzaklik) * mermi_hiz)
mermi_hiz_y = int((dy / uzaklik) * mermi_hiz)
# mermiyi güncelle
mermi_x[i] += mermi_hiz_x
mermi_y[i] += mermi_hiz_y
# kontrol daireye değen mermileri yok et
dx_mermi = kontrol_x - mermi_x[i]
dy_mermi = kontrol_y - mermi_y[i]
uzaklik_mermi = (dx_mermi ** 2 + dy_mermi ** 2) ** 0.5
if uzaklik_mermi < kontrol_r:
mermi_x.pop(i)
mermi_y.pop(i)
skor += 1 # mermi yok olduğunda puan kazan
break # bir mermi yok olduğunda döngüyü sonlandır
# mermi oluşturma (sahnenin herhangi bir tarafından)
if len(mermi_x) < mermi_sayisi:
for _ in range(mermi_sayisi - len(mermi_x)):
x = random.choice([-20, wıdth + 20])
y = random.choice([-20, heıght + 20])
if x == -20: # sol kenar
y = random.randint(0, heıght)
elif x == wıdth + 20: # sağ kenar
y = random.randint(0, heıght)
elif y == -20: # üst kenar
x = random.randint(0, wıdth)
y = -20
elif y == heıght + 20: # alt kenar
x = random.randint(0, wıdth)
y = heıght + 20
mermi_x.append(x)
mermi_y.append(y)
# mermi - balon çarpışma kontrolü
for i in range(len(mermi_x)):
distance = ((mermi_x[i] - balon_x) ** 2 + (mermi_y[i] - balon_y) ** 2) ** 0.5
if distance < balon_r + mermi_r:
oyun_bitti = true
# kontrol edilen daireyi çiz (hafifçe şeffaf)
kontrol_daire = pygame.surface((kontrol_r * 2, kontrol_r * 2), pygame.srcalpha)
pygame.draw.circle(kontrol_daire, transparent, (kontrol_r, kontrol_r), kontrol_r)
screen.blit(kontrol_daire, (kontrol_x - kontrol_r, kontrol_y - kontrol_r))
pygame.display.flip()
clock.tick(60)
# oyun bitti ekranı
screen.fill(whıte)
font = pygame.font.font(none, 48)
oyun_bitti_mesaj = font.render("oyun bitti", true, red)
skor_mesaj = font.render("skor: " + str(skor), true, blue)
en_yuksek_skor_mesaj = font.render("en yüksek skor: " + str(en_yuksek_skor), true, blue)
# mesajları ekranda göster
ekran_ortasi = (wıdth // 2, heıght // 2)
ekran_ortasi_x, ekran_ortasi_y = ekran_ortasi
ekran_ortasi_x -= oyun_bitti_mesaj.get_width() // 2
ekran_ortasi_y -= oyun_bitti_mesaj.get_height() // 2
screen.blit(oyun_bitti_mesaj, (ekran_ortasi_x, ekran_ortasi_y - 50))
screen.blit(skor_mesaj, (ekran_ortasi_x, ekran_ortasi_y + 20))
screen.blit(en_yuksek_skor_mesaj, (ekran_ortasi_x, ekran_ortasi_y + 90))
# skoru kaydet
if skor > en_yuksek_skor:
en_yuksek_skor = skor
# "tekrar oyna" butonunu çiz
tekrar_oyna_renk = (0, 255, 0)
tekrar_oyna_mesaj = font.render("tekrar oyna", true, tekrar_oyna_renk)
tekrar_oyna_x = ekran_ortasi_x + oyun_bitti_mesaj.get_width() // 2 - tekrar_oyna_mesaj.get_width() // 2
tekrar_oyna_y = ekran_ortasi_y + 160
pygame.draw.rect(screen, tekrar_oyna_renk, (tekrar_oyna_x, tekrar_oyna_y, tekrar_oyna_mesaj.get_width(), tekrar_oyna_mesaj.get_height()))
screen.blit(tekrar_oyna_mesaj, (tekrar_oyna_x, tekrar_oyna_y))
pygame.display.flip()
# tekrar oyna butonuna tıklanıp tıklanmadığını kontrol et
mouse_x, mouse_y = pygame.mouse.get_pos()
tekrar_oyun_buton = pygame.rect(tekrar_oyna_x, tekrar_oyna_y, tekrar_oyna_mesaj.get_width(), tekrar_oyna_mesaj.get_height())
if tekrar_oyun_buton.collidepoint(mouse_x, mouse_y):
for event in pygame.event.get():
if event.type == pygame.mousebuttondown:
# oyunu yeniden başlat
oyun_bitti = false
skor = 0
mermi_x = [] # mermileri sıfırla
mermi_y = []
# yeniden mermi oluştur
for _ in range(mermi_sayisi):
x = random.choice([-20, wıdth + 20])
y = random.choice([-20, heıght + 20])
if x == -20: # sol kenar
y = random.randint(0, heıght)
elif x == wıdth + 20: # sağ kenar
y = random.randint(0, heıght)
elif y == -20: # üst kenar
x = random.randint(0, wıdth)
y = -20
elif y == heıght + 20: # alt kenar
x = random.randint(0, wıdth)
y = heıght + 20
mermi_x.append(x)
mermi_y.append(y)
for event in pygame.event.get():
if event.type == pygame.quıt:
pygame.quit()
sys.exit()
bazı kesitler




devamını gör...