def __init__(self, ai_settings, screen): """Initialize the alien, and set its starting position.""" super(Alien, self).__init__() self.screen = screen self.ai_settings = ai_settings ss = Spritesheet('images/space_invaders_spritesheet.png') # # # Load the ship image, and get its rect. # self.image = ss.image_at((0, 192, 64, 64)) # Load the alien image, and set its rect attribute. self.images = [] self.images.append(ss.image_at((65, 512, 64, 64))) self.images.append(ss.image_at((0, 576, 64, 64))) # self.images.append(load_image('images/alien1_down.bmp')) self.index = 0 self.image = self.images[self.index] # self.image2 = pygame.image.load('images/alien2_up.bmp') # self.rect = self.image2.get_rect() self.rect = self.image.get_rect() # Start each new alien near the top left of the screen. self.rect.x = self.rect.width self.rect.y = self.rect.height # Store the alien's exact position. self.x = float(self.rect.x)
def load_data(self): """Let's create more sensible data structures for each group""" root_folder = path.dirname(__file__) img_folder = path.join(root_folder, "data", "img") music_folder = path.join(root_folder, "data", "music") fx_folder = path.join(root_folder, "data", "fx") sprites = Spritesheet(path.join(img_folder, "spritesheet_x2.png")) # IMAGES & SOUND self.images = {} self.fx = {} for item in ITEMS: sprite_at = ITEMS[item]['SPRITE'] self.images[item] = sprites.image_at(sprite_at[0], sprite_at[1], TILESIZE, 2, KEY_COLOR) fx = pygame.mixer.Sound( path.join(fx_folder, ITEMS[item]['FX_PICKUP'])) fx.set_volume(0.1) self.fx[item] = fx for mob in MOBS: sprite_at = MOBS[mob]['SPRITE'] self.images[mob] = sprites.image_at(sprite_at[0], sprite_at[1], TILESIZE, 2, KEY_COLOR) fx = pygame.mixer.Sound(path.join(fx_folder, MOBS[mob]['FX_DEATH'])) fx.set_volume(0.1) self.fx[mob] = fx for nest in NESTS: sprite_at = NESTS[nest]['SPRITE'] self.images[nest] = sprites.image_at(sprite_at[0], sprite_at[1], TILESIZE, 2, KEY_COLOR) fx = pygame.mixer.Sound( path.join(fx_folder, NESTS[nest]['FX_DEATH'])) fx.set_volume(0.1) self.fx[nest] = fx for weapon in WEAPONS: fx = pygame.mixer.Sound(path.join(fx_folder, WEAPONS[weapon]['FX'])) fx.set_volume(0.1) self.fx[weapon] = fx self.tiles = {} for wall in WALLS: for orientation in ['TOP', 'FRONT']: sprite_at = WALLS[wall][orientation] self.tiles[f"{wall}_{orientation}"] = sprites.image_at( sprite_at[0], sprite_at[1], TILESIZE, 2, KEY_COLOR) # MUSIC pygame.mixer.music.load(path.join(music_folder, BG_MUSIC))
def _init_pictures(self): """Load every picture in a variable.""" _ss = Spritesheet(self.TILES) self.wall = _ss.image_at(self.WALL) self.floor = _ss.image_at(self.FLOOR) self.exit = _ss.image_at(self.EXIT) self.macgyver = self._resize_pic(self.MACGYVER) self.guardian = self._resize_pic(self.GUARDIAN) self.needle = self._resize_pic(self.NEEDLE) self.ether = self._resize_pic(self.ETHER) self.tube = self._resize_pic(self.TUBE)
class Alien_2(Sprite): #a class to represent a single alien in the fleet def __init__(self, ai_settings, screen): #initialize the alien and set its starting position super(Alien_2, self).__init__() self.screen = screen self.ai_settings = ai_settings self.image = Spritesheet('images/spritesheet.png') self.images = [] self.index = 0 self.images.append( self.image.image_at((64, 0, 64, 64), colorkey=(0, 0, 0, 1))) self.images.append( self.image.image_at((128, 0, 64, 64), colorkey=(0, 0, 0, 1))) self.score = 20 self.image = self.images[self.index] #load the alien image and set its rect attribute self.rect = self.image.get_rect() #start each new alien near the top left of the screen self.rect.x = self.rect.width self.rect.y = self.rect.height #store the alien's exact position self.x = float(self.rect.x) def blitme(self): self.screen.blit(self.image, self.rect) def check_edges(self): #return true if alien is at edge of screen screen_rect = self.screen.get_rect() if self.rect.right >= screen_rect.right: return True elif self.rect.left <= 0: return True def update(self): #move the alien right or left self.x += (self.ai_settings.alien_speed_factor * self.ai_settings.fleet_direction) self.rect.x = self.x self.index += .02 if self.index >= len(self.images): self.index = 0 self.image = self.images[math.floor(self.index)]
def __init__(self, screen): grass = Spritesheet('tiles/grass/grass.bmp') water = Spritesheet('tiles/water/water.bmp') self.grass = grass.image_at((0, 0, 40, 40)) self.water = water.image_at((0, 0, 40, 40)) self.tile = screen self.screen = screen self.mapdata = [line.strip() for line in open("maps/map0.txt", "r")] self.pos_x = 0 self.pos_y = 0 self.location = (self.pos_x, self.pos_y)
def __init__(self, screen): ss = Spritesheet('spritesheets/cursor.bmp') self.screen = screen self.pos_x = 0 self.pos_y = 0 self.location = (self.pos_x,self.pos_y) self.image = ss.image_at((0, 0, 40, 40))
def load_data(self): root_folder = path.dirname(__file__) sprites = Spritesheet( path.join(root_folder, "data", "img", "spritesheet.png")) self.player_img = sprites.image_at( PLAYER_SPRITE_AT[0], PLAYER_SPRITE_AT[1], TILESIZE, 1, KEY) self.bee_img = sprites.image_at( BEE_SPRITE_AT[0], BEE_SPRITE_AT[1], TILESIZE, 1, KEY) self.top_wall_img = sprites.image_at( TOP_WALL_SPRITE_AT[0], TOP_WALL_SPRITE_AT[1], TILESIZE, 1, KEY) self.front_wall_img = sprites.image_at( FRONT_WALL_SPRITE_AT[0], FRONT_WALL_SPRITE_AT[1], TILESIZE, 1, KEY)
def __init__(self, settings, screen, button): self.screen = screen self.screen_rect = screen.get_rect() self.theSettings = Settings self.button = button ss = Spritesheet('images/space_invaders_spritesheet.png') # Load in alien images self.image = ss.image_at((65, 512, 64, 64)) self.image2 = ss.image_at((65, 704, 64, 64)) self.image3 = ss.image_at((65, 896, 64, 64)) self.image4 = ss.image_at((65, 0, 64, 64)) self.rect = self.image.get_rect() self.text_color = (30, 30, 30) self.font = pygame.font.SysFont(None, 48) screen = pygame.display.set_mode( (settings.screen_width, settings.screen_height)) screen.fill(settings.bg_color)
def load_data(self): """Loading item images""" root_folder = path.dirname(__file__) img_folder = path.join(root_folder, "data", "img") sprites = Spritesheet(path.join(img_folder, "spritesheet_x2.png")) # IMAGES self.item_images = {} for item_name in ITEMS: sprite_at = ITEMS[item_name]['SPRITE_AT'] self.item_images[item_name] = sprites.image_at( sprite_at[0], sprite_at[1], TILESIZE, 2, KEY_COLOR) self.player_img = sprites.image_at(PLAYER_SPRITE_AT[0], PLAYER_SPRITE_AT[1], TILESIZE, 2, KEY_COLOR) self.bee_img = sprites.image_at(BEE_SPRITE_AT[0], BEE_SPRITE_AT[1], TILESIZE, 2, KEY_COLOR) self.bee_nest_img = sprites.image_at(BEE_NEST_SPRITE_AT[0], BEE_NEST_SPRITE_AT[1], TILESIZE, 2, KEY_COLOR) self.top_wall_img = sprites.image_at(TOP_WALL_SPRITE_AT[0], TOP_WALL_SPRITE_AT[1], TILESIZE, 2, KEY_COLOR) self.front_wall_img = sprites.image_at(FRONT_WALL_SPRITE_AT[0], FRONT_WALL_SPRITE_AT[1], TILESIZE, 2, KEY_COLOR)
class Tilemap(object): def __init__(self, levelfile, spritesheetfile): self.Level = Level() self.Level.load_file(levelfile) self.Spritesheet = Spritesheet(spritesheetfile) def get_tilesize(self): return self.Level.tilesize def get_tile(self, x, y): t = self.Level.get_tuple(x, y, "tile") if t != None and t[0] != -1: return self.Spritesheet.image_at(t) return None
def load_data(self): """Lets add an image for bee's nests""" root_folder = path.dirname(__file__) sprites = Spritesheet( path.join(root_folder, "data", "img", "spritesheet_x2.png")) self.player_img = sprites.image_at(PLAYER_SPRITE_AT[0], PLAYER_SPRITE_AT[1], TILESIZE, 2, KEY) self.bee_img = sprites.image_at(BEE_SPRITE_AT[0], BEE_SPRITE_AT[1], TILESIZE, 2, KEY) self.bee_nest_img = sprites.image_at(BEE_NEST_SPRITE_AT[0], BEE_NEST_SPRITE_AT[1], TILESIZE, 2, KEY) self.top_wall_img = sprites.image_at(TOP_WALL_SPRITE_AT[0], TOP_WALL_SPRITE_AT[1], TILESIZE, 2, KEY) self.front_wall_img = sprites.image_at(FRONT_WALL_SPRITE_AT[0], FRONT_WALL_SPRITE_AT[1], TILESIZE, 2, KEY)
def load_data(self): """Adding music & fx""" root_folder = path.dirname(__file__) img_folder = path.join(root_folder, "data", "img") music_folder = path.join(root_folder, "data", "music") fx_folder = path.join(root_folder, "data", "fx") sprites = Spritesheet(path.join(img_folder, "spritesheet_x2.png")) # IMAGES self.item_images = {} for item_name in ITEMS: sprite_at = ITEMS[item_name]['SPRITE_AT'] self.item_images[item_name] = sprites.image_at( sprite_at[0], sprite_at[1], TILESIZE, 2, KEY_COLOR) self.player_img = sprites.image_at(PLAYER_SPRITE_AT[0], PLAYER_SPRITE_AT[1], TILESIZE, 2, KEY_COLOR) self.bee_img = sprites.image_at(BEE_SPRITE_AT[0], BEE_SPRITE_AT[1], TILESIZE, 2, KEY_COLOR) self.bee_nest_img = sprites.image_at(BEE_NEST_SPRITE_AT[0], BEE_NEST_SPRITE_AT[1], TILESIZE, 2, KEY_COLOR) self.top_wall_img = sprites.image_at(TOP_WALL_SPRITE_AT[0], TOP_WALL_SPRITE_AT[1], TILESIZE, 2, KEY_COLOR) self.front_wall_img = sprites.image_at(FRONT_WALL_SPRITE_AT[0], FRONT_WALL_SPRITE_AT[1], TILESIZE, 2, KEY_COLOR) # SOUND # Using arrays to add some variance pygame.mixer.music.load(path.join(music_folder, BG_MUSIC)) self.basic_gun_fx = [] for fx in BASIC_GUN_FX: pewpew = pygame.mixer.Sound(path.join(fx_folder, fx)) pewpew.set_volume(0.1) self.basic_gun_fx.append(pewpew) self.critter_death_fx = [] for fx in CRITTER_DEAD_FX: self.critter_death_fx.append( pygame.mixer.Sound(path.join(fx_folder, fx))) self.item_fx = {} for fx in ITEMS: self.item_fx[fx] = pygame.mixer.Sound( path.join(fx_folder, ITEMS[fx]['FX']))
class Tileset(object): def __init__(self, tileset, assetdir): self._imageCache = {} self.tileset = tileset self.tile_count = self.tileset.tile_count self.usecache = True fp = os.path.join(assetdir, tileset.image.source) self._spriteSheet = Spritesheet(fp) def image_at_index(self, index): rawIndex = index - 1 # assumes using tileset w/h w = self.tileset.max_tile_size.width h = self.tileset.max_tile_size.height y = math.floor(rawIndex / self.tileset.columns) * h x = (rawIndex % self.tileset.columns) * w return self.image_at([x, y, w, h]) def image_at(self, rectangle, colorkey=None): return self._spriteSheet.image_at(rectangle)
def __init__(self, ai_settings, screen): """Initialize the ship, and set its starting position.""" super(Ship, self).__init__() self.screen = screen self.ai_settings = ai_settings ss = Spritesheet('images/space_invaders_spritesheet.png') # Load the ship image, and get its rect. self.image = ss.image_at((0, 192, 64, 64)) self.rect = self.image.get_rect() self.screen_rect = screen.get_rect() # Start each new ship at the bottom center of the screen. self.rect.centerx = self.screen_rect.centerx self.rect.bottom = self.screen_rect.bottom # Store a decimal value for the ship's center. self.center = float(self.rect.centerx) # Movement flags. self.moving_right = False self.moving_left = False
class Unit(object): def __init__( self, screen, unitname, spritesheet ): self.spritesheet = spritesheet self.unit_ss = Spritesheet( spritesheet ) self.unit_sprite = (0, 0, 40, 40) self.unit_image = self.unit_ss.image_at( self.unit_sprite ) self.move_tile_ss = Spritesheet('spritesheets/move_tile.bmp') self.move_tile_image = self.move_tile_ss.image_at((0, 0, 40, 40)) self.screen = screen self.unitname = unitname self.frame = 0 self.pos_x = 0 self.pos_y = 0 self.distance_x = 0 self.distance_y = 0 self.move_x = 0 self.move_y = 0 self.speed = 10 self.unit_location = (self.pos_x, self.pos_y) self.state = 'idle' self.pressed_z = 0 def get_data( self, unit, data ): self.i = 0 self.char = '' self.value = 0 self.path = "units/" + unit + "/" + unit + ".txt" self.tiledata = [ line.strip() for line in open( self.path, "r") ] if data == 'move_range': self.char = self.tiledata[1][13] self.value = int( self.char ) return self.value def _move_diamond( self ): self.coordinates = [] self.radius = self.get_data( self.unitname, 'move_range' ) self.y = 0 self.x = 0 self.x_limit = 0 self.x0 = self.pos_x self.y0 = self.pos_y + self.radius*40 while self.y <= self.radius*2: while self.x <= self.x_limit: self.coordinates.append( ( self.x0 - self.x*40, self.y0 - self.y*40 ) ) if self.y >= 0: self.coordinates.append( ( self.x0 + self.x*40, self.y0 - self.y*40 ) ) self.x += 1 self.x = 0 if self.y < self.radius: self.x_limit += 1 elif self.y >= self.radius: self.x_limit -= 1 self.y += 1 return self.coordinates self.coordinates = [] def update( self, cursor_x, cursor_y ): self.unit_ss = Spritesheet( self.spritesheet ) if self.state == 'idle': self._animate('idle') if self.pressed_z and self.pos_x == cursor_x and self.pos_y == cursor_y: self.state = 'selected' self.pressed_z = 0 elif self.state == 'selected': self._animate('selected') if self.pressed_z: self.state = 'moving' elif self.state == 'moving': self._animate('moving') self._move( cursor_x, cursor_y ) self.pressed_z = 0 self.unit_location = (self.pos_x,self.pos_y) self.unit_image = self.unit_ss.image_at( self.unit_sprite ) def draw( self ): self.i = 0 self.coordinates = self._move_diamond() while self.state == 'selected' and self.i < len(self.coordinates): self.screen.blit(self.move_tile_image, self.coordinates[self.i]) self.i += 1 self.screen.blit(self.unit_image, self.unit_location) def action( self ): self.pressed_z = 1 def _move( self, cursor_x, cursor_y ): self.distance_x = cursor_x - self.pos_x self.distance_y = cursor_y - self.pos_y if self.distance_x == 0 and self.distance_y == 0: self.state = 'idle' if self.distance_x != 0: if self.distance_x > 0: self.pos_x += self.speed elif self.distance_x < 0: self.pos_x -= self.speed if self.distance_y != 0: if self.distance_y > 0: self.pos_y += self.speed elif self.distance_y < 0: self.pos_y -= self.speed def _animate( self, state ): if state == 'idle': if self.frame == 0: self.frame += 1 else: self.frame = 0 if state == 'selected' or state == 'moving': if self.frame < 5: self.frame += 1 else: self.frame = 2 self.unit_sprite = ( self.frame*40, 0, 40, 40 )
def test_init(self): ss = Spritesheet(self.TILES) floor = ss.image_at(self.FLOOR, -1)
def load_img(self): sprites = Spritesheet(path.join(self.img_folder, "spritesheet.png")) # Items self.healthpack_img = sprites.image_at( ITEMS['HEALTHPACK']['IMG'][0], ITEMS['HEALTHPACK']['IMG'][1], TILESIZE, 2, KEY_COLOR ) self.speedup_img = sprites.image_at( ITEMS['SPEEDUP']['IMG'][0], ITEMS['SPEEDUP']['IMG'][1], TILESIZE, 2, KEY_COLOR ) # Mobs name = 'PLAYER' self.player_img = sprites.image_at( MOBS[name]['IMG'][0], MOBS[name]['IMG'][1], TILESIZE, 2, KEY_COLOR ) name = 'BEE' self.bee_img = sprites.image_at( MOBS[name]['IMG'][0], MOBS[name]['IMG'][1], TILESIZE, 2, KEY_COLOR ) name = 'BEE_NEST' self.bee_nest_img = sprites.image_at( MOBS[name]['IMG'][0], MOBS[name]['IMG'][1], TILESIZE, 2, KEY_COLOR ) name = 'TOWER' self.tower_img = sprites.image_at( MOBS[name]['IMG'][0], MOBS[name]['IMG'][1], TILESIZE, 2, KEY_COLOR ) name = 'SPIDER' self.spider_img = sprites.image_at( MOBS[name]['IMG'][0], MOBS[name]['IMG'][1], TILESIZE, 2, KEY_COLOR ) # Weapons self.gun_img = pygame.image.load(path.join(self.img_folder, WEAPONS['GUN']['IMG'])).convert_alpha() self.machinegun_img = pygame.image.load(path.join(self.img_folder, WEAPONS['MACHINEGUN']['IMG'])).convert_alpha() self.shotgun_img = pygame.image.load(path.join(self.img_folder, WEAPONS['SHOTGUN']['IMG'])).convert_alpha() self.deagle_img = pygame.image.load(path.join(self.img_folder, WEAPONS['DEAGLE']['IMG'])).convert_alpha() self.assault_img = pygame.image.load(path.join(self.img_folder, WEAPONS['ASSAULT']['IMG'])).convert_alpha() # Menu self.main_menu_img = pygame.image.load(path.join(self.img_folder, MENU_IMG)).convert() self.game_over_img = pygame.image.load(path.join(self.img_folder, GAME_OVER_IMG)).convert()
def __init__(self, width, height): """ Configure display-wide settings and one-time setup work here. """ BaseDisplay.__init__(self, width, height) # There are other fonts available, but they are not # the same on every computer. You can read more about # fonts at http://www.pygame.org/docs/ref/font.html self.font_size = 12 self.font = pygame.font.SysFont("Courier New",self.font_size) # Colors are specified as a triple of integers from 0 to 255. # The values are how much red, green, and blue to use in the color. # Check out http://www.colorpicker.com/ if you want to try out # colors and find their RGB values. Be sure to use the `R`, `G`, # `B` values at the bottom, not the H, S, B values at the top. self.player_color = (0, 255, 0) self.opponent_color = (255, 0, 0) self.missile_color = (0, 255, 255) self.npc_color = (255, 255, 0) self.wall_color = (255, 255, 255) self.text_color = (255, 255, 255) self.background_color = (0, 0, 0) buttonF = 'code camp buttons.png' sheet = Spritesheet(buttonF) self.tourneyB = sheet.image_at(pygame.Rect(5,5,200,97),(255,255,255)) self.singleB = sheet.image_at(pygame.Rect(5,134,200,97),(255,255,255)) self.dualB = sheet.image_at(pygame.Rect(5,264,200,97),(255,255,255)) self.demoB = sheet.image_at(pygame.Rect(5,394,200,97),(255,255,255)) # self.logo = pygame.image.load("display\imgs\game pngs '\code camp logo-01") self.filenames = ["code camp kirby-01.png", "code camp kirby-02.png", "code camp link-01-01.png", "code camp link-02-01.png", "code camp mario-01.png","code camp mario-04.png", "code camp mario-02.png","code camp mario-03.png"] self.imgs = [] self.filename2 = ["code camp castle small.png", "forest background code camp small.png", "haunted house code camp small.png"] self.arena = [] self.filenames2 = ["code camp logo-01.png"] self.logo = [] for f in self.filenames: f = os.path.join('display','imgs',f) self.imgs.append(pygame.image.load(f)) for a in self.filename2: a = os.path.join("display","imgs",a) self.arena.append(pygame.image.load(a)) for l in self.filenames2: l = os.path.join("display", "imgs", l) self.logo.append(pygame.image.load(l)) # playerStates {'walk':['walk','walkdown','walkleft','walkup','walkright'],'throw':['throw','throwdown','throwleft','throwup','throwright'], 'death':['death'],'victory':['victory'],'hp':['victory']} # filename = os.path.join('display', 'imgs', 'Link Sprites with coordinates.png') # self.image = pygame.image.load(filename) # self.rect = self.obj_to_rect(obj) # self.image = pygame.image.load(filename) # ss = Spritesheet(filename) # for s in playerStates: # if len(s) == 1: # for d in s: # if len() # playerStates {'walk':['walkdown','walkleft','walkup','walkright'],'throw':['throwdown','throwleft','throwup','throwright'], 'death':['death'],'victory':['victory'],'hp':['victory']} # self.image = pygame.image.load(filename) # self.rect = self.obj_to_rect(obj) # self.image = pygame.image.load(filename) return
events = pygame.event.get() for event in events: if event.type == pygame.QUIT: is_running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: is_running = False screen.blit(background, (0, 0)) for c, row in enumerate(level1_map): for r, item_code in enumerate(row): if item_code != -1: rect = pygame.Rect(start_x + r * spritesheet.tile_width, start_x + c * spritesheet.tile_height, spritesheet.tile_width, spritesheet.tile_height) tile_col = item_code % 20 tile_row = item_code // 20 tile_img = spritesheet.image_at(tile_col=tile_col, tile_row=tile_row) screen.blit(tile_img, rect.topleft) player.update(events) player.draw(screen) draw_text(f"{player}", 1, 1) pygame.display.flip() clock.tick(60) pygame.quit()