Problém se seznamy – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Problém se seznamy – Python – Fórum – Programujte.comProblém se seznamy – Python – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Ahoj30
Návštěvník
9. 4. 2011   #1
-
0
-

Zkoušel jsem si naprogramovat hru (roboti přichází) podle jedné stránky. Bohužel mi to moc nešlo a i s vaší ochotou a trpělivostí se mnou jsem hru nikdy nedodělal. Zkouším teď hru znovu vytvořit z velké části podle svých způsobů (bez OOP, které vůbec neumím a příliš nechápu). Sice jsem se dostal dál než kdybych to dělal podle těch stránek, ale ne o moc a opět bych potřeboval vědět, kde jsem udělal chybu.
Mám seznam, kde jsou uloženy souřadnice a tělo (čtverec) robotů, kteří za mnou chodí. Když se mě robot dotkne hra končí.
Pak procházím seznam robotů a kontroluju každou souřadnici s dalšími. Když jsou souřadnice stejné jako ty druhé vymažu souřadnice i s tělem robota ze seznamu. Můj program to ještě kontrolovat dokáže, ale už mi nechce smazat souřadnice a tělo robota ze seznamu a vše končí chybovou hláškou :

Traceback (most recent call last):

File "C:/programy/kulieka3.2.py", line 106, in <module>
srazkaR()
File "C:/programy/kulieka3.2.py", line 88, in srazkaR
roX2 = round(rtelo2[0])
TypeError: a float is required


Tady je ten program:
from livewires import*

import random
import time
begin_graphics(width = 800, height = 600)
allow_moveables()

def vyrobHrace():
global kruh, hx, hy
hx = random.randint(50, 620)
hy = random.randint(50, 480)
kruh = circle(hx, hy, 6.5, filled = 1)

def posunHrace():
global kruh, hx, hy
klavesy = keys_pressed()

if "a" in klavesy and hx > 7:
hx = hx - 1.3

if "d" in klavesy and hx < 800:
hx = hx + 1.3

if "s" in klavesy and hy > 6.5:
hy = hy - 1.3

if "w" in klavesy and hy < 600:
hy = hy + 1.3

move_to(kruh, hx, hy)


def vyrobRobota():
global rx, ry, robot, seznam, tx
seznam = []
for x in range(3):
rx = random.randint(50, 620)
ry = random.randint(50, 480)
robot = box(rx, ry, rx + 20, ry + 20)
seznam.append([rx, ry, robot])


def posunRobota():
global rx, ry, robot, hx, hy, seznam
rB = 0
for Sx, Sy, rT in seznam:
if Sx > hx:
Sx = Sx - 1
seznam[rB] = Sx, Sy, rT


if Sx < hx:
Sx = Sx + 1
seznam[rB] = Sx, Sy, rT



if Sy > hy:
Sy = Sy - 1
seznam[rB] = Sx, Sy, rT



if Sy < hy:
Sy = Sy + 1
seznam[rB] = Sx, Sy, rT

rB = rB + 1

move_to(rT, Sx, Sy)

def srazka():
global hx, hy, kruh, ry, rx, robot, seznam, konec
zaokrHx = round(hx)
zaokrHy = round(hy)
for Sx,Sy, rT in seznam:
if zaokrHx == round(Sx) and zaokrHy == round(Sy):
konec = 0

def srazkaR():
global seznam, rx, ry, hx, hy, robot
delka = len(seznam)
for x in range(delka):
rtelo = seznam[x]
roX = round(rtelo[0])
roY = round(rtelo[1])
for z in range(delka):
rtelo2 = seznam[z]
roX2 = round(rtelo2[0])
roY2 = round(rtelo2[1])
if roX == roX2 and roY == roY2 and x != z:
seznam[x] = "rozbit"






vyrobHrace()
vyrobRobota()

konec = 1
while konec:
posunHrace()
posunRobota()
srazka()
srazkaR()
time.sleep(0.01)

Nahlásit jako SPAM
IP: 78.45.59.–
Reklama
Reklama
nervak0
Věrný člen
10. 4. 2011   #2
-
0
-

Když máš kód, který v tom seznamu předpokládá položky ve tvaru [x,y,box] a najednou do něj nacpeš položku "rozbit", tak ti to při dalším průchodu samozřejmě spadne.

Děláš pořád úplně hloupé chyby, nauč se ty základy, na kterých pak budeš stavět.

Nahlásit jako SPAM
IP: 213.211.51.–
sputnikone+1
Věrný člen
10. 4. 2011   #3
-
0
-

To Ahoj3 : Tvé způsoby jsou špatné a plné zlozvyků (global, nepoužívání elif a else, apod.). Dej na nervaka a nauč se základy.

Nahlásit jako SPAM
IP: 94.112.92.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×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, 25 hostů

Podobná vlákna

Problém se seznamy — založil watterma

Seznamy — založil

Ty seznamy... — založil tom9k

Seznamy v databázi — založil VelkyBubak

Seznamy v seznamech — založil Al

 

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