Need Help Fixing Problem With Simple Program(Python/Pygame)

Started by
3 comments, last by rabbitrabbit 9 years, 9 months ago

Recently I've been going going through the lessons on this site - http://programarcadegames.com/index.php?lang=en. I'm currently on the first part of chapter 8(Trying to make the white box bounce around on a black backround). When I try to run my program, all I get is a blank black window, no square. But when I close the program, the square appears for a moment. The code is below. If anyone can see the problem and point it out, I'd greatly appreciate it.


# Import a library of functions called 'pygame'
import pygame

# Initialize the game engine
pygame.init()

# Defining some colors
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)

# Opening and setting window size
size = (700, 500)
screen = pygame.display.set_mode(size)

# Setting the window title
pygame.display.set_caption("rabbitrabbit's game")

# Setting up main program loop
# Loop until user clicks the close button
done = False

# Manage how fast screen updates
clock = pygame.time.Clock()
# Starting position of the rectangle
rect_x = 50
rect_y = 50
# Speed and direction of rectangle
rect_change_x = 8
rect_change_y = 8


#------------ Main Program Loop -------------
while not done:  
    #---------Main Event Loop-------------
    for event in pygame.event.get():# User did something
        if event. type == pygame.QUIT: # If user clicked close
            done = True # Flag that we are done so exit this loop
# Set Screen backround
screen.fill(BLACK)
# Draw the rectangle
pygame.draw.rect(screen, WHITE, [rect_x, 50, 50, 50])
# Move the rectangle's starting point
rect_x += rect_change_x
rect_y += rect_change_y
# Bounce the rectangle if needed
if rect_y > 450 or rect_y < 0:
    rect_change_y = rect_change_y * -1
if rect_x > 650 or rect_x < 0:
    rect_change_x = rect_change_x * -1

# Game logic here

# Drawing code here

# Update screen
pygame.display.flip()
# --- Limit to 60 FPS
clock.tick(60)

pygame.quit()

Beginner. Whatever I said above could be completely wrong.

Advertisement

Maybe posting the code directly isn't a good idea. Python depends on the corrent indentation to work as you expect. Try to use the code option while writing the post or something like http://pastebin.com/ to make sure it looks like the code in your script.

Now, only guessing, maybe you forgot to put the pygame.display.flip() and clock.tick(60) lines inside the while block.

If your code copy&pasted correctly you did not put the code to draw the rectangle
Into the while loop. First after you left the loop you start to draw your rectangle.

Assuming the code you paste is correct, the problem is that the actual drawing code is outisde the main loop.

The short answer is:

Add a single tab (or four spaces, depending on what you are using to indent) to every line from line 44 to line 64.

The long answer is:

Python takes context by code indentation, in the code you posted here, your program will loop in the wait for the close click event, and won't draw a single thing. When the user press the close, it will leave the loop and execute the drawing code ONCE (hence, you see the drawn there) and then quit. You need to put the drawing code inside the main loop to see it actually draw something.

Currently working on a scene editor for ORX (http://orx-project.org), using kivy (http://kivy.org).

Thanks KnolanCross, I changed it and the code works now. Also, I'll be sure to use the code option from now on when posting.

Beginner. Whatever I said above could be completely wrong.

This topic is closed to new replies.

Advertisement