Arama butonu
Bu konudaki kullanıcılar: 1 misafir
6
Cevap
2969
Tıklama
0
Öne Çıkarma
Python Yılan Oyunu Problemi
A
6 yıl
Onbaşı
Konu Sahibi

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.

Üye Ol Şimdi Değil



K
6 yıl
Teğmen

Kuyruklarin koordinatlarini bir dizi icinde tutup her oyun dongusunde başın önceki koordinatini 1. Kuyruga 1. Kuyrugu 2 ye atayip boyle devam ederek yapabilirsin



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
A
6 yıl
Onbaşı
Konu Sahibi

şö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ü?




Bu mesajda bahsedilenler: @kurosaki_ichigo
A
6 yıl
Onbaşı
Konu Sahibi

hala güncel



Y
6 yıl
Yarbay

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.



< Bu ileti tablet sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
A
6 yıl
Onbaşı
Konu Sahibi

quote:

Orijinalden alıntı: Yirikalische

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.



2
6 yıl
Yarbay

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 >

< Bu ileti mini sürüm kullanılarak atıldı >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.