1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | """ Sample Python/Pygame Programs Simpson College Computer Science From: Explanation video: http://youtu.be/8IRyt7ft7zg Part of a series: """ import pygame # -- Global constants # Colors BLACK = ( 0 , 0 , 0 ) WHITE = ( 255 , 255 , 255 ) BLUE = ( 50 , 50 , 255 ) # Screen dimensions SCREEN_WIDTH = 800 SCREEN_HEIGHT = 600 class Player(pygame.sprite.Sprite): """ This class represents the bar at the bottom that the player controls. """ # Constructor function def __init__( self , x, y): # Call the parent's constructor super ().__init__() # Set height, width self .image = pygame.Surface([ 15 , 15 ]) self .image.fill(WHITE) # Make our top-left corner the passed-in location. self .rect = self .image.get_rect() self .rect.y = y self .rect.x = x # Set speed vector self .change_x = 0 self .change_y = 0 self .walls = None def changespeed( self , x, y): """ Change the speed of the player. """ self .change_x + = x self .change_y + = y def update( self ): """ Update the player position. """ # Move left/right self .rect.x + = self .change_x # Did this update cause us to hit a wall? block_hit_list = pygame.sprite.spritecollide( self , self .walls, False ) for block in block_hit_list: # If we are moving right, set our right side to the left side of # the item we hit if self .change_x > 0 : self .rect.right = block.rect.left else : # Otherwise if we are moving left, do the opposite. self .rect.left = block.rect.right # Move up/down self .rect.y + = self .change_y # Check and see if we hit anything block_hit_list = pygame.sprite.spritecollide( self , self .walls, False ) for block in block_hit_list: # Reset our position based on the top/bottom of the object. if self .change_y > 0 : self .rect.bottom = block.rect.top else : self .rect.top = block.rect.bottom class Wall(pygame.sprite.Sprite): """ Wall the player can run into. """ def __init__( self , x, y, width, height): """ Constructor for the wall that the player can run into. """ # Call the parent's constructor super ().__init__() # Make a blue wall, of the size specified in the parameters self .image = pygame.Surface([width, height]) self .image.fill(BLUE) # Make our top-left corner the passed-in location. self .rect = self .image.get_rect() self .rect.y = y self .rect.x = x # Call this function so the Pygame library can initialize itself pygame.init() # Create an 800x600 sized screen screen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT]) # Set the title of the window pygame.display.set_caption( 'Test' ) # List to hold all the sprites all_sprite_list = pygame.sprite.Group() # Make the walls. (x_pos, y_pos, width, height) wall_list = pygame.sprite.Group() wall = Wall( 0 , 0 , 10 , 600 ) wall_list.add(wall) all_sprite_list.add(wall) wall = Wall( 10 , 0 , 790 , 10 ) wall_list.add(wall) all_sprite_list.add(wall) wall = Wall( 10 , 200 , 100 , 10 ) wall_list.add(wall) all_sprite_list.add(wall) # Create the player paddle object player = Player( 50 , 50 ) player.walls = wall_list all_sprite_list.add(player) clock = pygame.time.Clock() done = False while not done: for event in pygame.event.get(): if event. type = = pygame.QUIT: done = True elif event. type = = pygame.KEYDOWN: if event.key = = pygame.K_LEFT: player.changespeed( - 3 , 0 ) elif event.key = = pygame.K_RIGHT: player.changespeed( 3 , 0 ) elif event.key = = pygame.K_UP: player.changespeed( 0 , - 3 ) elif event.key = = pygame.K_DOWN: player.changespeed( 0 , 3 ) elif event. type = = pygame.KEYUP: if event.key = = pygame.K_LEFT: player.changespeed( 3 , 0 ) elif event.key = = pygame.K_RIGHT: player.changespeed( - 3 , 0 ) elif event.key = = pygame.K_UP: player.changespeed( 0 , 3 ) elif event.key = = pygame.K_DOWN: player.changespeed( 0 , - 3 ) all_sprite_list.update() screen.fill(BLACK) all_sprite_list.draw(screen) pygame.display.flip() clock.tick( 60 ) pygame.quit() |