144 lines
4.1 KiB
Python
144 lines
4.1 KiB
Python
import pygame
|
|
|
|
from .constants import tileSize
|
|
|
|
transparent = (0, 0, 0, 0)
|
|
|
|
playerPalette = {
|
|
"r": (216, 40, 0),
|
|
"s": (252, 188, 140),
|
|
"h": (100, 52, 16),
|
|
"o": (32, 56, 236),
|
|
"k": (0, 0, 0),
|
|
"y": (247, 213, 29),
|
|
}
|
|
|
|
playerPattern = [
|
|
"................",
|
|
"....rrrrrr......",
|
|
"...rrrrrrrrr....",
|
|
"...hhhssskss....",
|
|
"..hshsssksss....",
|
|
"..hhhssssksss...",
|
|
"..hhsssssssss...",
|
|
"....sssssss.....",
|
|
"...rrrrrrrr.....",
|
|
"..rrrrrrrrrr....",
|
|
".ssrroooorrss...",
|
|
".ssrooooooorss..",
|
|
"...ooyooyoo.....",
|
|
"...oooooooo.....",
|
|
"...ooo..ooo.....",
|
|
"..hhh....hhh....",
|
|
]
|
|
|
|
goombaPalette = {
|
|
"d": (60, 30, 10),
|
|
"m": (150, 75, 30),
|
|
"w": (255, 255, 255),
|
|
"k": (0, 0, 0),
|
|
"f": (20, 12, 8),
|
|
}
|
|
|
|
goombaPattern = [
|
|
"................",
|
|
".....dddddd.....",
|
|
"...ddmmmmmmdd...",
|
|
"..dmmmmmmmmmmd..",
|
|
".dmmmmmmmmmmmmd.",
|
|
".dmmwwmmmmwwmmd.",
|
|
".dmmwkmmmmwkmmd.",
|
|
".dmmwwmmmmwwmmd.",
|
|
".dmmmmmmmmmmmmd.",
|
|
".dmmmmmmmmmmmmd.",
|
|
"..dmmmmmmmmmmd..",
|
|
"...dmmmmmmmmd...",
|
|
"....dddddddd....",
|
|
"...ff....ff.....",
|
|
"..ffff..ffff....",
|
|
"................",
|
|
]
|
|
|
|
|
|
def patternSurface(pattern, palette):
|
|
surf = pygame.Surface((tileSize, tileSize), pygame.SRCALPHA)
|
|
for y, line in enumerate(pattern):
|
|
for x, code in enumerate(line):
|
|
if code == ".":
|
|
continue
|
|
surf.set_at((x, y), palette[code])
|
|
return surf
|
|
|
|
|
|
def coinSurface():
|
|
surf = pygame.Surface((tileSize, tileSize), pygame.SRCALPHA)
|
|
pygame.draw.ellipse(surf, (200, 160, 20), (3, 1, 10, 14))
|
|
pygame.draw.ellipse(surf, (247, 213, 29), (4, 2, 8, 12))
|
|
pygame.draw.rect(surf, (255, 245, 170), (6, 4, 1, 8))
|
|
return surf
|
|
|
|
|
|
def groundSurface():
|
|
surf = pygame.Surface((tileSize, tileSize))
|
|
surf.fill((198, 100, 29))
|
|
pygame.draw.rect(surf, (222, 140, 80), (0, 0, tileSize, 4))
|
|
pygame.draw.line(surf, (120, 60, 15), (0, tileSize - 1), (tileSize - 1, tileSize - 1))
|
|
pygame.draw.line(surf, (120, 60, 15), (tileSize - 1, 0), (tileSize - 1, tileSize - 1))
|
|
for spot in ((4, 8), (11, 6), (7, 12), (13, 11)):
|
|
surf.set_at(spot, (150, 74, 18))
|
|
return surf
|
|
|
|
|
|
def brickSurface():
|
|
surf = pygame.Surface((tileSize, tileSize))
|
|
surf.fill((181, 94, 41))
|
|
mortar = (74, 38, 18)
|
|
pygame.draw.line(surf, mortar, (0, 0), (tileSize - 1, 0))
|
|
pygame.draw.line(surf, mortar, (0, 8), (tileSize - 1, 8))
|
|
pygame.draw.line(surf, mortar, (8, 1), (8, 7))
|
|
pygame.draw.line(surf, mortar, (0, 9), (0, tileSize - 1))
|
|
pygame.draw.line(surf, mortar, (15, 9), (15, tileSize - 1))
|
|
return surf
|
|
|
|
|
|
def platformSurface():
|
|
surf = pygame.Surface((tileSize, tileSize))
|
|
surf.fill((217, 164, 65))
|
|
pygame.draw.rect(surf, (150, 100, 30), (0, 0, tileSize, tileSize), 1)
|
|
pygame.draw.rect(surf, (247, 213, 29), (2, 2, tileSize - 4, 3))
|
|
for spot in ((2, 2), (13, 2), (2, 13), (13, 13)):
|
|
surf.set_at(spot, (90, 58, 18))
|
|
return surf
|
|
|
|
|
|
def pipeSurface(top, leftSide):
|
|
surf = pygame.Surface((tileSize, tileSize))
|
|
surf.fill((0, 168, 0))
|
|
if leftSide:
|
|
pygame.draw.rect(surf, (128, 232, 128), (2, 0, 3, tileSize))
|
|
pygame.draw.line(surf, (0, 96, 0), (0, 0), (0, tileSize - 1))
|
|
else:
|
|
pygame.draw.rect(surf, (72, 200, 72), (8, 0, 3, tileSize))
|
|
pygame.draw.rect(surf, (0, 96, 0), (13, 0, 3, tileSize))
|
|
if top:
|
|
pygame.draw.rect(surf, (0, 200, 0), (0, 0, tileSize, 6))
|
|
pygame.draw.rect(surf, (0, 96, 0), (0, 0, tileSize, 6), 1)
|
|
if leftSide:
|
|
pygame.draw.rect(surf, (160, 255, 160), (2, 1, 3, 4))
|
|
return surf
|
|
|
|
|
|
def buildSprites():
|
|
return {
|
|
"player": patternSurface(playerPattern, playerPalette),
|
|
"goomba": patternSurface(goombaPattern, goombaPalette),
|
|
"coin": coinSurface(),
|
|
"ground": groundSurface(),
|
|
"brick": brickSurface(),
|
|
"platform": platformSurface(),
|
|
"pipeTL": pipeSurface(True, True),
|
|
"pipeTR": pipeSurface(True, False),
|
|
"pipeBL": pipeSurface(False, True),
|
|
"pipeBR": pipeSurface(False, False),
|
|
}
|