2016-03-31 10 views
4
import pygame 
#Colors, Allways you need colors!!!! 
BLACK = (0, 0, 0) 
GREEN = (0, 255, 0) 
WHITE = (255, 255, 255) 
RED = (255, 0, 0) 
ORANGE = (255, 115, 0) 
YELLOW = (242, 255, 0) 
BROWN = (115, 87, 39) 
PURPLE = (298, 0, 247) 
GRAY = (168, 168, 168) 
PINK = (255, 0, 234) 
BLUE = (0, 0 , 255) 
pygame.init() 
# Screen 
screen = pygame.display.set_mode([700,500]) 
#Name of thewindow 
pygame.display.set_caption("Trial to make PONG") 
# Any variables! 

x_speed = 0 
y_speed = 0 

x_coord = 10 
y_coord = 250 

x = 670 
y = 250 
other_speed = 0 
other_speed2 = 0 

rect_x = 50 
rect_y = 50 

rect_change_x = 5 
rect_change_y = 5 
clock = pygame.time.Clock() 
#Sounds,maybe needed? 

#Main Loop__________ 

done = False 

while not done: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 

      # User pressed down on a key 
     elif event.type == pygame.KEYDOWN: 
      # Figure out if it was an arrow key. If so 
      # adjust speed. 

      if event.key == pygame.K_UP: 
       y_speed = -5 
      elif event.key == pygame.K_DOWN: 
       y_speed = 5 
      elif event.key == pygame.K_w: 
       other_speed2 = -5 
      elif event.key == pygame.K_s: 
       other_speed2 = 5 

    # User let up on a key 
     elif event.type == pygame.KEYUP: 
     # If it is an arrow key, reset vector back to zero 
      if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: 
       x_speed = 0 
      elif event.key == pygame.K_UP or event.key == pygame.K_DOWN: 
       y_speed = 0 
      elif event.key == pygame.K_w or event.key == pygame.K_s: 
       other_speed2 = 0 


# Move the object according to the speed vector. 
    x_coord += x_speed 
    y_coord += y_speed 
    x += x_speed 
    y += other_speed2 


    screen.fill(BLACK) 

    pygame.draw.rect(screen,BLUE,[x_coord,y_coord,20,60]) 
    pygame.draw.rect(screen,YELLOW,[x,y,20,60]) 

    if x > 650 or x < 0: 

    # Draw the rectangle 
    pygame.draw.ellipse(screen, BLUE, [rect_x, rect_y, 50, 50]) 

    # Move the rectangle starting point 
    rect_x += rect_change_x 
    rect_y += rect_change_y 

    if rect_x > 650 or rect_x < 0: 
     rect_change_x = rect_change_x * -1 
    if rect_y > 450 or rect_y < 0: 
     rect_change_y = rect_change_y * -1 





    pygame.display.flip() 
    clock.tick(60) 

pygame.quit() 

Ok, also habe ich 2 Paddel in diesem Pong-Spiel namens Blau und gelb Rechteck. Ich kann sie bewegen, aber sie bewegen sich vom Bildschirm weg. Wie verhindere ich das? Iv sah online, aber nichts scheint zu funktionieren. Ich dachte darüber nach, Rechtecke um den Bildschirm zu legen, um ein Kollisionspunktargument zu machen, wo, wenn das Blau/Gelb-Paddel schlug, sie sich nicht weiter bewegen würden, aber ich bin mir nicht sicher, wie ich das machen sollte. Vielen Dank für Ihre Hilfe.Objekt bewegt sich vom Bildschirm

+1

Ihre Formatierung ist ein bisschen muckte up –

+0

mir erzählen ... – HALLOPEOPLE

Antwort

4

Bevor Sie die y-Koordinate ändern, sollten Sie prüfen, ob sie sich außerhalb des Bildschirmrands befindet. Siehe

if y_coord + y_speed >= 0 and y_coord + y_speed + 60 <= 500: 
    y_coord += y_speed 

Obwohl, wie Sie sehen, kann es ein wenig verwirrend können Zahlen zu verwenden, weshalb Sie vermeiden sollten Hartcodierung. Es ist besser, eine display_height, display_width und y_speed Variable zu haben. Grundsätzlich sollten Sie außerhalb der Initialisierung von Variablen nur 0 als Zahlen haben. Beachten Sie auch, was passiert, wenn Sie + y_speed in der if-Anweisung weglassen.

+0

Ich habe versucht, wie Sie sagten, aber es macht nur das Paddel (die BLUE) noch schneller vom Bildschirm gehen als zuvor, das gleiche passiert, wenn ich + y_speed aus der if-Anweisung verlassen. Danke für Ihre Hilfe sowieso .... – HALLOPEOPLE

+0

