Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #-------------------------------------------------------------------------------
- # Name: Sprite Night
- # Purpose: Impossibly hard platform game
- # Author: George
- #
- #!/usr/bin/env python
- #-------------------------------------------------------------------------------
- # Imports:
- import pygame, sys
- from pygame import *
- # Variables:
- SCREEN_SIZE = (800,640)
- FLAGS = 32
- DEPTH = 0
- BLACK = (0,0,0)
- WHITE = (255,255,255)
- RED = (255,0,0)
- GREEN = (0,255,0)
- BLUE = (0,0,255)
- YELLOW = (255,255,0)
- FPS = 40
- def main():
- pygame.init()
- screen = pygame.display.set_mode(SCREEN_SIZE, DEPTH, FLAGS)
- timer = time.Clock() # Timer the game runs on
- display.set_caption("Sprite Night: The Game")
- up = down = left = right = False # No initial inputs
- x = y = 0 #No movement
- entities = pygame.sprite.Group()
- player = Player(32,32)
- platforms = []
- levelID = 1
- if levelID == 1:
- file = "levels\level1.txt"
- if levelID == 2:
- file = "levels\level2.txt"
- if levelID == 3:
- file = "levels\editable.txt"
- f = open(file,"r")
- data = f.readlines()
- f.close()
- level = (data)
- # Build the level
- for row in level:
- for col in row:
- if col == "P":
- p = Platform(x, y)
- platforms.append(p)
- entities.add(p)
- if col == "E":
- e = ExitBlock(x, y)
- platforms.append(e)
- entities.add(e)
- x += 32
- y += 32
- x = 0
- entities.add(player)
- while 1:
- timer.tick(60)
- for event in pygame.event.get():
- if event.type == QUIT:
- pygame.quit()
- sys.exit()
- if event.type == KEYDOWN and event.key == K_ESCAPE:
- pygame.quit()
- sys.exit()
- keypress = event.type == KEYDOWN
- if keypress and event.key == K_UP:
- up = True
- if keypress and event.key == K_DOWN:
- down = True
- if keypress and event.key == K_LEFT:
- left = True
- if keypress and event.key == K_RIGHT:
- right = True
- if keypress and event.key == K_r:
- pass
- keyup = event.type == KEYUP
- if keyup and event.key == K_UP:
- up = False
- if keyup and event.key == K_DOWN:
- down = False
- if keyup and event.key == K_LEFT:
- left = False
- if keyup and event.key == K_RIGHT:
- right = False
- if keyup and event.key == K_r:
- main()
- # Handles background
- background = image.load('images/background.png').convert_alpha()
- pygame.transform.scale(background, (800,640))
- screen.blit(background, (0,0))
- # Update player, draw everything
- player.update(up, down, left, right, platforms)
- entities.draw(screen)
- # Displays FPS in top left. Not needed.
- frames = str(timer.get_fps())
- frames = frames[0:2]
- FPSMessage(screen, "FPS: " + frames)
- pygame.display.flip()
- class Entity(pygame.sprite.Sprite):
- def __init__(self):
- """ Turns the passed sprite into an entity"""
- pygame.sprite.Sprite.__init__(self)
- class Player(Entity):
- def __init__(self, x, y):
- Entity.__init__(self)
- self.xvel = 0 # X-velocity
- self.yvel = 0 # Y-velocity
- self.onGround = False # State onGround determines actions on sprites
- self.image = Surface((32,32)) # Location to be drawn
- self.rect = Rect(x, y, 28, 28) # Creates a rect at same place as sprite
- tempImage = image.load('images/ninja.png').convert_alpha()
- pygame.transform.scale(tempImage, (28,28))
- self.image = tempImage
- self.levelnum = 1
- def update(self, up, down, left, right, platforms):
- if up :
- if self.onGround:
- self.yvel -= 6
- if down:
- pass
- if left:
- self.xvel = -5
- if right:
- self.xvel = 5
- if not self.onGround:
- self.yvel += 0.3
- # maximum falling speed
- if self.yvel > 30:
- self.yvel = 30
- if not(left or right):
- self.xvel = 0
- # Character 'animation'
- if self.xvel >= 1:
- tempImage = image.load('images/ninja_right.png').convert_alpha()
- pygame.transform.scale(tempImage, (28,28))
- self.image = tempImage
- elif self.xvel <= -1:
- tempImage = image.load('images/ninja_left.png').convert_alpha()
- pygame.transform.scale(tempImage, (28,28))
- self.image = tempImage
- if self.yvel < 0:
- tempImage = image.load('images/ninja_jumping.png').convert_alpha()
- pygame.transform.scale(tempImage, (28,28))
- self.image = tempImage
- if self.yvel == 0 and self.xvel == 0:
- tempImage = image.load('images/ninja.png').convert_alpha()
- pygame.transform.scale(tempImage, (28,28))
- self.image = tempImage
- # Move the player
- self.rect.left += self.xvel
- self.collide(self.xvel, 0, platforms)
- self.rect.top += self.yvel
- self.onGround = False # Assumes we're in the air
- self.collide(0, self.yvel, platforms)
- def collide(self, xvel, yvel, platforms):
- for p in platforms:
- if sprite.collide_rect(self, p):
- if isinstance(p, ExitBlock):
- pass
- if xvel > 0:
- self.rect.right = p.rect.left
- if xvel < 0:
- self.rect.left = p.rect.right
- if yvel > 0:
- self.rect.bottom = p.rect.top
- self.onGround = True # onGround whilst on platforms
- self.yvel = 0
- if yvel < 0:
- self.rect.top = p.rect.bottom
- class FPSMessage():
- def __init__(self, screen, message):
- if pygame.font:
- self.font = pygame.font.Font(None, 30)
- else:
- self.font = None
- if self.font:
- size = self.font.size(message)
- font_surface = self.font.render(message,False, WHITE, BLACK)
- x = 10
- y = 10
- self.screen = screen
- self.screen.blit(font_surface, (x,y))
- class Platform(Entity):
- def __init__(self, x, y):
- Entity.__init__(self)
- self.image = Surface((32,32))
- tempImage = image.load('images/tile.png').convert_alpha()
- pygame.transform.scale(tempImage, (32,32))
- self.image = tempImage
- self.rect = Rect(x, y, 32, 32)
- def update(self):
- pass
- class ExitBlock(Platform):
- def __init__(self, x, y):
- Platform.__init__(self, x, y)
- tempImage = image.load('images/end.png').convert_alpha()
- pygame.transform.scale(tempImage, (32,32))
- self.image = tempImage
- class JumpBlock(Platform):
- def __init__(self, x, y):
- Platform.__init__(self, x, y)
- tempImage = image.load('jump.png').convert_alpha()
- pygame.transform.scale(tempImage, (32,32))
- self.image = tempImage
- if (__name__ == "__main__"):
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement