Punktzahl angeben bei Pongspiel

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
AaBbCcDdEeFF
User
Beiträge: 24
Registriert: Donnerstag 21. März 2019, 17:50

Freitag 12. April 2019, 18:48

Hallöchen, habe ein pong spiel pogrammiert und will jtz eine punktezahl angeben die jedesmal um 1 gesteigert wird wenn der ball den schläger berührt, weiß leider überhaupt garnicht wie ich das umsetzten soll deswegen kann ich keine anfänglichen codes verschicken, kann mir da jmd helfen?
Danke im vorraus
MfG AaBbCcDdEeFf
Sirius3
User
Beiträge: 10364
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 12. April 2019, 19:26

Na, wenn Du schon ein Pongspiel programmiert hast, dann kannst Du das ja zeigen und auch die Stelle, an der Du die Punktezahl erhöhen willst, dann kann man Dir da sagen, dass es

Code: Alles auswählen

punktezahl += 1
heißen müßte.
AaBbCcDdEeFF
User
Beiträge: 24
Registriert: Donnerstag 21. März 2019, 17:50

Freitag 12. April 2019, 21:28

@Sirius3
ok willst du jtz den ganzen code? ...ist ja eig egal wo der code fürs erhöhen rein kommt, also ich will halt das wenn der ball den schläger berührt die punktzahl um 1 steigt...wenn du mir sagst von was ich dir den code geben soll, dann zeig ich ihn dir gerne...
Sirius3
User
Beiträge: 10364
Registriert: Sonntag 21. Oktober 2012, 17:20

Samstag 13. April 2019, 12:10

Die Frage ist entweder trivial, weil an der Stelle, wo der Ball am Schläger abprallt, auch die Stelle ist, wo man eine Variable um 1 erhöht, oder es ist nicht so einfach, dann kann man ohne Code nicht helfen.
AaBbCcDdEeFF
User
Beiträge: 24
Registriert: Donnerstag 21. März 2019, 17:50

Samstag 13. April 2019, 18:01

Sirius3 hat geschrieben:
Samstag 13. April 2019, 12:10
Die Frage ist entweder trivial, weil an der Stelle, wo der Ball am Schläger abprallt, auch die Stelle ist, wo man eine Variable um 1 erhöht, oder es ist nicht so einfach, dann kann man ohne Code nicht helfen.
ok jut soll ichs hier rein schicken oder lieber screenshot und hochladen?
AaBbCcDdEeFF
User
Beiträge: 24
Registriert: Donnerstag 21. März 2019, 17:50

Samstag 13. April 2019, 18:42

AaBbCcDdEeFF hat geschrieben:
Samstag 13. April 2019, 18:01
Sirius3 hat geschrieben:
Samstag 13. April 2019, 12:10
Die Frage ist entweder trivial, weil an der Stelle, wo der Ball am Schläger abprallt, auch die Stelle ist, wo man eine Variable um 1 erhöht, oder es ist nicht so einfach, dann kann man ohne Code nicht helfen.
ok jut soll ichs hier rein schicken oder lieber screenshot und hochladen?
ich schicks einfach hiere gleich rein...ist einfacher...
AaBbCcDdEeFF
User
Beiträge: 24
Registriert: Donnerstag 21. März 2019, 17:50

Samstag 13. April 2019, 18:43

Soo das hab ich und es funktoniert prima, aber möchte halt das oben in der mitte die punktzahl erhöht wird

Code: Alles auswählen

import sys
import random
import pygame
import mixer 

x = 500
y = 500

sbreite = 100
shoehe = 15

sx = 200
sy = 450

bx = int(x/2)
by = int(y/2)

brad = 15

speed = 0

bxspeed = 1
byspeed = -2
leben = 1

punkte = 0

pygame.init()
pygame.mixer.init()
pygame.display.set_caption("Pong-Pong")
screen = pygame.display.set_mode([x,y])
screen.fill((0,0,0))

pygame.mixer.music.load(r"C:\Users\Franz\Desktop\test\j\Bicycle - Pokémon Omega Ruby & Alpha Sapphire Music Extended.mp3")
pygame.mixer.music.set_volume(0.30)
pygame.mixer.music.play()


pygame.draw.circle(screen, (255,255,0), (bx,by), brad, 0)
pygame.draw.rect(screen, (255,40,0), (sx,sy,sbreite,shoehe), 0)
pygame.display.flip()

