Mein programmiertes Spiel funktioniert nicht

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
MelonWitcher
User
Beiträge: 1
Registriert: Donnerstag 20. Januar 2022, 14:22

Liebe Programmierer/in ich habe ein spiel in Pygame auf repl.it programiert doch die Ganze zeit kommen Errors aus den Bibiliotheken die verwendet werden. Also wollte ich fragen ob jemand m8ir bitte eine Lösung sagen könnte womit man das spiel zum laufen bringen könnte.

Code: Alles auswählen

import pgzrun
import math

WIDTH = 800
HEIGHT = 600
CENTRE_X = WIDTH / 2
CENTRE_Y = HEIGHT / 2
CENTRE = (CENTRE_X, CENTRE_Y)
FONT_COLOUR = (0, 0, 0)
EGG_TARGET = 20
HERO_START = (200, 300)
ATTACK_DISTANCE = 200
DRAGON_WAKE_TIME = 2
EGG_HIDE_TIME = 2
MOVE_DISTANCE = 5

lives = 3
eggs_colleted = 0
game_over = False
game_complete = False
reset_required = False

easy_lair = {
"dragon": Actor("dragon-asleep", pos=(600, 100)),
"eggs": Actor("one-egg", pos=(450, 100)),
"egg_count": 1,
"egg_hidden": False,
"egg_hide_counter": 0,
"sleep_length": 10,
"sleep_counter": 0,
"wake_counter": 0,
}

medium_lair = {
"dragon": Actor("dragon-asleep", pos=(600, 300)),
"eggs": Actor("two-egg", pos=(450, 300)),
"egg_count": 2,
"egg_hidden": False,
"egg_hide_counter": 0,
"sleep_length": 7,
"sleep_counter": 0,
"wake_counter": 0,
}

hard_lair = {
"dragon": Actor("dragon-asleep", pos=(600, 500)),
"eggs": Actor("three-egg", pos=(450, 500)),
"egg_count": 3,
"egg_hidden": False,
"egg_hide_counter": 0,
"sleep_length": 4,
"sleep_counter": 0,
"wake_counter": 0,
}

lairs = [easy_lair, medium_lair, hard_lair]
hero = Actor("hero", pos=HERO_START)

def draw():
global lairs, eggs_collected, lives, game_complete
screen.clear()
screen.blit("dungeon", (0, 0))
if game_over:
screen.draw.text("Game Over!", fontsize=60, center=CENTRE, color=FONT_COLOUR)
elif game_complete:
screen.draw.text("You Win!", fontsize=60, center=CENTRE, color=FONT_COLOUR)
else:
hero.draw()
draw_lairs(lairs)
draw_counters(eggs_collected, lives)

def draw_lairs(lairs_to_draw):
for lair in lairs_to_draw:
lair["dragon"].draw()
if lair["egg_hidden"] is False:
lair["eggs"].draw()
def draw_counters(eggs_collected, lives):
screen.blit("egg_count", (0, Height - 30))
screen.draw.text(str(eggs_colleted),
fontsize=40,
pos=(30, Height - 30),
color=FONT_COLOUR)
screen.draw.blit("life-count", (60, Height - 30))
screen.draw.text(str(lives),
fontsize=40,
pos=(90, Height - 30),
color=FONT_COLOUR)
screen.draw.text(str(lives),
fontsize=40,
pos=(90, Height - 30),
color=FONT_COLOUR)

def update():
if keyboard.right:
hero.x += MOVE_DISTANCE
if hero.x > WIDTH:
hero.x = WIDTH
elif keyboard.left:
hero.x -= MOVE_DISTANCE
if hero.x < 0:
hero.x = 0
elif keyboard.down:
hero.y += MOVE_DISTANCE
if hero.y > HEIGHT:
hero.y = HEIGHT
elif keyboard.up:
hero.y -= MOVE_DISTANCE
if hero.y < 0:
hero.y = 0
check_for_collisions()

def update_lairs():
global lairs, hero, lives
for lair in lairs:
if lair["dragon"].image == "dragon-asleep":
update_sleeping_dragon(lair)
elif lair["dragon"].image == "dragon-awake":
update_awake_dragon(lair)
update_egg(lair)

clock.schedule_interval(update_lairs, 1)

def update_sleeping_dragon(lair):
if lair["sleep_counter"] >= lair["sleep_lenght"]:
lair["dragon"].image = "dragon-awake"
lair["sleep_counter"] = 1
else:
lair["sleep_counter"] += 1

def update_egg(lair):
if lair["egg_hidden"] is True:
if lair["egg_hidden_counter"] >= EGG_HIDE_TIME:
lair["egg_hidden"] = False
lair["egg_hide_counter"] = 0
else:
lair["egg_hide_counter"] += 1

def check_for_collisions():
global lairs, eggs_collected, lives, reset_required, game_complete
for lair in lairs:
if lair["egg_hidden"] is False:
check_for_egg_collision(lair)
if lair["dragon"].image == "dragon_awake" and reset_requierd is False:
check_for_dragon_collision(lair)

def check_for_dragon_collision(lair):
x_distance = hero.x - lair["dragon"].x
y_distance = hero.y - lair["drragon"].y
distance = math.hypot(x_distance, y_distance)
if distance < ATACK_DISTANCE:
handle_dragon_collision()

def handle_dragon_collision():
global reset_required
reset_requierd = True
animate(hero, pos=HERO_START, on_finnished=subtract_life)

def check_for_egg_collision(lair):
global eggs_collected, game_complete
if hero.colliderect(lair["eggs"]):
lair["eggs_hidden"] = True
eggs_collected += lair["egg_count"]
if eggs_collected >= EGG_TARGET:
game_complete = true

def subtract_life():
global lives, reset_required, game_over
lives -= 1
if lives == 0:
game_over = True
reset_required = False
pgzrun.go()
math.go()]
import pgzrun
import math
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@MelonWitcher,

Das ist so kein lauffähiger Python-Code, da du keinerlei Einrückung verwendest. Hast du das selbst programmiert, oder von woanders kopiert?
Ich könnte falsch liegen, aber ich bin mir nicht sicher ob man pygame überhaupt in repl.it verwenden kann.

Außerdem kann dir keiner sagen wie die Errors behoben werden können, wenn du sie nicht hier reinschreibst.
Benutzeravatar
__blackjack__
User
Beiträge: 13064
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@MelonWitcher: Importe gehören an den Anfang, und auf gar keinen Fall ganz ans Ende wo sie ja überhaupt keinen Sinn mehr machen wenn danach kein Code mehr folgt, der das importierte überhaupt verwendet.

Und die ganzen ``global``-Deklarationen sollte es nicht geben. Das scheint bei einigen Autoren, insbesondere im Pygame-Zero-Bereich, so gar kein Problem zu sein Anfängern solchen Code zu vorzuleben, wo in so ziemlich jeder Funktion alles mögliche als ``global`` deklariert wird, aber ich für meinen Teil habe sehr wenig Motivation in *so* einem Code dann Fehler zu suchen. Ich verspüre dann eher den Drang mit dem Autor der solche Tutorials schreibt, mal ein ernstes Wort zu wechseln. Naja eigentlich nur den Code unter die Nase halten, tief Luft zu holen und „ERNSTHAFT!?“ fragend zu brüllen, und dabei in einer Mischung aus anklagend und „Du hast doch nicht alle Tassen im Schrank“ streng zu schauen. Naja, jeder wie er mag. 😈
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten