Yılan oyunu yazmaya çalıştım.Fakat kıvrılma hareketini nasıl yazacağımla ilgili bir fikrim yok.Yılanın başını çevirdiğimde bütün kuyruk da başıyla beraber dönüyor.Şimdilik yılanı tek karede bırakmak zorunda kalıyorum.Bu sorunu çözmeme yardım edebilecek birisi var mı?Bu arada Class kullanmıyorum.Yeni başladığım için bana zor geliyor.Mümkünse Class kullanmadan yardımcı olunuz.Aslında amacım yılanın her karesinin kendinden önceki karenin koordinatlarını tekrar etmesi.Böylece kıvrım yapabilirim ama bunu nasıl kodlayabilirim bilmiyorum. Kod aşağıdadır.
import pygame import random from pygame.locals import * from time import sleep pygame.init() pencerem=pygame.display.set_mode((800,600)) WHITE=(255,255,255) BLACK=(0,0,0) RED=(255,0,0) GREEN=(0,255,0) knmx=60 knmy=60 sagx=20 asagiy=20 yemx=100 yemy=100 haritasol=False haritasag=False haritayuk=False haritaasg=False yembyk=10 saga=True sola=False asg=False yuk=False hiz=10 tailsize=2 uyku=0.05 konum=[knmx,knmy] gercekhiz=0.02 #ters orantı def yon(x): if int(x)==273 and (saga or sola)==True and (yuk and asg)==False: a=True b=False c=False d=False return a,b,c,d elif int(x)==274 and (saga or sola)==True and (yuk and asg)==False: a=False b=False c=False d=True return a,b,c,d elif int(x)==275 and (saga and sola)==False and (yuk or asg)==True: a=False b=True c=False d=False return a,b,c,d elif int(x)==276 and (saga and sola)==False and (yuk or asg)==True: a=False b=False c=True d=False return a,b,c,d else: return yuk,saga,sola,asg def hareket(): global n,m if yuk==True: for i in range(1): n=knmy-hiz m=knmx sleep(uyku) return n,m if asg==True: for i in range(1): n=knmy+hiz m=knmx sleep(uyku) return n,m if sola==True: for i in range(1): m=knmx-hiz n=knmy sleep(uyku) return n,m if saga==True: for i in range(1): m=knmx+hiz n=knmy sleep(uyku) return n,m while True: pencerem.fill(BLACK) for i in range(1): bas=pygame.draw.rect(pencerem, RED, (knmx,knmy,sagx,asagiy)) konum.append=[knmx,knmy]
for olay in pygame.event.get(): if olay.type==QUIT: pygame.quit() elif olay.type==KEYDOWN: kolay=olay.key yuk,saga,sola,asg=yon(kolay) sleep(0.1) knmy,knmx=hareket() if knmx==800 and saga: knmx=0 elif knmx==0 and sola: knmx=800 elif knmy==0 and yuk: knmy=600 elif knmy==600 and asg: knmy=0 sleep(gercekhiz)
pygame.display.flip()
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
Kuyruklarin koordinatlarini bir dizi icinde tutup her oyun dongusunde başın önceki koordinatini 1. Kuyruga 1. Kuyrugu 2 ye atayip boyle devam ederek yapabilirsin
şöyle bir problem var bu yılana 20 tane kuyruk kutusu eklersem 20 kere bu koşulları değerlendiren ifadeler girmek zorunda kalacağım.Bu işlemi birka. fonksiyon ve döngü ile yapmak mümkün mü?
Yilanin konumunu X ve Y yapmissin, hata orada. Python syntaxini pek bilmiyorum ama X[] ve Y[] seklinde olmali koordinatlar, yani array/list tarz bir structure. Saga gideceksin diyelim, yilanin boyu da 20, yani 20 lik bir array var elinde ve x[19] da yilanin başı. x[0] = x[1], x[1] = x[2], .... , x[18] = x[19], x[19] = x[19] + 1 yaparsin, boylece yilanin basi saga, geri kalanlar da kendisinden bir oncekine gitmis, yani takip etmis olur.
Tabi bunu ornek olarak verdim, simdi bastan yazmaya usendim ama basi arrayin basinda olsa cok daha mantikli olur tabi, zira yilanin boyu buyuyecek. Ayni zamanda buyudugu icin de array gibi degil de arraylist tadinda, dedigim gibi python bilmiyorum, size'i sabit olmayan bir data structure kullanirsin. Yukarida yazdigimin tersini loopla yapip x[20] yi de x[19]'un onceki yerine koyarsin.
Kahvemi yeni ictim, cok kendime gelemedim, anlatamadiysam soyle.
Yilanin konumunu X ve Y yapmissin, hata orada. Python syntaxini pek bilmiyorum ama X[] ve Y[] seklinde olmali koordinatlar, yani array/list tarz bir structure. Saga gideceksin diyelim, yilanin boyu da 20, yani 20 lik bir array var elinde ve x[19] da yilanin başı. x[0] = x[1], x[1] = x[2], .... , x[18] = x[19], x[19] = x[19] + 1 yaparsin, boylece yilanin basi saga, geri kalanlar da kendisinden bir oncekine gitmis, yani takip etmis olur.
Tabi bunu ornek olarak verdim, simdi bastan yazmaya usendim ama basi arrayin basinda olsa cok daha mantikli olur tabi, zira yilanin boyu buyuyecek. Ayni zamanda buyudugu icin de array gibi degil de arraylist tadinda, dedigim gibi python bilmiyorum, size'i sabit olmayan bir data structure kullanirsin. Yukarida yazdigimin tersini loopla yapip x[20] yi de x[19]'un onceki yerine koyarsin.
Kahvemi yeni ictim, cok kendime gelemedim, anlatamadiysam soyle.
hocam teşekkür ederim, for döngüsüyle bir listeye gömdüm ve her biri diğerinin koordinatı olacak şekilde çağırdım.Sizin yaptığınız daha profesyonel.Bu oyunu yapma amacım oyunu yapay zekaya oynatmak.Bunun için input olarak yılanın başının yemin ve yılanın parçalarına olan uzaklığını kullanmayı düşünüyorum.Sizin bu konuda fikriniz var mı?Duymayı çok isterim.
bastan ekle kuyruktan sil. aralari dusunme kuyruga gelene kadar kalsin bosta. eklerken saga sola ekle klavyeye gore bitti gitti akar kivrilir gider. uzamasi icin bastan ekle ama kuyruktan silme.
< Bu mesaj bu kişi tarafından değiştirildi 26_bbz_26 -- 21 Ocak 2019; 6:21:23 >
Kod aşağıdadır.
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.