def sblock():
	global speed 
	if sx <= 0 or sx >= x-sbreite:
		speed = 0

def ballbewegung():
	global bx,by
	bx += bxspeed
	by += byspeed

def reset():
	global byspeed,bxspeed,leben,bx,by,sx,sy,speed
	sx = 200
	sy = 450

	bx = int(x/2)
	by = int(y/2)

	speed = 0
	bxspeed = random.randint(-2,2)
	if bxspeed == 0:
		bxspeed = 1
	byspeed = random.randint(-2,2)
	if byspeed == 0:
		byspeed = 2
	screen.fill((0,0,0))
	pygame.draw.circle(screen, (255,255,0), (bx,by), brad, 0)
	pygame.draw.rect(screen, (255,40,0), (sx,sy,sbreite,shoehe), 0)
	pygame.display.flip()
	pygame.time.wait(1000)

def ballblock():
	global byspeed,bxspeed,leben
	if by-brad <= 0:
		byspeed *= -1
	if bx-brad <= 0:
		bxspeed *= -1
	if bx+brad >= x:
		bxspeed *= -1
	if by >= 435 and by <= 440:
		if bx >= sx-15 and bx <= sx+sbreite+15:
			byspeed *= -1
		else:
			leben -= 1
			reset()

def sbewegung():
	global sx
	sx += speed

while leben>0:
	for event in pygame.event.get():
		if event.type == pygame.QUIT: sys.exit()
		if event.type == pygame.KEYDOWN:
			if event.key == pygame.K_LEFT:
				speed = -2
			if event.key == pygame.K_RIGHT:
				speed = 2

	screen.fill((0,0,0))
	sbewegung()
	sblock()
	pygame.draw.rect(screen, (255,40,0), (sx,sy,sbreite,shoehe), 0)
	ballbewegung()
	ballblock()
	pygame.draw.circle(screen, (255,255,0), (bx,by), brad, 0)
	pygame.display.flip()
	pygame.time.wait(5)

print("haha verloren")
Benutzeravatar
ThomasL
User
Beiträge: 764
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Sonntag 14. April 2019, 08:41

Du stellst doch schon irgendwo fest, dass der Ball vom Schläger abprallen soll, wenn gewisse Bedingungen erfüllt sind.
An der Stelle zählst du dann hoch.
Zur Darstellung des Punktestandes auf dem Bildschirm schau mal hier rein
viewtopic.php?t=43111
da steht irgendwo Code von mir.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
__blackjack__
User
Beiträge: 4048
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Sonntag 14. April 2019, 09:56

@AaBbCcDdEeFF: Ich würde als erstes ``global`` loswerden. Auf Modulebene gehört nur Code der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Und Funktionen/Methoden sollten alles was sie ausser Konstanten verwenden, als Argument(e) übergeben bekommen. Im Grunde hast Du im ganzen Programm keine einzige richtige Funktion, sondern missbrauchst Funktionen als eine Art Sprungmarken.
“Programmieren ist ein Hobby, bei dem es einen riesigen Baumarkt mit quasi jedem Bauteil und Werkzeug und fast immer kostenlos gibt. Ob man deswegen in der Lage ist einen Kölner Dom zu bauen ist eine andere Frage. Arbeit steckt auf jeden Fall drin ;).” — Greebo, forum.ubuntuusers.de
AaBbCcDdEeFF
User
Beiträge: 24
Registriert: Donnerstag 21. März 2019, 17:50

Sonntag 14. April 2019, 10:28

ThomasL hat geschrieben:
Sonntag 14. April 2019, 08:41
Du stellst doch schon irgendwo fest, dass der Ball vom Schläger abprallen soll, wenn gewisse Bedingungen erfüllt sind.
An der Stelle zählst du dann hoch.
Zur Darstellung des Punktestandes auf dem Bildschirm schau mal hier rein
viewtopic.php?t=43111
da steht irgendwo Code von mir.
ok gut danke ich schau ma rein...
AaBbCcDdEeFF
User
Beiträge: 24
Registriert: Donnerstag 21. März 2019, 17:50

Sonntag 14. April 2019, 10:32

