Now that we've got our race car and we can drive it around, we've found that we're able to drive it right off of the screen! To stop this, we want to add some sort of boundary to our game that will stop this from happening.
Here's the new code:
import pygame
pygame.init()
display_width = 800
display_height = 600
black = (0,0,0)
white = (255,255,255)
red = (255,0,0)
car_width = 73
gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('A bit Racey')
clock = pygame.time.Clock()
carImg = pygame.image.load('racecar.png')
def car(x,y):
gameDisplay.blit(carImg,(x,y))
def game_loop():
x = (display_width * 0.45)
y = (display_height * 0.8)
x_change = 0
gameExit = False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_change = -5
if event.key == pygame.K_RIGHT:
x_change = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
x_change = 0
x += x_change
gameDisplay.fill(white)
car(x,y)
if x > display_width - car_width or x < 0:
gameExit = True
pygame.display.update()
clock.tick(60)
game_loop()
pygame.quit()
quit()
First, we see that we now have a new variable:
car_width = 73
This variable is used in the rest of the program to know where both edges of the car are. The car's "location" really just means the location of the top left pixel of the car. Because of this, it is helpful to also know where the right side is.
Next, we see that we've changed the "main loop" quite a bit. Now, we're calling this the game loop, and instead of the variable being crashed that exits it, it is a "gameExit" that will exit the loop. Take note of the variables that have now been moved within this loop.
Next up, we see the next major change is:
if x > display_width - car_width or x < 0:
gameExit = True
This is our logic for whether or not the car has crossed over the left and right boundaries.