Ich mache das Pong-Spiel. Aber statt 2 Spielern mache ich es für 4 (eins auf jeder Seite des Bildschirms). Ich muss den Ball nach dem Zufallsprinzip "wählen", in welche Richtung er gehen muss.pygame: Zufällige Richtung eines Balles zu Beginn des Spiels
import pygame
import random
class Ball(object):
@classmethod
def init(cls, SCREEN_WIDTH, SCREEN_HEIGHT):
cls.radius = 20
cls.centerx = SCREEN_WIDTH*0.5
cls.centery = SCREEN_HEIGHT*0.5
cls.rect = pygame.Rect(cls.centerx - cls.radius,
cls.centery - cls.radius,
cls.radius * 2,
cls.radius * 2)
# x , y
cls.direction = [random.choice([1, -1]), random.choice([1, -1])]
cls.speed = [5, 8] # x, y
# left, right, top, bottom
cls.hit_edge = [False, False, False, False]
@classmethod
def update(cls, player1, player2, player3, player4, SCREEN_WIDTH,
SCREEN_HEIGHT):
cls.centerx += cls.direction[0] * cls.speed[0]
cls.centery += cls.direction[1] * cls.speed[1]
cls.rect.center = (cls.centerx, cls.centery)
#detects if someone losses
if cls.rect.left <= 0:
cls.hit_edge[0] = True
elif cls.rect.right >= SCREEN_WIDTH-1:
cls.hit_edge[1] = True
elif cls.rect.top <= 0:
cls.hit_edge[2] = True
elif cls.rect.bottom >= SCREEN_HEIGHT-1:
cls.hit_edge[3] = True
#detects collision between players & the ball
if cls.rect.colliderect(player1.rect):
cls.direction[0] = 1
cls.up_speed()
elif cls.rect.colliderect(player2.rect):
cls.direction[0] = -1
cls.up_speed()
elif cls.rect.colliderect(player3.rect):
cls.direction[1] = 1
cls.up_speed()
elif cls.rect.colliderect(player4.rect):
cls.direction[1] = -1
cls.up_speed()
@classmethod
def up_speed(cls):
cls.speed[0] += random.uniform(0, 0.25)
cls.speed[1] += random.uniform(0, 0.25)
@classmethod
def render(cls, SCREEN, color):
pygame.draw.circle(SCREEN, color, cls.rect.center, cls.radius, 0)
Rechnung zu nehmen: Ich hatte die Idee, eine „0“ in jedem random.choice() hinzuzufügen, obwohl, wenn ich am Anfang dieses einzige Funktion zu tun, dann wird es nicht in der Lage sein, sich zu bewegen die Achse wo die "0" ist. Auch ich habe zwei Arten von Geschwindigkeiten in X und Y, könnte gelöst werden, indem Sie eine "0.1" in random.choice(), aber dies würde machen, wenn das Spiel beginnt der Ball geht sehr langsam. Wie wäre es, wenn der Ball in eine zufällige Richtung startet (unter Berücksichtigung, dass die Geschwindigkeit des Balls beim Start für alle Spieler gleich sein muss. Wenn der Ball am Anfang nach links geht und später (in einem anderen) Spiel) wenn es anfängt, aber der Ball steigt, muss er mit der gleichen Geschwindigkeit gehen)
Es ist wirklich merkwürdig, dass Sie '@ classmethod' überall verwenden. Wo hast du das gelernt? Es hat einige spezielle Zwecke wie das Erstellen alternativer Konstruktoren, aber es sollte nicht für jede Methode einer Klasse verwendet werden. – skrx