spiel

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Tim0123
User
Beiträge: 24
Registriert: Mittwoch 10. Februar 2021, 14:35

hi, warum funktioniert dieser code nicht ?

Code: Alles auswählen

import pygame
import sys

pygame.init()

hintergrund = pygame.image.load("Grafiken/hintergrund.png")
screen = pygame.display.set_mode([1200, 595])
clock = pygame.time.Clock()
pygame.display.set_caption("Pygame Spiel")

stehen = pygame.image.load("Grafiken/stand.png")
sprung = pygame.image.load("Grafiken/sprung.png")
rechtsGehen = [pygame.image.load("Grafiken/rechts1.png"),pygame.image.load("Grafiken/rechts2.png"),pygame.image.load("Grafiken/rechts3.png"),pygame.image.load("Grafiken/rechts4.png"),pygame.image.load("Grafiken/rechts5.png"),pygame.image.load("Grafiken/rechts6.png"),pygame.image.load("Grafiken/rechts7.png"),pygame.image.load("Grafiken/rechts8.png")]
linksGehen = [pygame.image.load("Grafiken/links1.png"),pygame.image.load("Grafiken/links2.png"),pygame.image.load("Grafiken/links3.png"),pygame.image.load("Grafiken/links4.png"),pygame.image.load("Grafiken/links5.png"),pygame.image.load("Grafiken/links6.png"),pygame.image.load("Grafiken/links7.png"),pygame.image.load("Grafiken/links8.png")]

def zeichnen(liste):
	global schritteLinks, schritteRechts

	screen.blit(hintergrund, (0, 0))

	if schritteRechts == 63:
		schritteRechts = 0
		
	if schritteLinks == 63:
		schritteLinks = 0

	if liste[0]:
		screen.blit(linksGehen[schritteLinks//8], (x, y))

	if liste[1]:
		screen.blit(rechtsGehen[schritteRechts//8], (x, y))

	if liste[2]:
		screen.blit(stehen, (x, y))

	if liste[3]:
		screen.blit(sprung, (x, y))

	pygame.display.update()

y = 440
x = 300
geschw = 5
breite = 40
hoehe = 80

linkeWand = pygame.draw.rect(screen, (0, 0, 0), (-2, 0, 2, 600), 0)
rechteWand = pygame.draw.rect(screen, (0, 0, 0), (1201, 0, 2, 600), 0)

go = True
sprungvar = -16
#[links, rechts, stand, sprung]
richtg = [0, 0, 0, 0]
schritteRechts = 0
schritteLinks = 0
while go:
	for event in pygame.event.get():
		if event.type == pygame.QUIT: 
			sys.exit()

	spielerRechteck = pygame.Rect(x, y, 40, 80)
	gedrueckt = pygame.key.get_pressed()
	richtg = [0, 0, 1, 0] 

	if gedrueckt[pygame.K_UP] and sprungvar == -16:
		sprungvar = 15
	if gedrueckt[pygame.K_RIGHT] and not spielerRechteck.colliderect(rechteWand):
		x += geschw
		richtg = [0, 1, 0, 0]
		schritteRechts += 1
	if gedrueckt[pygame.K_LEFT] and not spielerRechteck.colliderect(linkeWand):
		x -= geschw
		richtg = [1, 0, 0, 0]
		schritteLinks += 1

	if sprungvar >= -15:
		richtg = [0, 0, 0, 1]
		n = 1
		if sprungvar < 0:
			n = -1
		y -= (sprungvar**2)*0.17*n
		sprungvar -= 1

	if richtg[2] or richtg[3]:
		schritteRechts = 0
		schritteLinks = 0


	zeichnen(richtg)
	clock.tick(60)stehen = pygame.image.load("Grafiken/stand.png")
Benutzeravatar
__blackjack__
User
Beiträge: 13199
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Tim0123: Weil der Compiler einen Syntaxfehler meldet, weil das syntaktisch fehlerhaft ist.

Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Und Funktionen bekommen alles was die ausser Konstanten benötigen als Argument(e) übergeben. Vergiss ``global``.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase). Verwende keine kryptischen Abkürzungen und keine supergenerischen Namen wie `liste` wo nicht wirklich jede beliebige Liste funktioniert.

Python hat einen eigenen Datentyp für Wahrheitswerte, da sollte man nicht 0 und 1 für missbrauchen, denn dann ist sich der Leser nie sicher ob da nicht auch eine 2 oder eine andere Zahl möglich ist. Diese Liste für die Richtung(en) ist auch komisch weil da widersprüchliche Werte enthalten sein könnten denn nach links und nach rechts bewegen und stehen schliessen sich gegenseitig aus. Die Datenstruktur erlaubt aber unsinnigerweise alle Kombinationen dieser drei Zustände die eigentlich *ein* Zustand sind. Das ist eine Liste zu speichern wo dann magische Indexwerte die Bedeutung der einzelnen Werte angeben ist auch alles andere als lesbar und verständlich.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Antworten