právě dělým na hře, kde budete hrát za postavu a zabíjet potvory. Mechanizmus pohybu postavy mám hotový, ale pohyb potvory mi nejde:((
tady to je úryvek kodu:
from Tkinter import *
zakazane_objekty=[]
souradnice_x=150
souradnice_y=150
x=200
y=400
okno = Tk()
scrollbarx=Scrollbar(okno,orient=HORIZONTAL)
scrollbarx.pack(fill=X,side=BOTTOM)
scrollbary=Scrollbar(okno,orient=VERTICAL)
scrollbary.pack(fill=Y,side=RIGHT)
platno=Canvas(xscrollcommand=scrollbarx.set,width=600,height=600
,yscrollcommand=scrollbary.set
,scrollregion=(-1000000, -1000000, 1000000, 1000000),bg='black')
platno.pack()
scrollbarx.config(command=platno.xview)
scrollbary.config(command=platno.yview)
posun_x=platno.xview()[0]
posun_y=platno.yview()[0]
postava=platno.create_rectangle(souradnice_x,souradnice_y,souradnice_x+10,souradnice_y+10,fill='red')
def vykresleni(x,y,x1,y1,fill=None):
obrazek=platno.create_rectangle(x,y,x1,y1,fill=fill,outline="green")
zakazane_objekty.append(obrazek)
def priblizuj():
global x,y
x,y,k,l=platno.coords(prisera)
if x > souradnice_x-10 :
platno.move(prisera,-30,0)
if y > souradnice_y-10 :
platno.move(prisera,0,-30)
if x < souradnice_x:
platno.move(prisera,30,0)
if y < souradnice_y-10:
platno.move(prisera,0,30)
def kontrola():
x,y,x1,y1=platno.coords(postava)
ctverec=platno.find_overlapping(x-300,y-300,x+300,y+300)
for prvek in ctverec:
if prvek == prisera:
priblizuj()
opakuj()
def opakuj():
okno.after(500,kontrola)
opakuj()
def pohyb(event):
global souradnice_x,souradnice_y,posun_x,posun_y,postava
if event.keysym == 'Left':souradnice_x=souradnice_x-30;posun_x=posun_x-0.000015;platno.xview(MOVETO,posun_x)
elif event.keysym == 'Right':souradnice_x=souradnice_x+30;posun_x=posun_x+0.000015;platno.xview(MOVETO,posun_x)
elif event.keysym == 'Up':souradnice_y=souradnice_y-30;posun_y=posun_y-0.000015;platno.yview(MOVETO,posun_y)
elif event.keysym == 'Down':souradnice_y=souradnice_y+30;posun_y=posun_y+0.000015;platno.yview(MOVETO,posun_y)
print souradnice_x,souradnice_y
platno.coords(postava,souradnice_x,souradnice_y,souradnice_x+10,souradnice_y+10)
#mapa -
vykresleni(58.0-20,361.0-20,58.0+20,361.0+20,fill="green")
vykresleni(95.0-20,360.0-20,95.0+20,360.0+20,fill="green")
vykresleni(138.0-20,361.0-20,138.0+20,361.0+20,fill="green")
vykresleni(173.0-20,361.0-20,173.0+20,361.0+20,fill="green")
vykresleni(116.0-20,359.0-20,116.0+20,359.0+20,fill="green")
vykresleni(201.0-20,357.0-20,201.0+20,357.0+20,fill="green")
vykresleni(231.0-20,356.0-20,231.0+20,356.0+20,fill="green")
vykresleni(272.0-20,356.0-20,272.0+20,356.0+20,fill="green")
vykresleni(257.0-20,356.0-20,257.0+20,356.0+20,fill="green")
vykresleni(282.0-20,382.0-20,282.0+20,382.0+20,fill="green")
vykresleni(291.0-20,405.0-20,291.0+20,405.0+20,fill="green")
vykresleni(290.0-20,441.0-20,290.0+20,441.0+20,fill="green")
vykresleni(290.0-20,472.0-20,290.0+20,472.0+20,fill="green")
vykresleni(287.0-20,503.0-20,287.0+20,503.0+20,fill="green")
vykresleni(49.0-20,382.0-20,49.0+20,382.0+20,fill="green")
vykresleni(48.0-20,421.0-20,48.0+20,421.0+20,fill="green")
vykresleni(49.0-20,460.0-20,49.0+20,460.0+20,fill="green")
vykresleni(48.0-20,493.0-20,48.0+20,493.0+20,fill="green")
vykresleni(45.0-20,520.0-20,45.0+20,520.0+20,fill="green")
okno.bind('<Left>',pohyb)
okno.bind('<Right>',pohyb)
okno.bind('<Up>',pohyb)
okno.bind('<Down>',pohyb)
#prisera
prisera=platno.create_rectangle(x,y,x+10,y+10,fill='blue')
mainloop()
Je to jenom ilustrační příklad, normální kód načítá mapu z textového souboru, ale tady to bylo skoro zbytečné tak jsem to dal do samotného kódu.
Cerveny ctverec je vaše postava
Modrý čtverec je potvora
Zelené čtverce jsou zdi
Jakmile se potvora dostane na obrazovku začne se k vám přibližovat, ale projde i zdí, což by sanozřejmě neměla. Mě nenapadl žádný způsob jak napsat ten mechanizmus chození. Prostě ta potvora se musí k vám dostat ale nemůže projít zdí a mělo by to fungovat i kdyby se změnil tvar zdi...
Děkuju za všechny nápady
PS:Všechny věci kterými neprojde potvora jsou v seznamu zakazane_objekty