Fehlercode ich weiß nicht warum (Anfänger)
Verfasst: Samstag 29. Oktober 2022, 08:08
Hallo, ich bin blutiger Anfänger und habe ein kleines Space inveaders spiel programmiert. Es sind ca 180 Zeilen. Tut mir leid dass ich alle hochlade, aber ich weiß einfach nicht was das problem ist. Der Fehlercode lautet: cannot unpack non-iterable function objekt
Also wenn man verliert kann man mit enter neu starten. Wenn man das tut bricht das Spiel aber ab und es kommt der oben genannte Fehler.
Wenn ich dann neu starte ist das Hiscore Dokument leer und es kommt gleich eine Fehlermeldung (invalid literal for int() with base 10: '')
Der Code ist:
import pgzrun
import random
import math
TITLE="AlienBoom"
WIDTH=600
HEIGHT=600
score=0
f=open("hi.txt","r")
gameover=False
music.play('musio')
hiscore=int(f.read())
f.close()
player_ship=Actor("playership")
player_ship.centerx=WIDTH//2
player_ship.bottom=HEIGHT-30
player_speed=10
bullet=Actor("laserred16")
bullet_speed=45
bullet_fire=False
COOLDOWN=False
def reset_enemy_boss():
return (random.randint(0,WIDTH-25),random.randint(-200,-50))
enemy_boss=Actor("ship-1")
enemy_boss.speed=random.uniform(1,3)
enemy_boss.pos=reset_enemy_boss()
print(enemy_boss)
def reset_enemy():
return (random.randint(25,WIDTH-25),random.randint(-200,-50))
enemies=[]
for x in range(10):
enemy=Actor(random.choice(["enemy01","enemy02","enemy03","enemy04","enemy05"]))
enemy.pos=reset_enemy()
enemy.speed=random.uniform(1,3)
enemies.append(enemy)
print(enemies)
#stars
stars=[]
for s in range(100):
stars.append([random.randint(0,WIDTH),random.randint(0,HEIGHT),random.uniform(1,4)])
def update ():
global bullet_fire,score,player_speed,bullet_speed,gameover,hiscore
if gameover and keyboard.RETURN:
gameover=False
score=0
bullet_speed=45
player_speed=10
enemy_boss.speed=random.uniform(1,3)
enemy_boss.pos=reset_enemy_boss
for enemy in enemies:
enemy.pos=reset_enemy()
enemy.speed=random.uniform(1,3)
if bullet.colliderect(enemy_boss):
score+=2
bullet_fire=False
sounds.tot.play()
COOLDOWN=True
enemy_boss.pos=reset_enemy()
for enemy in enemies:
enemy.speed=random.uniform(1,3)
if gameover:
enemy_boss.speed=0
if score>hiscore:
score=hiscore
if player_ship.colliderect(enemy_boss):
gameover=True
if score>hiscore:
f=open("hi.txt","w")
f.write(str(hiscore))
player_speed=0
enemy_boss.speed=0
enemy_boss.pos=reset_enemy_boss()
enemy_boss.speed=0
bullet_speed=0
sounds.explosion.play()
if keyboard.left and player_ship.left>0:
player_ship.centerx-=player_speed
elif keyboard.right and player_ship.right<600:
player_ship.centerx+=player_speed
if not bullet_fire:
bullet.centerx=player_ship.centerx
bullet.bottom=player_ship.bottom
if keyboard.space and bullet_fire==False:
bullet_fire=True
sounds.laser.play()
if bullet_fire:
bullet.bottom-=bullet_speed
if bullet.bottom<0:
bullet_fire=False
if keyboard.up and gameover==False and player_ship.top>0:
player_ship.top-=player_speed
elif keyboard.down and gameover==False and player_ship.bottom<600:
player_ship.bottom+=player_speed
enemy_boss.top+=enemy_boss.speed
enemy_boss.centerx+=math.sin(math.radians(enemy_boss.top%360))*3
if enemy_boss.top>HEIGHT:
enemy_boss.bottom=reset_enemy()
for enemy in enemies:
enemy.top+=enemy.speed
enemy.centerx+=math.sin(math.radians(enemy.top%360))*3
if enemy.top>HEIGHT:
enemy.pos=reset_enemy()
if bullet.colliderect(enemy):
score+=1
bullet_fire=False
sounds.tot.play()
COOLDOWN=True
enemy.pos=reset_enemy()
if player_ship.colliderect(enemy):
gameover=True
f=open("hi.txt","w")
f.write(str(hiscore))
player_speed=0
for enemy in enemies:
enemy.pos=reset_enemy()
enemy.speed=0
bullet_speed=0
sounds.explosion.play()
enemy_boss.pos=reset_enemy_boss
if score>hiscore:
hiscore=score
if enemy_boss.bottom>HEIGHT:
gameover=True
f=open("hi.txt","w")
f.write(str(hiscore))
player_speed=0
for enemy in enemies:
enemy.speed=0
enemy.pos=reset_enemy()
enemy_boss.speed=0
enemy_boss.pos=reset_enemy()
enemy_boss.speed=0
bullet_speed=0
sounds.explosion.play()
#stars
for s in stars:
s[1]+=s[2]
if s[1]>HEIGHT:
s[1]=0
def draw():
screen.blit(images.background, (0,0))
enemy_boss.draw()
for s in stars:
screen.draw.filled_circle(s[:2],s[2],"white")
bullet.draw()
player_ship.draw()
for enemy in enemies:
enemy.draw()
screen.draw.text("Score: "+str(score),(10,10),fontname="pixeled")
screen.draw.text("Hiscore: "+str(hiscore),(45,45),fontname="pixeled")
if gameover:
screen.draw.textbox("press Enter to restart!",(95,280,400,80),color="white",fontname="pixeled")
screen.draw.textbox("GAME OVER",(95,200,400,80),color="red",fontname="pixeled")
pgzrun.go()
Könnt ihr mir sagen was der Fehler ist?
LG PythonAnfänger3007
Also wenn man verliert kann man mit enter neu starten. Wenn man das tut bricht das Spiel aber ab und es kommt der oben genannte Fehler.
Wenn ich dann neu starte ist das Hiscore Dokument leer und es kommt gleich eine Fehlermeldung (invalid literal for int() with base 10: '')
Der Code ist:
import pgzrun
import random
import math
TITLE="AlienBoom"
WIDTH=600
HEIGHT=600
score=0
f=open("hi.txt","r")
gameover=False
music.play('musio')
hiscore=int(f.read())
f.close()
player_ship=Actor("playership")
player_ship.centerx=WIDTH//2
player_ship.bottom=HEIGHT-30
player_speed=10
bullet=Actor("laserred16")
bullet_speed=45
bullet_fire=False
COOLDOWN=False
def reset_enemy_boss():
return (random.randint(0,WIDTH-25),random.randint(-200,-50))
enemy_boss=Actor("ship-1")
enemy_boss.speed=random.uniform(1,3)
enemy_boss.pos=reset_enemy_boss()
print(enemy_boss)
def reset_enemy():
return (random.randint(25,WIDTH-25),random.randint(-200,-50))
enemies=[]
for x in range(10):
enemy=Actor(random.choice(["enemy01","enemy02","enemy03","enemy04","enemy05"]))
enemy.pos=reset_enemy()
enemy.speed=random.uniform(1,3)
enemies.append(enemy)
print(enemies)
#stars
stars=[]
for s in range(100):
stars.append([random.randint(0,WIDTH),random.randint(0,HEIGHT),random.uniform(1,4)])
def update ():
global bullet_fire,score,player_speed,bullet_speed,gameover,hiscore
if gameover and keyboard.RETURN:
gameover=False
score=0
bullet_speed=45
player_speed=10
enemy_boss.speed=random.uniform(1,3)
enemy_boss.pos=reset_enemy_boss
for enemy in enemies:
enemy.pos=reset_enemy()
enemy.speed=random.uniform(1,3)
if bullet.colliderect(enemy_boss):
score+=2
bullet_fire=False
sounds.tot.play()
COOLDOWN=True
enemy_boss.pos=reset_enemy()
for enemy in enemies:
enemy.speed=random.uniform(1,3)
if gameover:
enemy_boss.speed=0
if score>hiscore:
score=hiscore
if player_ship.colliderect(enemy_boss):
gameover=True
if score>hiscore:
f=open("hi.txt","w")
f.write(str(hiscore))
player_speed=0
enemy_boss.speed=0
enemy_boss.pos=reset_enemy_boss()
enemy_boss.speed=0
bullet_speed=0
sounds.explosion.play()
if keyboard.left and player_ship.left>0:
player_ship.centerx-=player_speed
elif keyboard.right and player_ship.right<600:
player_ship.centerx+=player_speed
if not bullet_fire:
bullet.centerx=player_ship.centerx
bullet.bottom=player_ship.bottom
if keyboard.space and bullet_fire==False:
bullet_fire=True
sounds.laser.play()
if bullet_fire:
bullet.bottom-=bullet_speed
if bullet.bottom<0:
bullet_fire=False
if keyboard.up and gameover==False and player_ship.top>0:
player_ship.top-=player_speed
elif keyboard.down and gameover==False and player_ship.bottom<600:
player_ship.bottom+=player_speed
enemy_boss.top+=enemy_boss.speed
enemy_boss.centerx+=math.sin(math.radians(enemy_boss.top%360))*3
if enemy_boss.top>HEIGHT:
enemy_boss.bottom=reset_enemy()
for enemy in enemies:
enemy.top+=enemy.speed
enemy.centerx+=math.sin(math.radians(enemy.top%360))*3
if enemy.top>HEIGHT:
enemy.pos=reset_enemy()
if bullet.colliderect(enemy):
score+=1
bullet_fire=False
sounds.tot.play()
COOLDOWN=True
enemy.pos=reset_enemy()
if player_ship.colliderect(enemy):
gameover=True
f=open("hi.txt","w")
f.write(str(hiscore))
player_speed=0
for enemy in enemies:
enemy.pos=reset_enemy()
enemy.speed=0
bullet_speed=0
sounds.explosion.play()
enemy_boss.pos=reset_enemy_boss
if score>hiscore:
hiscore=score
if enemy_boss.bottom>HEIGHT:
gameover=True
f=open("hi.txt","w")
f.write(str(hiscore))
player_speed=0
for enemy in enemies:
enemy.speed=0
enemy.pos=reset_enemy()
enemy_boss.speed=0
enemy_boss.pos=reset_enemy()
enemy_boss.speed=0
bullet_speed=0
sounds.explosion.play()
#stars
for s in stars:
s[1]+=s[2]
if s[1]>HEIGHT:
s[1]=0
def draw():
screen.blit(images.background, (0,0))
enemy_boss.draw()
for s in stars:
screen.draw.filled_circle(s[:2],s[2],"white")
bullet.draw()
player_ship.draw()
for enemy in enemies:
enemy.draw()
screen.draw.text("Score: "+str(score),(10,10),fontname="pixeled")
screen.draw.text("Hiscore: "+str(hiscore),(45,45),fontname="pixeled")
if gameover:
screen.draw.textbox("press Enter to restart!",(95,280,400,80),color="white",fontname="pixeled")
screen.draw.textbox("GAME OVER",(95,200,400,80),color="red",fontname="pixeled")
pgzrun.go()
Könnt ihr mir sagen was der Fehler ist?
LG PythonAnfänger3007