Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- from pygame import Rect
- from pygame import Vector2
- import base64
- import os.path
- import time
- MARIO_SPRITESHEET = b'iVBORw0KGgoAAAANSUhEUgAAAGAAAABACAMAAADS6oI8AAAAAXNSR0IArs4c6QAAAGBQTFRFAAAAIiA0RSg8Zjkxj\
- 1Y733Em2aBm7sOa+/I2meVQar4wN5RuS2kvUkskMjw5Pz90MGCCW27hY5v/X83ky9v8////m623hH6HaWpqWVZSdkKKrDIy2Vdj13u6j5dKim8w\
- +2O8zwAAACB0Uk5TAP////////////////////////////////////////+Smq12AAAEbUlEQVRYhY1XQZIkIQj05Ikf8P9/bgskJGj3TsXEdGl\
- hJiAorGWPnmf9/XnL773zY/vsE/vPgF/k9xZj2DsoRJp8W9AQB+BDPmZEbLIIhBYwZEecgJe8QsJ8FOBG52vkvMmeCHt/AZzy+CjnWWYJ/kwmRh\
- jeiAPwkidx88mWm8Dec0VHnICXfIqbBT5/huqbLljQEAhxAF7ypG4I+vvZB4kFwR6b3hEn4CXfxGHI+W87HQZihVvcECfgLc/isiQEPj8IymsHJ\
- mIHXHMHSNz2OIcZ9iGyOmEziRSAFfUOjeVgHFx1k8oEC2FNhjUQZ+J6QJ7VbINBGiGSDgQCAklCk0g6tQ0jC32sfLoFiBPAB5mYIJAyqOyJrzkh\
- 4V9R8SDIYeDDaZv0yX8PjyWBEL6bUJsrGi5IAtl1EGhCSHlM4HcQ6E0gie8m1GfxM5sciv+2A2QnCARhBrxQ2bMGm0L82gjqOPQtvgkq7GPFVo9\
- Kjx4/ofk7HZUfX6qvcB8pm3CGIJgKaaaVLSeX023jx1LdGBl1RKAg0ACcBHy409Xwi8BklNLKxS7Aj1tqeMZEEBydIHVIjZJPk6C+2/mvbQwP5+\
- nDAoOAiwLB2bWpaMg9qwlbgMPjuvO1baLQpS7kVZVOIJNgVRYkfv4mgf1AhPEtp9jRKjIIqvYSqoA6gZQKYECegb2SOCiKYIWH5SuBD0EQcJk3q\
- pS0ki5oBBVHQktrtEja30sqLxLKqzUeitNJwKAkTCsH0At/Nf1Jt651P6G/EFzYXcFJcKswbegM3/C72NOLPx6W33xbNwGC3PqbYn4leTQFrHrA\
- 0/zuDBfbVIDkNy6vqrKSoJvDVk+DmgJdnk/XkLVLrgNGtSsvvJcCJF+pVoRZDufxmBX9E28o0OXpfpsE3k+tqspwvA6DhgJD/hjAC6xe2Sjhd1H\
- 6ArnwLgWGPIo4LPj8CCrHYPCMQm15GTQVGPIyFtj+opYhgpCRG28ATnlpCzwqpOrtsQsvvDXHT3kSUK0JhAk3CBfeAMxgx+EHZ0DjbA6qIu/Vbu\
- JVoi26Y7dj5Lh3B/bRRlq119UfROXAJ6uXov5paRWyWZ1TYsJ+ugR7fwCbuEVIG89SFS4D7EOrCxABPiFM8PTZkk6QBuCwQHvjE+eYk07Q+wNro\
- ZvPUEJYnbBlECwyAFVENSZXf0DW5S5AHy2F2SVaa7NMKQ0cqeaKoLYZcz4+Nmxm2FEUIfQaw9UfsAEIiyQYF0IQqDcHlVrQWXC2YUHGM8wKvJic\
- Nw4A55gviXd/kF4DHjKTik0A0vhcwvsq+P7WHxSjCAPatipNrOza0uK7P2g92IrTC+NSzhXiIFHEXGTyWqsrjCI4GwRkEulDBNm2YjWX1nWWATk\
- ZyiOZSVIxVAQSBXp1B1qZpnWjk+b00ut9itFMEeoQtI3Dx+s3QfZNFdd0XeTWl23KE6lOLuHf+yXycfWHm+EimEX6T4LRLVyFdJsCwfcqPd7690\
- eD8IWgFOqi/yH4of8DPxTiD/8AmF34y2XCvLIAAAAASUVORK5CYII='
- # this writes the mario-sheet.png to disk if it doen't exist
- if not os.path.exists("mario-sheet.png"):
- f = open("mario-sheet.png", "wb")
- f.write(base64.b64decode(MARIO_SPRITESHEET))
- f.close()
- class spritesheet:
- def __init__(s, filename, cols, rows=1, scale=False):
- source = pygame.image.load(filename).convert_alpha()
- if scale:
- w, h = source.get_rect().size
- source = pygame.transform.scale(source, (w * scale, h * scale))
- size = source.get_rect().size
- s.w, s.h = size[0] // cols, size[1] // rows
- s.sprites = [source.subsurface(((index % cols * s.w, index // cols * s.h), (s.w, s.h))) for index in range(cols * rows)]
- def size(s):
- return (s.w, s.h)
- def blit(s, index, xy):
- global PDS
- PDS.blit(s.sprites[int(index)], xy)
- class mario:
- def __init__(s, spawnPoint):
- global MARIO_SPRITES, MARIO_JUMPING_RIGHT
- s.xy = Vector2(spawnPoint)
- s.Rect = (s.xy, MARIO_SPRITES.size())
- s.frame = MARIO_STANDING_RIGHT
- s.vel = Vector2(0, 0)
- s.status = s.standing
- def draw(s):
- global MARIO_SPRITES
- MARIO_SPRITES.blit(s.frame, s.xy)
- def standing(s):
- global MARIO_WALKING_RIGHT, MARIO_WALKING_LEFT
- if s.keys[pygame.K_RIGHT]:
- s.frame = MARIO_WALKING_RIGHT[0]
- s.status = s.walking_right
- elif s.keys[pygame.K_LEFT]:
- s.frame = MARIO_WALKING_LEFT[0]
- s.status = s.walking_left
- def walking_right(s):
- global MARIO_WALKING_RIGHT, MARIO_SKIDDING_RIGHT, MARIO_MAX_SPEED, MARIO_ACCELERATION
- if s.keys[pygame.K_LEFT] and s.vel.x > 0:
- s.frame = MARIO_SKIDDING_RIGHT
- s.status = s.skidding_right
- return
- if s.keys[pygame.K_RIGHT]:
- s.vel.x += MARIO_ACCELERATION
- if s.vel.x > MARIO_MAX_SPEED:
- s.vel.x = MARIO_MAX_SPEED
- else:
- s.vel.x -= 0.1
- if s.vel.x < 0:
- s.vel.x = 0
- s.frame = MARIO_STANDING_RIGHT
- s.status = s.standing
- return
- s.frame += 0.2
- if s.frame > MARIO_WALKING_RIGHT[1]:
- s.frame = MARIO_WALKING_RIGHT[0]
- def skidding_right(s):
- global MARIO_WALKING_RIGHT, MARIO_WALKING_LEFT, MARIO_DEACCELERATION
- if s.keys[pygame.K_RIGHT]:
- s.frame = MARIO_WALKING_RIGHT[0]
- s.status = s.walking_right
- return
- s.vel.x -= MARIO_DEACCELERATION
- if s.vel.x < 0:
- s.frame = MARIO_WALKING_LEFT[0]
- s.status = s.walking_left
- def walking_left(s):
- global MARIO_WALKING_LEFT, MARIO_SKIDDING_LEFT, MARIO_MAX_SPEED, MARIO_ACCELERATION
- if s.keys[pygame.K_RIGHT] and s.vel.x < 0:
- s.frame = MARIO_SKIDDING_LEFT
- s.status = s.skidding_left
- return
- if s.keys[pygame.K_LEFT]:
- s.vel.x -= MARIO_ACCELERATION
- if s.vel.x < -MARIO_MAX_SPEED:
- s.vel.x = -MARIO_MAX_SPEED
- else:
- s.vel.x += 0.1
- if s.vel.x > 0:
- s.vel.x = 0
- s.frame = MARIO_STANDING_LEFT
- s.status = s.standing
- return
- s.frame += 0.2
- if s.frame > MARIO_WALKING_LEFT[1]:
- s.frame = MARIO_WALKING_LEFT[0]
- def skidding_left(s):
- global MARIO_WALKING_LEFT, MARIO_WALKING_RIGHT, MARIO_DEACCELERATION
- if s.keys[pygame.K_LEFT]:
- s.frame = MARIO_WALKING_LEFT[0]
- s.status = s.walking_left
- return
- s.vel.x += MARIO_DEACCELERATION
- if s.vel.x > 0:
- s.frame = MARIO_WALKING_RIGHT[0]
- s.status = s.walking_right
- def update(s):
- s.keys = pygame.key.get_pressed()
- s.status()
- s.xy += s.vel
- BLACK = (0, 0, 0)
- WHITE = (255, 255, 255)
- GRAVITY = Vector2(0, 0.1)
- pygame.init()
- PDR = Rect(0, 0, 1280, 720)
- PDS = pygame.display.set_mode(PDR.size) #, pygame.FULLSCREEN | pygame.SCALED)
- MARIO_SPRITES = spritesheet("mario-sheet.png", 6, 2, 3)
- MARIO_STANDING_RIGHT = 0
- MARIO_WALKING_RIGHT = (1, 4)
- MARIO_JUMPING_RIGHT = 4
- MARIO_SKIDDING_RIGHT = 5
- MARIO_STANDING_LEFT = 6
- MARIO_WALKING_LEFT = (7, 10)
- MARIO_JUMPING_LEFT = 10
- MARIO_SKIDDING_LEFT = 11
- MARIO_MAX_SPEED = 4
- MARIO_DEACCELERATION = 0.15
- MARIO_ACCELERATION = 0.1
- MARIO = mario(PDR.center)
- exitDemo = False
- pause = False # press p to pause
- while not exitDemo:
- # handle the events
- events = pygame.event.get()
- for event in events:
- if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
- exitDemo = True
- if event.type == pygame.KEYDOWN and event.key == pygame.K_p:
- pause = 1 - pause
- if pause: continue
- PDS.fill(BLACK)
- MARIO.draw()
- MARIO.update()
- pygame.display.update()
- pygame.time.Clock().tick(60)
- pygame.quit()
Add Comment
Please, Sign In to add comment