]> bicyclesonthemoon.info Git - ott/molpy-up/commitdiff
spoilered cheating features a litte, implemented saving and restoring the game
authorPeter Gerwinski <peter.gerwinski@hs-bochum.de>
Mon, 2 Apr 2018 18:43:05 +0000 (20:43 +0200)
committerPeter Gerwinski <peter.gerwinski@hs-bochum.de>
Mon, 2 Apr 2018 18:43:05 +0000 (20:43 +0200)
molpyup.py

index c0091a968711948333a48015e0d243860dab1396..778273779d6d5a227d3dd2b359f5365641125b4e 100644 (file)
@@ -36,6 +36,7 @@
 import pygame
 from pygame.locals import *
 import sys
+import datetime
 import random
 
 class MolpyUp:
@@ -151,7 +152,6 @@ class MolpyUp:
         self.score = 0
         self.sandcastles = 0
         self.speed = 30
-        self.items = []
         self.playerx = self.sx // 2
         self.playery = self.sy * 3 // 4
         self.direction = 0
@@ -169,6 +169,72 @@ class MolpyUp:
         self.raftcastleHasFlag = False
         self.platforms = [[self.playerx, self.playery + self.sy // 6, self.platformTypeSand, 0, 0]]
         self.generateInitialPlatforms()
+        self.items = []
+        if self.filename:
+            self.restoreGame (self.filename)
+
+    def saveGame(self):
+        self.filename = datetime.datetime.now().strftime("%Y%m%d-%H%M%S.molpyup")
+        with open(self.filename, "w") as file:
+            file.write("MolpyUp!\n")
+            file.write("cameray: " + str(self.cameray) + "\n")
+            file.write("score: " + str(self.score) + "\n")
+            file.write("sandcastles: " + str(self.sandcastles) + "\n")
+            file.write("speed: " + str(self.speed) + "\n")
+            file.write("playerx: " + str(self.playerx) + "\n")
+            file.write("playery: " + str(self.playery) + "\n")
+            file.write("direction: " + str(self.direction) + "\n")
+            file.write("jump: " + str(self.jump) + "\n")
+            file.write("gravity: " + str(self.gravity) + "\n")
+            file.write("xmovement: " + str(self.xmovement) + "\n")
+            file.write("playerWearsBeanie: " + str(self.playerWearsBeanie) + "\n")
+            file.write("playerCarriesFlag: " + str(self.playerCarriesFlag) + "\n")
+            file.write("hadSnake: " + str(self.hadSnake) + "\n")
+            file.write("hadPrickly: " + str(self.hadPrickly) + "\n")
+            file.write("hadAfterLucky: " + str(self.hadAfterLucky) + "\n")
+            file.write("hadCastle: " + str(self.hadCastle) + "\n")
+            file.write("hadLucky: " + str(self.hadLucky) + "\n")
+            file.write("hadTheEnd: " + str(self.hadTheEnd) + "\n")
+            file.write("raftcastleHasFlag: " + str(self.raftcastleHasFlag) + "\n")
+            file.write("eternal: " + str(self.eternal) + "\n")
+            file.write("platforms: " + str(self.platforms) + "\n")
+            file.write("items: " + str(self.items) + "\n")
+
+    def readVariable(self, line, name, var):
+        if line.startswith(name + ": "):
+            return eval (line[len(name) + 2:])
+        else:
+            return var
+
+    def restoreGame(self, filename):
+        try:
+            with open(filename, "r") as file:
+                lines = file.readlines()
+            for line in lines:
+                self.cameray = self.readVariable(line, "cameray", self.cameray)
+                self.score = self.readVariable(line, "score", self.score)
+                self.sandcastles = self.readVariable(line, "sandcastles", self.sandcastles)
+                self.speed = self.readVariable(line, "speed", self.speed)
+                self.playerx = self.readVariable(line, "playerx", self.playerx)
+                self.playery = self.readVariable(line, "playery", self.playery)
+                self.direction = self.readVariable(line, "direction", self.direction)
+                self.jump = self.readVariable(line, "jump", self.jump)
+                self.gravity = self.readVariable(line, "gravity", self.gravity)
+                self.xmovement = self.readVariable(line, "xmovement", self.xmovement)
+                self.playerWearsBeanie = self.readVariable(line, "playerWearsBeanie", self.playerWearsBeanie)
+                self.playerCarriesFlag = self.readVariable(line, "playerCarriesFlag", self.playerCarriesFlag)
+                self.hadSnake = self.readVariable(line, "hadSnake", self.hadSnake)
+                self.hadPrickly = self.readVariable(line, "hadPrickly", self.hadPrickly)
+                self.hadAfterLucky = self.readVariable(line, "hadAfterLucky", self.hadAfterLucky)
+                self.hadCastle = self.readVariable(line, "hadCastle", self.hadCastle)
+                self.hadLucky = self.readVariable(line, "hadLucky", self.hadLucky)
+                self.hadTheEnd = self.readVariable(line, "hadTheEnd", self.hadTheEnd)
+                self.raftcastleHasFlag = self.readVariable(line, "raftcastleHasFlag", self.raftcastleHasFlag)
+                self.platforms = self.readVariable(line, "platforms", self.platforms)
+                self.items = self.readVariable(line, "items", self.items)
+            return True
+        except FileNotFoundError:
+            return False
 
     def updatePlayer(self):
         if not self.jump:        
@@ -527,6 +593,8 @@ class MolpyUp:
         self.waitForIt([K_RETURN])
 
     def run(self):
+        if len(sys.argv) > 1:
+            self.filename = sys.argv[1]
         self.reset()
         while True:
             self.screen.fill((255,255,255))
@@ -539,13 +607,19 @@ class MolpyUp:
                     if key[K_ESCAPE]:
                         sys.exit()
                     elif key[K_e]:
-                        self.eternal = not self.eternal
+                        if pygame.key.get_mods() and KMOD_CTRL:
+                            self.eternal = not self.eternal
                     elif key[K_f]:
-                        self.playerCarriesFlag = not self.playerCarriesFlag
+                        if pygame.key.get_mods() and KMOD_CTRL:
+                            self.playerCarriesFlag = not self.playerCarriesFlag
                     elif key[K_b]:
-                        self.playerWearsBeanie = not self.playerWearsBeanie
+                        if pygame.key.get_mods() and KMOD_CTRL:
+                            self.playerWearsBeanie = not self.playerWearsBeanie
                     elif key[K_SPACE]:
-                        self.waitForIt([K_SPACE])
+                        while self.waitForIt([K_SPACE, K_s]) == K_s:
+                            self.saveGame()
+                    elif key[K_s]:
+                        self.saveGame()
             self.drawGrid()
             self.drawPlatforms()
             self.drawAndUpdateItems()