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)