Kezdőoldal » Számítástechnika » Programozás » Miért nem működik ez a program...

Miért nem működik ez a program Pythonban? Egy egyszerű játék lenne, amiben egy mozgo labdara kell kattintani.

Figyelt kérdés

A kattintasokon kivul ovis szinten működik, ez a sor viszont nem jó, azaz mindig igaz: if (a > x-20 & a < x+20) & (b > y-20 & b < y+20) :


Részletek (nem az egész script):


def kattint(event):

--- global x,y,dx,dy,v,pontszam,i,color

--- a=event.x

--- b=event.y

--- if (a > x-20 & a < x+20) & (b > y-20 & b < y+20):

------ pontszam+=100


------ if dx<0: dx=dx-v

------ if dx>0: dx=dx+v

------ if dy<0: dy=dy-v

------ if dy>0: dy=dy+v #gyorsul

------ i=randrange(8)

------ can.itemconfigure(ball,fill=color[i])


#

Ez a labda:


ball=can.create_oval(x-20,y-20,x+20,y+20,fill='red')

can.bind("<Button-1>",kattint)


Köszönöm a segitséget!


2019. márc. 26. 14:04
 1/7 anonim ***** válasza:

Nem nagyon szoktam pythonozne de nem a ball-

ra kéne bindelni?

2019. márc. 26. 14:34
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:

Arra nem megy, ezt a hiba uzenetet kapom:


'int' object has no attribute 'bind'


Egyebkent igy kezdtem en is :)

2019. márc. 26. 14:46
 3/7 anonim ***** válasza:
100%

Gyanítom tkinter - ezt elfelejtetted közölni. ;)


"de nem a ball-ra kéne bindelni?

...

Arra nem megy, ezt a hiba uzenetet kapom:

'int' object has no attribute 'bind'"


A create_oval metódus

* [link]

visszatérési értéke egy egész szám, ami azonosítja a rajzlapra kerülő objektumokat - így annak nem lesz bind metódusa.


A megoldást a Canvas objektum tag_bind metódusa

* [link]

fogja jelenteni:

ball = can.create_oval(x-20,y-20,x+20,y+20,fill='red')

can.tag_bind(ball,"<Button-1>",kattint)

annak megadhatod, hogy a rajzlapon belül melyik elemhez rendeljen eseményt, így nem kell ellenőrizned a koordinátáját.

2019. márc. 26. 16:28
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:

Koszonom, vilagos, ki fogom probalni!!!

;)

2019. márc. 26. 17:36
 5/7 anonim ***** válasza:
Mert a Pythonban nem & az ÉS jele, hanem and.
2019. márc. 27. 13:36
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:

Az & a bitenkénti ÉS operátora, amelynek a precedenciája kisebb az összeadás-kivonásnál, de nagyobb az összehasonlításnál ("kacsacsőr"). Tehát pl. a második zárójeled előbb az y-20 & b bitenkénti műveletet hajtja végre, utána az összehasonlításokat.

Írd át andre. És igazából felesleges a zárójelezés, ha három ÉS művelet van a sorodban, bár az olvashatóságot valóban segíti, és ezért nem haszontalan.

(Előző)

2019. márc. 27. 13:44
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:
100%

Mivel a labda kerek, érdemesebb a labda és a kattintás pozíciója közti távolságot:

r = math.sqrt(math.pow(a - x, 2) + math.pow(b - y, 2))

figyelembe venni:

if r < 20:

.. pontszam += 100

mert a topiknyitó hozzászólásban szereplő kód a kör köré illesztett négyzetet veszi figyelembe, így a négyzet sarkait is elfogadja

2019. márc. 28. 13:54
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!