__blackjack__ hat geschrieben:
Sonntag 14. April 2019, 09:56
@AaBbCcDdEeFF: Ich würde als erstes ``global`` loswerden. Auf Modulebene gehört nur Code der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Und Funktionen/Methoden sollten alles was sie ausser Konstanten verwenden, als Argument(e) übergeben bekommen. Im Grunde hast Du im ganzen Programm keine einzige richtige Funktion, sondern missbrauchst Funktionen als eine Art Sprungmarken.
also alle globals in funtionen um schreiben? Wie stell ich das am besten an? haste da vlt nen link wo das erklärt wird?
Benutzeravatar
ThomasL
User
Beiträge: 764
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Sonntag 14. April 2019, 10:38

Code: Alles auswählen

x = 500
y = 500
sbreite = 100
shoehe = 15
sx = 200
sy = 450
bx = int(x/2)
by = int(y/2)
brad = 15
speed = 0
bxspeed = 1
byspeed = -2
leben = 1
Die Bezeichner der Variablen solltest du überdenken, da blickt auf den ersten Blick ja keiner durch.
Selbst du in 3 Wochen nicht mehr. Wie wäre es z.B. so:

Code: Alles auswählen

bildschirm_breite = 500
bildschirm_hoehe = 500
schlaeger_breite = 100
schlaeger_hoehe = 15
schlaeger_xpos = 200
schlaeger_ypos = 450
ball_xpos = int(bildschirm_breite / 2)
ball_ypos = int(bildschirm_hoehe / 2)
ball_durchmesser = 15
schlaeger_speed = 0
ball_xspeed = 1
ball_yspeed = -2
anzahl_leben = 1
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
AaBbCcDdEeFF
User
Beiträge: 24
Registriert: Donnerstag 21. März 2019, 17:50

Sonntag 14. April 2019, 10:52

ThomasL hat geschrieben:
Sonntag 14. April 2019, 10:38

Code: Alles auswählen

x = 500
y = 500
sbreite = 100
shoehe = 15
sx = 200
sy = 450
bx = int(x/2)
by = int(y/2)
brad = 15
speed = 0
bxspeed = 1
byspeed = -2
leben = 1
Die Bezeichner der Variablen solltest du überdenken, da blickt auf den ersten Blick ja keiner durch.
Selbst du in 3 Wochen nicht mehr. Wie wäre es z.B. so:

Code: Alles auswählen

bildschirm_breite = 500
bildschirm_hoehe = 500
schlaeger_breite = 100
schlaeger_hoehe = 15
schlaeger_xpos = 200
schlaeger_ypos = 450
ball_xpos = int(bildschirm_breite / 2)
ball_ypos = int(bildschirm_hoehe / 2)
ball_durchmesser = 15
schlaeger_speed = 0
ball_xspeed = 1
ball_yspeed = -2
anzahl_leben = 1
ja ok stimmt, ist besser so...danke...mach pygame noch nicht so lange deswegen wirst du mehr fehler sehn...
Benutzeravatar
__blackjack__
User
Beiträge: 4048
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Sonntag 14. April 2019, 13:10

@AaBbCcDdEeFF: Funktionen sollten eigentlich in jedem Grundlagentutorial enthalten sein. Kein ``global`` erzwingt dann halt automatisch das man alles ausser Konstanten als Argumente übergeben muss. Und sie können dann nichts ausserhalb verändern – dafür gibt es einen Rückgabewert, der auch ein Tupel bestehend aus mehr als einem Wert sein kann.
“Programmieren ist ein Hobby, bei dem es einen riesigen Baumarkt mit quasi jedem Bauteil und Werkzeug und fast immer kostenlos gibt. Ob man deswegen in der Lage ist einen Kölner Dom zu bauen ist eine andere Frage. Arbeit steckt auf jeden Fall drin ;).” — Greebo, forum.ubuntuusers.de
AaBbCcDdEeFF
User
Beiträge: 24
Registriert: Donnerstag 21. März 2019, 17:50

Sonntag 14. April 2019, 18:54

__blackjack__ hat geschrieben:
Sonntag 14. April 2019, 13:10
@AaBbCcDdEeFF: Funktionen sollten eigentlich in jedem Grundlagentutorial enthalten sein. Kein ``global`` erzwingt dann halt automatisch das man alles ausser Konstanten als Argumente übergeben muss. Und sie können dann nichts ausserhalb verändern – dafür gibt es einen Rückgabewert, der auch ein Tupel bestehend aus mehr als einem Wert sein kann.
gut danke ich schau ma was es da gibts, danke aufjedenfall für die tips...
Antworten