self.font = pygame.font.SysFont("xkcd,sans", 25)
self.clock = pygame.time.Clock()
self.xmovementmax = 10
+ self.eternal = False
self.imgPlatformSand = [ pygame.image.load("assets/platformSand1.png").convert_alpha(),
pygame.image.load("assets/platformSand2.png").convert_alpha(),
pygame.image.load("assets/platformSand3.png").convert_alpha(),
self.hadTheEnd = False
self.raftcastleHasFlag = False
self.platforms = [[self.playerx, self.playery + self.sy // 6, self.platformTypeSand, 0, 0]]
- self.generatePlatforms()
+ self.generateInitialPlatforms()
def updatePlayer(self):
if not self.jump:
if self.playerCarriesFlag:
self.screen.blit(self.imgFlagRightDown, (self.playerx + 11, self.playery - 10 - self.cameray))
+ def choosePlatformType(self):
+ if self.score >= self.scoreTheEnd:
+ return self.platformTypeTheEnd
+ platformType = random.randint(0, 999)
+ if self.score > self.scoreWater:
+ if platformType < 900:
+ return self.platformTypeWater
+ else:
+ return self.platformTypeRaftcastle
+ elif platformType < 800:
+ if platformType < 1000 * self.score // self.scoreGrass:
+ if self.score > self.scoreAfterLucky and not self.hadAfterLucky:
+ self.hadAfterLucky = True
+ return self.platformTypeAfterLucky
+ elif self.score > self.scoreCastle and not self.hadCastle:
+ self.hadCastle = True
+ return self.platformTypeCastle
+ elif self.score > self.scoreLucky and not self.hadLucky:
+ self.hadLucky = True
+ return self.platformTypeLucky
+ else:
+ return self.platformTypeGrass
+ else:
+ return self.platformTypeSand
+ elif platformType < 900:
+ return self.platformTypeGrapevine
+ else:
+ return self.platformTypeBreaking
+
+ def generateNewPlatform(self):
+ platformType = self.choosePlatformType()
+ if platformType == self.platformTypeTheEnd:
+ if not self.hadTheEnd:
+ self.platforms.append([self.sx // 2 - self.imgPlatformTheEnd.get_width() // 2, self.platforms[-1][1] - self.sy // 4, self.platformTypeTheEnd, False, False])
+ self.platforms.append([self.sx // 2 - self.imgPlatformWonTheGame.get_width() // 2, self.platforms[-1][1] - self.sy * 2 // 3, self.platformTypeWonTheGame, False, False])
+ self.hadTheEnd = True
+ elif platformType == self.platformTypeWater or platformType == self.platformTypeRaftcastle:
+ self.platforms.append([random.randint(0, self.sx * 7 // 8), self.platforms[-1][1] - self.sy // 8, platformType, False, False])
+ elif platformType == self.platformTypeLucky:
+ self.platforms.append([0, self.platforms[-1][1] - self.sy // 12, platformType, False, False])
+ else:
+ self.platforms.append([random.randint(0, self.sx * 7 // 8), self.platforms[-1][1] - self.sy // 12, platformType, False, False])
+ if platformType <= self.platformTypeNormal:
+ if platformType == self.platformTypeSand:
+ self.platforms[-1][-1] = random.randint(0, len(self.imgPlatformSand) - 1)
+ elif platformType == self.platformTypeGrass:
+ self.platforms[-1][-1] = random.randint(0, len(self.imgPlatformGrass) - 1)
+ else:
+ self.platforms[-1][-1] = random.randint(0, len(self.imgPlatformWater) - 1)
+ x = self.platforms[-1][0]
+ y = self.platforms[-1][1]
+ if platformType == self.platformTypeGrass and self.score > self.scoreSnake and not self.hadSnake:
+ self.items.append([x - 10, y + 9, self.itemTypeSnake, False])
+ self.hadSnake = True
+ elif platformType == self.platformTypeGrass and self.score > self.scorePrickly and not self.hadPrickly:
+ self.items.append([x + self.imgPlatformSand[0].get_width() // 3, y + 8, self.itemTypePrickly, False])
+ self.hadPrickly = True
+ else:
+ check = random.randint(0, 999)
+ if check > 800:
+ xx = x + random.randint(0, self.imgPlatformSand[0].get_width() - 40)
+ itemType = random.randint(0,999)
+ if itemType < 50:
+ self.items.append([xx, y + 7, self.itemTypeBeanie, False])
+ elif itemType < 150 and platformType == self.platformTypeSand:
+ self.items.append([xx, y + 7, self.itemTypeSandcastle, False])
+ elif itemType < 350 and platformType == self.platformTypeSand:
+ self.items.append([xx, y + 7, self.itemTypeFlag, False])
+ elif itemType < 950 and platformType == self.platformTypeSand:
+ self.items.append([xx, y + 8, self.itemTypePlantSand, itemType % len(self.imgPlantSand)])
+ elif itemType < 100 and platformType == self.platformTypeGrass:
+ self.items.append([xx, y + 6, self.itemTypeFlag, False])
+ elif itemType < 700 and platformType == self.platformTypeGrass:
+ self.items.append([xx, y + 10, self.itemTypePlantGrass, itemType % len(self.imgPlantGrass)])
+ elif itemType < 850 and platformType == self.platformTypeGrass and self.score > self.scorePrickly:
+ self.items.append([xx, y + 8, self.itemTypePrickly, False])
+ elif itemType < 950 and platformType == self.platformTypeGrass and self.score > self.scoreSnake:
+ self.items.append([x - 10, y + 9, self.itemTypeSnake, False])
+ else:
+ self.items.append([xx - 5, y + 10, self.itemTypeAccelerator, False])
+
def updatePlatforms(self):
+ while self.platforms[0][1] - self.cameray > self.sy + self.sy // 12:
+ self.generateNewPlatform()
+ self.platforms.pop(0)
+ if self.score < self.scoreEpilogue:
+ self.score += 1
for p in self.platforms:
if p[2] == self.platformTypeGrapevine:
img = self.imgPlatformGrapevine
else:
self.jump = self.sy // 20
self.gravity = 0
- if p[2] == self.platformTypeLucky and not self.playerCarriesFlag and p[-2] <= 0:
+ if p[2] == self.platformTypeLucky and not (self.playerWearsBeanie and self.playerCarriesFlag) and p[-2] <= 0:
self.xmovement = self.sx // 20
self.direction = 0
self.cameray -= self.sy // 12
if p[0] <= 0:
p[-1] = True
- def choosePlatformType(self):
- if self.score >= self.scoreTheEnd:
- return self.platformTypeTheEnd
- platformType = random.randint(0, 999)
- if self.score > self.scoreWater:
- if platformType < 900:
- return self.platformTypeWater
- else:
- return self.platformTypeRaftcastle
- elif platformType < 800:
- if platformType < 1000 * self.score // self.scoreGrass:
- if self.score > self.scoreAfterLucky and not self.hadAfterLucky:
- self.hadAfterLucky = True
- return self.platformTypeAfterLucky
- elif self.score > self.scoreCastle and not self.hadCastle:
- self.hadCastle = True
- return self.platformTypeCastle
- elif self.score > self.scoreLucky and not self.hadLucky:
- self.hadLucky = True
- return self.platformTypeLucky
- else:
- return self.platformTypeGrass
- else:
- return self.platformTypeSand
- elif platformType < 900:
- return self.platformTypeGrapevine
- else:
- return self.platformTypeBreaking
-
def drawPlatforms(self):
for p in self.platforms:
- check = self.platforms[1][1] - self.cameray
- if check > self.sy:
- platformType = self.choosePlatformType()
- if platformType == self.platformTypeTheEnd:
- if not self.hadTheEnd:
- self.platforms.append([self.sx // 2 - self.imgPlatformTheEnd.get_width() // 2, self.platforms[-1][1] - self.sy // 4, self.platformTypeTheEnd, False, False])
- self.platforms.append([self.sx // 2 - self.imgPlatformWonTheGame.get_width() // 2, self.platforms[-1][1] - self.sy * 2 // 3, self.platformTypeWonTheGame, False, False])
- self.hadTheEnd = True
- elif platformType == self.platformTypeWater or platformType == self.platformTypeRaftcastle:
- self.platforms.append([random.randint(0, self.sx * 7 // 8), self.platforms[-1][1] - self.sy // 8, platformType, False, False])
- elif platformType == self.platformTypeLucky:
- self.platforms.append([0, self.platforms[-1][1] - self.sy // 12, platformType, False, False])
- else:
- self.platforms.append([random.randint(0, self.sx * 7 // 8), self.platforms[-1][1] - self.sy // 12, platformType, False, False])
- if platformType <= self.platformTypeNormal:
- if platformType == self.platformTypeSand:
- self.platforms[-1][-1] = random.randint(0, len(self.imgPlatformSand) - 1)
- elif platformType == self.platformTypeGrass:
- self.platforms[-1][-1] = random.randint(0, len(self.imgPlatformGrass) - 1)
- else:
- self.platforms[-1][-1] = random.randint(0, len(self.imgPlatformWater) - 1)
- x = self.platforms[-1][0]
- y = self.platforms[-1][1]
- if platformType == self.platformTypeGrass and self.score > self.scoreSnake and not self.hadSnake:
- self.items.append([x - 10, y + 9, self.itemTypeSnake, False])
- self.hadSnake = True
- elif platformType == self.platformTypeGrass and self.score > self.scorePrickly and not self.hadPrickly:
- self.items.append([x + self.imgPlatformSand[0].get_width() // 3, y + 8, self.itemTypePrickly, False])
- self.hadPrickly = True
- else:
- check = random.randint(0, 999)
- if check > 800:
- xx = x + random.randint(0, self.imgPlatformSand[0].get_width() - 40)
- itemType = random.randint(0,999)
- if itemType < 50:
- self.items.append([xx, y + 7, self.itemTypeBeanie, False])
- elif itemType < 150 and platformType == self.platformTypeSand:
- self.items.append([xx, y + 7, self.itemTypeSandcastle, False])
- elif itemType < 350 and platformType == self.platformTypeSand:
- self.items.append([xx, y + 7, self.itemTypeFlag, False])
- elif itemType < 950 and platformType == self.platformTypeSand:
- self.items.append([xx, y + 8, self.itemTypePlantSand, itemType % len(self.imgPlantSand)])
- elif itemType < 100 and platformType == self.platformTypeGrass:
- self.items.append([xx, y + 6, self.itemTypeFlag, False])
- elif itemType < 700 and platformType == self.platformTypeGrass:
- self.items.append([xx, y + 10, self.itemTypePlantGrass, itemType % len(self.imgPlantGrass)])
- elif itemType < 850 and platformType == self.platformTypeGrass and self.score > self.scorePrickly:
- self.items.append([xx, y + 8, self.itemTypePrickly, False])
- elif itemType < 950 and platformType == self.platformTypeGrass and self.score > self.scoreSnake:
- self.items.append([x - 10, y + 9, self.itemTypeSnake, False])
- else:
- self.items.append([xx - 5, y + 10, self.itemTypeAccelerator, False])
- self.platforms.pop(0)
- if self.score < self.scoreEpilogue:
- self.score += 1
if p[2] == self.platformTypeSand:
self.screen.blit(self.imgPlatformSand[p[-1]], (p[0], p[1] - self.cameray))
elif p[2] == self.platformTypeGrass:
self.screen.blit(self.imgPlatformTheEnd, (p[0], p[1] - self.cameray))
elif p[2] == self.platformTypeWonTheGame:
self.screen.blit(self.imgPlatformWonTheGame, (p[0], p[1] - self.cameray))
+
+ def drawAndUpdateItems(self):
+ while self.items and self.items[0][1] - self.cameray > self.sy + self.sy // 12:
+ self.items.pop(0)
for item in self.items:
if item[2] == self.itemTypeAccelerator:
if item[-1]:
self.playerCarriesFlag = True
item[-1] = True
- def generatePlatforms(self):
+ def generateInitialPlatforms(self):
on = self.sy
while on > -self.sy // 6:
x = random.randint(0, self.sx * 8 // 7)
key = pygame.key.get_pressed()
if key[K_ESCAPE]:
sys.exit()
+ elif key[K_e]:
+ self.eternal = not self.eternal
+ elif key[K_f]:
+ self.playerCarriesFlag = not self.playerCarriesFlag
+ elif key[K_b]:
+ self.playerWearsBeanie = not self.playerWearsBeanie
elif key[K_SPACE]:
self.waitForIt([K_SPACE])
self.drawGrid()
self.drawPlatforms()
+ self.drawAndUpdateItems()
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()
+ if self.eternal:
+ self.jump = self.gravity
+ self.gravity = 0
+ else:
+ self.showScore()
+ self.reset()
pygame.display.flip()
MolpyUp().run()