Seite 1 von 1

Manuell Lebensanzahl wählen

Verfasst: Sonntag 7. Februar 2021, 16:14
von _Joschi_
Hallo ich bin ein ziemlicher Python-Anfänger. Ich habe folgenden Code zusammengebastelt und habe nun das Problem, dass das Programm abstürzt, seitdem ich versucht habe dem Spieler die möglichkeit zu geben selbst auszuwählen wie viele Leben er haben möchte.

Code: Alles auswählen

import pygame
import sys

class spieler:
	def __init__(self, name, farbe, startX, startY, leben):
		self.name = name
		self.farbe = farbe
		self.x = startX
		self.y = startY
		self.startX = startX
		self.startY = startY
		self.xBeweg = 0
		self.yBeweg = 0
		self.leben = leben
		self.start = True
	def moveDrawCol(self):
		self.x += self.xBeweg
		self.y += self.yBeweg

		if self.x < 0 or self.x >= 899 or self.y < 0 or self.y >= 899:
			self.leben -= 1
			return False
		farbe = screen.get_at((self.x, self.y))
		if (farbe == (0,150,255) or farbe == (255,150,0)) and self.start != True:
			self.leben -= 1
			return False
		else:
			screen.set_at((self.x, self.y), self.farbe)
			return True
	def richtung(self, xBeweg, yBeweg):
		self.start = False
		self.xBeweg = xBeweg
		self.yBeweg = yBeweg
	def richtungGeben(self):
		return (self.xBeweg,self.yBeweg)
	def lebenGeben(self):
		return self.leben
	def reset(self):
		self.start = True
		self.x = self.startX
		self.y = self.startY
		self.xBeweg = 0
		self.yBeweg = 0
	def nameGeben(self):
		return self.name

def textObjekt(text, font):
	textFlaeche = font.render(text, True, (255,255,255))
	return textFlaeche, textFlaeche.get_rect()

print("Name des Spielers mit den WASD?")
name = input()
print("Name des Spielers mit Pfeiltasten?")
name = input()
print("Anzahl der Leben?")
leben = input()
print("Okay, los geht's!")
sp1 = spieler(name, (255,150,0), 250, 450, leben)
sp2 = spieler(name, (0,150,255), 650, 450, leben)

pygame.init()
clock = pygame.time.Clock()
font = pygame.font.SysFont('calibri', 40)
screen = pygame.display.set_mode([900,900])

while sp1.lebenGeben() > 0 and sp2.lebenGeben() > 0:
	go = True
	while go:
		for event in pygame.event.get():
			if event.type == pygame.QUIT: sys.exit()
			if event.type == pygame.KEYDOWN:
				if event.key == pygame.K_UP and sp2.richtungGeben()[1] != 1:
					sp2.richtung(0, -1)
				elif event.key == pygame.K_RIGHT and sp2.richtungGeben()[0] != -1:
					sp2.richtung(1, 0)
				elif event.key == pygame.K_DOWN and sp2.richtungGeben()[1] != -1:
					sp2.richtung(0, 1)
				elif event.key == pygame.K_LEFT and sp2.richtungGeben()[0] != 1:
					sp2.richtung(-1, 0)

				if event.key == pygame.K_w and sp1.richtungGeben()[1] != 1:
					sp1.richtung(0, -1)
				elif event.key == pygame.K_d and sp1.richtungGeben()[0] != -1:
					sp1.richtung(1, 0)
				elif event.key == pygame.K_s and sp1.richtungGeben()[1] != -1:
					sp1.richtung(0, 1)
				elif event.key == pygame.K_a and sp1.richtungGeben()[0] != 1:
					sp1.richtung(-1, 0)

		if sp1.moveDrawCol() == False or sp2.moveDrawCol() == False:
			screen.fill((0,0,0))
			sp1.reset()
			sp2.reset()
			go = False

		textGrund,textKasten = textObjekt(sp1.nameGeben() + ": " + str(sp1.lebenGeben()) + "     " + sp2.nameGeben() + ": " + str(sp2.lebenGeben()), font)
		textKasten.center = ((450,40))
		screen.blit(textGrund, textKasten)

		pygame.display.update()
		clock.tick(250)

if sp1.lebenGeben() == 0:
	name = sp2.nameGeben()
else:
	name = sp1.nameGeben()

textGrund, textKasten = textObjekt(name + " hat gewonnen", font)
textKasten.center = ((450,450))
screen.blit(textGrund, textKasten)

pygame.display.update()
pygame.time.wait(3000)
Konkret geht es hier um diese Zeilen:

Code: Alles auswählen

print("Name des Spielers mit den WASD?")
name = input()
print("Name des Spielers mit Pfeiltasten?")
name = input()
print("Anzahl der Leben?")
leben = input()
print("Okay, los geht's!")
sp1 = spieler(name, (255,150,0), 250, 450, leben)
sp2 = spieler(name, (0,150,255), 650, 450, leben)
Jede Hilfe ist willkommen und vielen Dank im voraus.
_Joschi_

Re: Manuell Lebensanzahl wählen

Verfasst: Sonntag 7. Februar 2021, 16:32
von __deets__
Und wie genau sieht die Fehlermeldung aus? Wenn ich raten muss: du liest Leben in Form eines Strings ein, aber rechnest damit als ob es eine Zahl waere. Du solltest das in eine Ganzzahl wandeln. Und gegen Fehleingaben schuetzen. Und eigentlich auch innerhalb von pygame abfragen, in Form eines Dropdowns oder einer Auswahl per Knopf.

Re: Manuell Lebensanzahl wählen

Verfasst: Sonntag 7. Februar 2021, 16:33
von Sirius3
Das Programm stürzt ja nicht einfach nur ab, sondern gibt eine ausführliche Fehlermeldung aus, anhand derer Du den Fehler erkennen mußt. Hier also, dass `leben` eine Zahl sein muß, Du aber einen String hast. Folglich mußt Du die Eingabe in eine Zahl umwandeln.
Klassen schreibt man nach Konvention mit einem großen Anfangsbuchstaben: Spieler.
Variablennamen und Methoden schreibt man dagegen komplett klein. Benutze keine Abkürzungen. Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs.
Die Methoden lebenGeben und nameGeben sind überflüssig, weil man auch direkt auf die Attribute leben und name zugreifen kann.

Alles ab dem `print´ gehört in eine Funktion, die man üblicherweise `main` nennt. Da die Funktion etwas lang wird, solltest Du den Code noch in mehrere sinnvolle Funktionen aufteilen.