From 09a7585f5d15ccdecea6e746165d86ecea036ca7 Mon Sep 17 00:00:00 2001 From: Peter Gerwinski Date: Mon, 2 Apr 2018 19:08:24 +0200 Subject: [PATCH] fixed infinite-items mustard, implemented eternity and other cheating features, (hopefully) improved Lucky --- molpyup.py | 196 +++++++++++++++++++++++++++++------------------------ 1 file changed, 107 insertions(+), 89 deletions(-) diff --git a/molpyup.py b/molpyup.py index 76a82d9..c0091a9 100644 --- a/molpyup.py +++ b/molpyup.py @@ -83,6 +83,7 @@ class MolpyUp: 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(), @@ -167,7 +168,7 @@ class MolpyUp: 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: @@ -240,7 +241,93 @@ class MolpyUp: 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 @@ -261,7 +348,7 @@ class MolpyUp: 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 @@ -290,92 +377,8 @@ class MolpyUp: 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: @@ -412,6 +415,10 @@ class MolpyUp: 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]: @@ -480,7 +487,7 @@ class MolpyUp: 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) @@ -531,18 +538,29 @@ class MolpyUp: 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() -- 2.30.2