]> bicyclesonthemoon.info Git - ott/molpy-up/commitdiff
fixed infinite-items mustard, implemented eternity and other cheating features, ...
authorPeter Gerwinski <peter.gerwinski@hs-bochum.de>
Mon, 2 Apr 2018 17:08:24 +0000 (19:08 +0200)
committerPeter Gerwinski <peter.gerwinski@hs-bochum.de>
Mon, 2 Apr 2018 17:08:24 +0000 (19:08 +0200)
molpyup.py

index 76a82d9ad79113ef73320e35c628c57e77a512b9..c0091a968711948333a48015e0d243860dab1396 100644 (file)
@@ -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()