pygame.font.init()
self.font = pygame.font.SysFont("xkcd,sans", 25)
self.xmovementmax = 10
- self.platformTypeNormal = 0
- self.platformTypeFloating = 1
- self.platformTypeBreaking = 2
+ self.platformTypeSand = 0
+ self.platformTypeGrass = 1
+ self.platformTypeFloating = 2
+ self.platformTypeBreaking = 3
self.itemTypeAccelerator = 0
self.itemTypeBeanie = 1
- self.imgPlatformNormal = pygame.image.load("assets/platformNormal.png").convert_alpha()
+ self.itemTypeSandcastle = 2
+ self.itemTypeFlag = 3
+ self.imgPlatformSand = pygame.image.load("assets/platformSand.png").convert_alpha()
+ self.imgPlatformGrass = pygame.image.load("assets/platformGrass.png").convert_alpha()
self.imgPlatformFloating = pygame.image.load("assets/platformFloating.png").convert_alpha()
self.imgPlatformBreaking = pygame.image.load("assets/platformBreaking.png").convert_alpha()
self.imgPlatformBroken = pygame.image.load("assets/platformBroken.png").convert_alpha()
self.imgAccelerator = pygame.image.load("assets/accelerator.png").convert_alpha()
self.imgAcceleratorUsed = pygame.image.load("assets/acceleratorUsed.png").convert_alpha()
self.imgBeanie = pygame.image.load("assets/beanie.png").convert_alpha()
+ self.imgSandcastle = pygame.image.load("assets/sandcastle.png").convert_alpha()
+ self.imgFlagLeft = pygame.image.load("assets/flagLeft.png").convert_alpha()
+ self.imgFlagRight = pygame.image.load("assets/flagRight.png").convert_alpha()
def reset(self):
self.cameray = 0
self.score = 0
+ self.sandcastles = 0
self.items = []
self.playerx = self.sx // 2
self.playery = self.sy * 3 // 4
self.gravity = 0
self.xmovement = 0
self.playerWearsBeanie = False
- self.platforms = [[self.playerx, self.playery + self.sy // 6, self.platformTypeNormal, False]]
+ self.playerCarriesFlag = False
+ self.platforms = [[self.playerx, self.playery + self.sy // 6, self.platformTypeSand, False]]
self.generatePlatforms()
def updatePlayer(self):
self.screen.blit(self.imgPlayerRightUpBeanie, (self.playerx, self.playery - self.cameray))
else:
self.screen.blit(self.imgPlayerRightUp, (self.playerx, self.playery - self.cameray))
+ if self.playerCarriesFlag:
+ self.screen.blit(self.imgFlagLeft, (self.playerx + 25, self.playery - 10 - self.cameray))
else:
if self.jump:
if self.playerWearsBeanie:
self.screen.blit(self.imgPlayerLeftUpBeanie, (self.playerx, self.playery - self.cameray))
else:
self.screen.blit(self.imgPlayerLeftUp, (self.playerx, self.playery - self.cameray))
+ if self.playerCarriesFlag:
+ self.screen.blit(self.imgFlagRight, (self.playerx + 10, self.playery - 10 - self.cameray))
def updatePlatforms(self):
for p in self.platforms:
- rect = pygame.Rect(p[0], p[1], self.imgPlatformNormal.get_width() - 10, self.imgPlatformNormal.get_height())
+ rect = pygame.Rect(p[0], p[1], self.imgPlatformSand.get_width() - 10, self.imgPlatformSand.get_height())
player = pygame.Rect(self.playerx, self.playery, self.imgPlayerRightUp.get_width() - 10, self.imgPlayerRightUp.get_height())
if rect.colliderect(player) and self.gravity and self.playery < (p[1] - self.cameray):
- if p[2] != 2:
+ if p[2] != self.platformTypeBreaking:
self.jump = self.sy // 20
self.gravity = 0
else:
p[-1] = 1
- if p[2] == 1:
+ if p[2] == self.platformTypeFloating:
if p[-1] == 1:
p[0] += self.extrax // 10
- if p[0] > self.sx + self.extrax:
+ if p[0] + self.imgPlatformFloating.get_width() > self.sx + self.extrax:
p[-1] = 0
else:
p[0] -= self.extrax // 10
if p[0] <= 0:
p[-1] = 1
+ def choosePlatformType(self):
+ platformType = random.randint(0, 1000)
+ if platformType < 800:
+ if platformType < self.score:
+ return self.platformTypeGrass
+ else:
+ return self.platformTypeSand
+ elif platformType < 900:
+ return self.platformTypeFloating
+ else:
+ return self.platformTypeBreaking
+
def drawPlatforms(self):
for p in self.platforms:
check = self.platforms[1][1] - self.cameray
if check > self.sy:
- platformType = random.randint(0, 1000)
- if platformType < 800:
- platformType = 0
- elif platformType < 900:
- platformType = 1
- else:
- platformType = 2
+ platformType = self.choosePlatformType()
self.platforms.append([random.randint(0, self.sx * 7 // 8), self.platforms[-1][1] - self.sy // 12, platformType, False])
check = random.randint(0, 1000)
- if check > 900 and platformType == 0:
+ if check > 900 and platformType <= self.platformTypeGrass:
x = self.platforms[-1][0]
y = self.platforms[-1][1]
itemType = random.randint(0,1000)
- if itemType < 900:
+ if itemType < 100:
+ itemType = self.itemTypeBeanie
+ self.items.append([x + self.imgPlatformSand.get_width() * 3 // 4, y + 6, itemType, False])
+ elif itemType < 300 and platformType == self.platformTypeSand:
+ itemType = self.itemTypeSandcastle
+ self.items.append([x + self.imgPlatformSand.get_width() // 4, y + 6, itemType, False])
+ elif itemType < 800 and platformType == self.platformTypeSand:
+ itemType = self.itemTypeFlag
+ self.items.append([x + self.imgPlatformSand.get_width() // 2, y + 6, itemType, False])
+ else:
itemType = self.itemTypeAccelerator
self.items.append([x, y + 10, itemType, False])
- else:
- itemType = self.itemTypeBeanie
- self.items.append([x + self.imgPlatformNormal.get_width() * 3 // 4, y + 6, itemType, False])
self.platforms.pop(0)
self.score += 1
- if p[2] == self.platformTypeNormal:
- self.screen.blit(self.imgPlatformNormal, (p[0], p[1] - self.cameray))
+ if p[2] == self.platformTypeSand:
+ self.screen.blit(self.imgPlatformSand, (p[0], p[1] - self.cameray))
+ elif p[2] == self.platformTypeGrass:
+ self.screen.blit(self.imgPlatformGrass, (p[0], p[1] - self.cameray))
elif p[2] == self.platformTypeFloating:
self.screen.blit(self.imgPlatformFloating, (p[0], p[1] - self.cameray))
elif p[2] == self.platformTypeBreaking:
imgItem = self.imgBeanie
else:
imgItem = None
+ elif item[2] == self.itemTypeSandcastle:
+ imgItem = self.imgSandcastle
+ if item[-1]:
+ self.screen.blit(self.imgFlagRight, (item[0] + 4, item[1] - imgItem.get_height() + 2 - self.imgFlagRight.get_height() - self.cameray))
+ elif item[2] == self.itemTypeFlag:
+ if not item[-1]:
+ imgItem = self.imgFlagRight
+ else:
+ imgItem = None
if imgItem:
self.screen.blit(imgItem, (item[0], item[1] - imgItem.get_height() - self.cameray))
if not item[-1]:
self.jump = self.sy // 12
self.cameray -= self.sy // 12
item[-1] = True
- elif item[2] == self.itemTypeBeanie:
+ elif item[2] == self.itemTypeBeanie and not self.playerWearsBeanie:
self.playerWearsBeanie = True
item[-1] = True
+ elif item[2] == self.itemTypeSandcastle and self.playerCarriesFlag:
+ self.playerCarriesFlag = False
+ item[-1] = True
+ self.sandcastles += 1
+ elif item[2] == self.itemTypeFlag and not self.playerCarriesFlag:
+ self.playerCarriesFlag = True
+ item[-1] = True
def generatePlatforms(self):
on = self.sy
while on > -self.sy // 6:
x = random.randint(0,self.sx * 8 // 7)
- platformType = random.randint(0, 1000)
- if platformType < 800:
- platformType = self.platformTypeNormal
- elif platformType < 900:
- platformType = self.platformTypeFloating
- else:
- platformType = self.platformTypeBreaking
- self.platforms.append([x, on, platformType, 0])
+ self.platforms.append([x, on, self.choosePlatformType(), 0])
on -= self.sy // 12
def drawGrid(self):
self.reset()
while True:
self.screen.fill((255,255,255))
- clock.tick(60)
+ clock.tick(40)
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
self.updatePlayer()
self.updatePlatforms()
self.screen.blit(self.font.render(str(self.score), -1, (0, 0, 0)), (self.sx // 32, self.sy // 24))
+ for i in range(0, self.sandcastles):
+ self.screen.blit(self.imgFlagRight, (self.sx // 32 + 10 * i, self.sy // 8))
if self.playery - self.cameray > self.sy * 7 // 6:
self.showScore()
self.reset()