Warten Sie, dann implementieren Sie es falsch. Ich habe den Code direkt in Python gesteckt und es hat perfekt funktioniert. Haben Sie den Code kopiert und eingefügt und die Formatierung überprüft? Sie müssen nur die Zeile 'if y_coord + y_speed> = 0 und y_coord + y_speed + 60 <= 500:' vor Ihrer bereits vorhandenen 'y_coord + = y_speed 'hinzufügen. Ich habe das Gefühl, dass du das hinzugefügt hast, ohne das zu entfernen. – MANA624

+0

ahhhh. Es war meine Schuld daran, sollte es gesehen haben. Danke, es hat funktioniert. Und ich kann das auch auf mein anderes gelbes Paddel anwenden? – HALLOPEOPLE

0

Es scheint, als ob Sie die Höhe des Bildschirms auf 500 Pixel einstellen. Vielleicht können Sie überprüfen, ob sich Ihre Paddles an der Grenze des Bildschirms befinden, bevor Sie sie bewegen.

+0

Dank für Ihre Antwort danken, aber es scheint nicht zu Arbeit ... Wenn ich versuche, das Paddel zu bewegen, bewegt es sich leicht nach rechts und links, aber nicht mehr danach .. Wenn Sie das Paddel hiehgt zu etwas größer als 250 dann bewegt es sich immer noch vom Bildschirm. – HALLOPEOPLE

3

Ich schlage vor, Sie beginnen mit der Rect class, da es die Handhabung solcher Fälle einfach macht. Außerdem wird Ihr Code sauberer und kürzer.

Hier ist ein Beispiel für die Verwendung von Rect. Beachten Sie, dass ich einfach clamp_ip verwenden, um die Spieler Paddel, um sicherzustellen, können Sie den Bildschirm nicht verlassen:

import pygame 

BLACK = pygame.color.Color('Black') 
YELLOW = pygame.color.Color('Yellow') 
BLUE = pygame.color.Color('Blue') 

pygame.init() 
screen = pygame.display.set_mode([700,500]) 
screen_rect = screen.get_rect() 

pygame.display.set_caption("Trial to make PONG") 

blue_rect = pygame.Rect(10, 250, 20, 60) 
yellow_rect = pygame.Rect(670, 250, 20, 60) 
ball_rect = pygame.Rect(50, 50, 50, 50) 

ball_x_speed = 5 
ball_y_speed = 5 

clock = pygame.time.Clock() 

done = False 
while not done: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 

    # check all pressed keys and move the paddles 
    pressed = pygame.key.get_pressed() 
    if pressed[pygame.K_UP]: blue_rect.move_ip(0, -5) 
    if pressed[pygame.K_DOWN]: blue_rect.move_ip(0, 5) 
    if pressed[pygame.K_w]: yellow_rect.move_ip(0, -5) 
    if pressed[pygame.K_s]: yellow_rect.move_ip(0, 5) 

    # ensure paddles stay on screen 
    blue_rect.clamp_ip(screen_rect) 
    yellow_rect.clamp_ip(screen_rect) 

    # move the ball 
    ball_rect.move_ip(ball_x_speed, ball_y_speed) 

    # check if the ball needs to change direction 
    if ball_rect.x + ball_rect.width > screen_rect.width or ball_rect.x < 0: 
     ball_x_speed = ball_x_speed * -1 
    if ball_rect.y + ball_rect.height> screen_rect.height or ball_rect.y < 0: 
     ball_y_speed = ball_y_speed * -1 

    # draw everything 
    screen.fill(BLACK) 
    pygame.draw.ellipse(screen, BLUE, ball_rect) 
    pygame.draw.rect(screen,BLUE, blue_rect) 
    pygame.draw.rect(screen,YELLOW, yellow_rect) 
    pygame.display.flip() 
    clock.tick(60) 

pygame.quit() 
+0

Hey Faultier! Haben Sie ein paar Fragen. Erstens, nur um auf der Klemme nach dem Lesen von Dokumenten zu klären .. Es wird nur das Paddel einstellen, wenn es außerhalb des Bildschirms ist, Rect, und wird es zurück zu der Kante bewegen, von der es verlassen hat, wenn es verlassen hat? Zweitens, sollte nicht nach dem Umzug klemmen sein? Momentan stelle ich mir vor, dass das Paddel festgeklemmt ist, sich nach oben bewegt (z. B. hinter der Kante) und leicht vom Bildschirm weggezogen wird. Vielen Dank im Voraus –

+1

1) Ja. 2) Die Klemme befindet sich bereits nach dem Verschieben. Die Zeilen direkt vor dem 'clamp_ip'-Kram. – sloth

+0

Mein Fehler, es ist der Ball, der sich nach der Klemme bewegt! Nicht die Paddel –

Verwandte Themen