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.