Proč to nefunguje? Neví někdo? – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Proč to nefunguje? Neví někdo? – Python – Fórum – Programujte.comProč to nefunguje? Neví někdo? – Python – Fórum – Programujte.com

 

Poohlížíte se po nové práci? Administrátor serverů a sítí na Jihlavsku
Bertik23
~ Anonymní uživatel
2 příspěvky
12. 1. 2019   #1
-
0
-

Ahoj!

Mám takový problém, právě dělám hru snake v pythonu za pomoci pygame a vyskytla se mi tu taková chyba a já nevim co s tim. Podle mě je tam všechno dobře.

import pygame as pg
from random import randint

CERNA = (0,0,0)
BILA = (250,250,250)
MODRA = (0,40,250)
ZELENA = (0,255,0)
CERVENA = (250,0,0)
ZLUTA = (255,255,100)
ORANZOVA = (251,155,49)
ZUZOVA = (241,88,226)

sirka_okna = 1280
vyska_okna = 720

hra = True

class snake:
    def __init__(self,x,y,s,v,barva,smer,UP,DOWN,LEFT,RIGHT,rychlost,had):
        self.x = x
        self.y = y
        self.s = s
        self.rx = s
        self.v = v
        self.ry = v
        self.barva = barva
        self.smer = smer
        self.UP = UP
        self.DOWN = DOWN
        self.LEFT = LEFT
        self.RIGHT = RIGHT
        self.CDP = 60
        self.rychlost = rychlost
        self.clanku = 3
        self.had = had
    def nakreslise(self):
        pg.draw.rect(okno,self.barva, (self.x,self.y,self.s,self.v))
    def pohyb(self):
        #POHYB
        if self.CDP == 0:
            if self.smer == "U":
                self.y -= self.v
            if self.smer == "D":
                self.y += self.v
            if self.smer == "L":
                self.x -= self.s
            if self.smer == "R":
                self.x += self.s
            self.CDP = self.rychlost
            #CLANKY
            clanky.append(clanek(self.x,self.y,self.s,self.v,self.barva,1,self.had))
        #OKRAJE
        if self.x >= sirka_okna:
            self.x = 0
        if self.x < 0:
            self.x = sirka_okna-self.s
        if self.y >= vyska_okna:
            self.y = 0
        if self.y < 0:
            self.y = vyska_okna-self.v
        #ZMENA SMERU
        if u.type == pg.KEYDOWN:
            if u.key == self.UP:
                self.smer = "U"
            if u.key == self.DOWN:
                self.smer = "D"
            if u.key == self.LEFT:
                self.smer = "L"
            if u.key == self.RIGHT:
                self.smer = "R"
        #RYCHLOST A ZPOMALENI
        if self.rychlost <= 0:
            self.rychlost = 0
        self.CDP -= 1

class clanek:
    def __init__(self,x,y,s,v,barva,zivoty,had):
        self.x = x
        self.y = y
        self.s = s
        self.rx = s
        self.v = v
        self.ry = v
        self.barva = barva
        self.zivoty = zivoty
        self.had = had
    def nakreslise(self):
        pg.draw.rect(okno,self.barva, (self.x,self.y,self.s,self.v))
    def aPohyb(self):
        for had in hadi:
            if self.had == had.had:
                self.zivoty = had.clanku*had.rychlost
        if self.zivoty <= 0:
            clanky.remove(self)
            
        
        

pg.init()
okno = pg.display.set_mode((sirka_okna,vyska_okna))
pg.display.set_caption("Tha snake game")
hodiny = pg.time.Clock()

hadi = []
hadi.append(snake(0,0,10,10,ZELENA,"D",pg.K_UP,pg.K_DOWN,pg.K_LEFT,pg.K_RIGHT,15,"zeleny"))

clanky = []

while hra:
    for u in pg.event.get():
        if u.type == pg.QUIT:
            hra = False


    okno.fill(CERNA)

    for had in hadi:
        had.nakreslise()
        had.pohyb()

    for clanek in clanky:
        clanek.nakreslise()
        clanek.aPohyb()

    pg.display.update()

    hodiny.tick(60)
    
pg.quit()

Když to spustím tak mi to hlásí

Traceback (most recent call last):
  File "C:/Users/NB/Desktop/Python/snake.py", line 119, in <module>
    had.pohyb()
  File "C:/Users/NB/Desktop/Python/snake.py", line 51, in pohyb
    clanky.append(clanek(self.x,self.y,self.s,self.v,self.barva,1,self.had))
TypeError: 'clanek' object is not callable

Děkuju za to, že jsi dočetl až sem a doufám, že mi pomůžeš.

Nahlásit jako SPAM
IP: 82.145.222.–
Bertik23
~ Anonymní uživatel
2 příspěvky
12. 1. 2019   #2
-
0
-

Aha, tak už vim proč to nešlo, já tam pak měl

for clanek in clanky

a proto to nefungovalo

Nahlásit jako SPAM
IP: 82.145.222.–
Kit+14
Guru
12. 1. 2019   #3
-
+1
-
Zajímavé

#2 Bertik23
Zbav se atributu self.smer, resp. místo 

if u.key == self.UP:
    self.smer = "U"
...

můžeš zadat mnohem jednodušší

self.smer = u.key

Při určování směru pohybu to bude vypadat o něco lépe: 

if self.smer == key.UP:
    self.y -= self.v

Při určování okrajů a rychlosti možná oceníš

self.x = (self.x + sirka_okna) % sirka_okna
self.y = (self.y + vyska_okna) % vyska_okna
self.rychlost = max(0, self.rychlost)
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 42 hostů

Podobná vlákna

Nevi nekdo — založil

Proč to nefunguje — založil Radim Krsička

Proč to nefunguje? — založil mvxmilian

Proč nefunguje BlockRead? — založil Garret Raziel

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý