added snakegame main
authorNils Forssén <nilfo359@student.liu.se>
Fri, 31 Jan 2025 22:29:15 +0000 (23:29 +0100)
committerNils Forssén <nilfo359@student.liu.se>
Fri, 31 Jan 2025 22:29:15 +0000 (23:29 +0100)
Pre-PC stuff/SnakeGame [deleted submodule]
SnakeGame/Fonts/Countdown.TTF [new file with mode: 0644]
SnakeGame/Images/Apple.png [new file with mode: 0644]
SnakeGame/Images/BackGround.png [new file with mode: 0644]
SnakeGame/Images/SnakeBody.png [new file with mode: 0644]
SnakeGame/Images/SnakeHead.png [new file with mode: 0644]
SnakeGame/Images/SnakeTail.png [new file with mode: 0644]
SnakeGame/Images/SnakeTurn.png [new file with mode: 0644]
SnakeGame/README.md [new file with mode: 0644]
SnakeGame/SnakeGame.py [new file with mode: 0644]

diff --git a/Pre-PC stuff/SnakeGame b/Pre-PC stuff/SnakeGame
deleted file mode 160000 (submodule)
index 6b4ef48..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 6b4ef483690497a97acaeaf6f81790647495292e
diff --git a/SnakeGame/Fonts/Countdown.TTF b/SnakeGame/Fonts/Countdown.TTF
new file mode 100644 (file)
index 0000000..3ce455d
Binary files /dev/null and b/SnakeGame/Fonts/Countdown.TTF differ
diff --git a/SnakeGame/Images/Apple.png b/SnakeGame/Images/Apple.png
new file mode 100644 (file)
index 0000000..747c4b4
Binary files /dev/null and b/SnakeGame/Images/Apple.png differ
diff --git a/SnakeGame/Images/BackGround.png b/SnakeGame/Images/BackGround.png
new file mode 100644 (file)
index 0000000..a0489cb
Binary files /dev/null and b/SnakeGame/Images/BackGround.png differ
diff --git a/SnakeGame/Images/SnakeBody.png b/SnakeGame/Images/SnakeBody.png
new file mode 100644 (file)
index 0000000..b530c1f
Binary files /dev/null and b/SnakeGame/Images/SnakeBody.png differ
diff --git a/SnakeGame/Images/SnakeHead.png b/SnakeGame/Images/SnakeHead.png
new file mode 100644 (file)
index 0000000..5ebc735
Binary files /dev/null and b/SnakeGame/Images/SnakeHead.png differ
diff --git a/SnakeGame/Images/SnakeTail.png b/SnakeGame/Images/SnakeTail.png
new file mode 100644 (file)
index 0000000..7293962
Binary files /dev/null and b/SnakeGame/Images/SnakeTail.png differ
diff --git a/SnakeGame/Images/SnakeTurn.png b/SnakeGame/Images/SnakeTurn.png
new file mode 100644 (file)
index 0000000..da5ca71
Binary files /dev/null and b/SnakeGame/Images/SnakeTurn.png differ
diff --git a/SnakeGame/README.md b/SnakeGame/README.md
new file mode 100644 (file)
index 0000000..ebc8b8b
--- /dev/null
@@ -0,0 +1,5 @@
+# snakegame\r
+\r
+Snakegame I created 6 years ago, just thought It'd be nice to upload it here incase anyone is interested and for my own memory.\r
+\r
+Ignore the awful code, this was a beginner project.\r
diff --git a/SnakeGame/SnakeGame.py b/SnakeGame/SnakeGame.py
new file mode 100644 (file)
index 0000000..8ef37ce
--- /dev/null
@@ -0,0 +1,198 @@
+import random,time,os,sys\r
+import pygame as pg\r
+from pygame import Surface\r
+from pygame.locals import *\r
+\r
+class Resources():\r
+    def __init__(self):\r
+        self.imageLibrary = {}\r
+        self.fontLibrary = {}\r
+        self.turnSwitch = {\r
+            (0,90):90,\r
+            (0,270):180,\r
+            (90,180):180,\r
+            (90,0):270,\r
+            (180,90):0,\r
+            (180,270):270,\r
+            (270,0):0,\r
+            (270,180):90\r
+        }\r
+        \r
+    def image(self,path):\r
+        image = self.imageLibrary.get(path)\r
+        if image == None:\r
+            canonicalizedPath = path.replace("/", os.sep).replace("\\", os.sep)\r
+            image = pg.image.load(canonicalizedPath)\r
+            self.imageLibrary[path] = image\r
+        return image\r
+\r
+    def font(self,path,size):\r
+        font = self.fontLibrary.get(path)\r
+        if font == None:\r
+            font = pg.font.Font(path,size)\r
+            self.fontLibrary[path] = font\r
+        return font\r
+\r
+\r
+class Snake():\r
+    def __init__(self,square = 25):\r
+        self.square = square\r
+        self.dx = 0\r
+        self.dy = 1\r
+        self.headx = 0\r
+        self.heady = 0\r
+        self.applex = 0\r
+        self.appley = 0\r
+        self.direction = 180\r
+        self.dead = False\r
+\r
+        self.screen = pg.display.get_surface()\r
+        self.screenRect = self.screen.get_rect()\r
+        self.screenW = self.screen.get_width()\r
+        self.screenH = self.screen.get_height()\r
+        \r
+        self.get = Resources()\r
+        self.headImg = pg.transform.smoothscale(self.get.image("Images/SnakeHead.png"),(self.square,self.square))\r
+        self.bodyImg = pg.transform.smoothscale(self.get.image("Images/SnakeBody.png"),(self.square,self.square))\r
+        self.turnImg = pg.transform.smoothscale(self.get.image("Images/SnakeTurn.png"),(self.square,self.square))\r
+        self.tailImg = pg.transform.smoothscale(self.get.image("Images/SnakeTail.png"),(self.square,self.square))\r
+        self.appleImg = pg.transform.smoothscale(self.get.image("Images/Apple.png"),(self.square,self.square))\r
+        self.backImg = pg.transform.smoothscale(self.get.image("Images/BackGround.png"),(self.screenW,self.screenH))\r
+        self.countdownFont = self.get.font("Fonts/Countdown.ttf",200)\r
+\r
+        self.snakeBody = [(-500,-500),(-500,-500)]\r
+        self.snakeLength = len(self.snakeBody)\r
+        self.directionList = [(0,180,self.tailImg),(0,180,self.tailImg)]\r
+        \r
+        self.addApple()\r
+\r
+    def runSnake(self):\r
+        self.headx += self.square*self.dx\r
+        self.heady += self.square*self.dy\r
+        self.snakeBody.insert(0,(self.headx-(self.square*self.dx),self.heady-(self.square*self.dy)))\r
+        if self.directionList[0][1] == self.direction:\r
+            self.directionList.insert(0,(self.direction,self.direction,self.bodyImg))\r
+        else:\r
+            self.directionList.insert(0,(self.get.turnSwitch.get((self.directionList[0][1],self.direction)),self.direction,self.turnImg))\r
+        self.snakeBody.pop()\r
+        self.directionList.pop()\r
+        self.snakeLength = len(self.snakeBody)\r
+        for cordinate in self.snakeBody:\r
+            if cordinate == (self.headx,self.heady):\r
+                self.dead = True\r
+                break\r
+        if self.headx < 0 or self.headx == self.screenW or self.heady < 0 or self.heady == self.screenH:\r
+            self.dead = True\r
+        elif (self.headx,self.heady) == (self.applex,self.appley):\r
+            if self.snakeLength < 2:\r
+                self.snakeBody.append((self.headx-(self.square*self.dx),self.heady-(self.square*self.dy)))\r
+                self.directionList.append((0,self.directionList[self.snakeLength-1][1],self.bodyImg))\r
+            else:\r
+                self.snakeBody.append((self.snakeBody[self.snakeLength-1][0]-(self.snakeBody[self.snakeLength-1][0]-self.snakeBody[self.snakeLength-2][0]),self.snakeBody[self.snakeLength-1][1]-(self.snakeBody[self.snakeLength-1][1]-self.snakeBody[self.snakeLength-2][1])))\r
+                self.directionList.append((0,self.directionList[self.snakeLength-1][1],self.bodyImg))\r
+            self.addApple()\r
+        return self.dead\r
+\r
+    def addApple(self):\r
+        hit = True\r
+        while hit:\r
+            x = random.choice([possibleSpawn for possibleSpawn in range(self.screenW) if possibleSpawn % self.square == 0])\r
+            y = random.choice([possibleSpawn for possibleSpawn in range(self.screenH) if possibleSpawn % self.square == 0])\r
+            for cordinate in self.snakeBody:\r
+                if cordinate == (x,y):\r
+                    hit = True\r
+                    break\r
+                else:\r
+                    hit = False\r
+        self.applex = x\r
+        self.appley = y\r
+    \r
+    def drawField(self):\r
+        self.screen.blit(self.backImg,self.screenRect)\r
+\r
+    def drawSnakeGame(self):\r
+        self.drawField()\r
+        self.screen.blit(self.appleImg,(self.applex,self.appley))\r
+        for body in range(self.snakeLength-1):\r
+            pass\r
+            self.screen.blit(pg.transform.rotate(self.directionList[body][2],self.directionList[body][0]),self.snakeBody[body])\r
+        self.screen.blit(pg.transform.rotate(self.tailImg,self.directionList[len(self.directionList)-1][1]),self.snakeBody[self.snakeLength-1])\r
+        self.screen.blit(pg.transform.rotate(self.headImg,self.direction),(self.headx,self.heady))\r
+    \r
+    def drawCountdown(self,text,alpha=255,color=Color("red")):\r
+        textSurface = self.countdownFont.render(text,True,color)\r
+        alphaImg = pg.Surface(textSurface.get_rect().size,pg.SRCALPHA)\r
+        alphaImg.fill((255,255,255,alpha))\r
+        textSurface.blit(alphaImg,(0,0),special_flags=pg.BLEND_RGBA_MULT)\r
+        textRect = textSurface.get_rect(center = self.screenRect.center)\r
+        self.screen.blit(textSurface,textRect)\r
+\r
+        \r
+class Game():\r
+    def __init__(self):\r
+        pg.init()\r
+        self.screen = pg.display.set_mode((400,400))\r
+        self.snakeFunctions = Snake()\r
+        self.gameSpeed = 8\r
+        self.countdownLength = 3\r
+        self.framesPerCount = 100\r
+        self.clock = pg.time.Clock()\r
+        self.running = True\r
+        \r
+    def gameLoop(self):\r
+        self.countDown()\r
+        while self.running:\r
+            self.userEvents()\r
+            if self.snakeFunctions.runSnake():\r
+                self.running = False\r
+            self.snakeFunctions.drawSnakeGame()\r
+            pg.display.flip()\r
+            self.clock.tick(self.gameSpeed)\r
+        print(self.snakeFunctions.snakeLength+1)\r
+            \r
+    def countDown(self):\r
+        for number in range(self.countdownLength):\r
+            if not self.running:\r
+                break\r
+            number = str(self.countdownLength-number)\r
+            for frame in range(self.framesPerCount):\r
+                self.userEvents()\r
+                if not self.running:\r
+                    break\r
+                self.snakeFunctions.drawField()\r
+                self.snakeFunctions.drawCountdown(number,round(255-((255/self.framesPerCount)*frame),0))\r
+                pg.display.flip()\r
+                self.clock.tick(100)\r
+    \r
+    def userEvents(self):\r
+        for event in pg.event.get():\r
+            if event.type == pg.QUIT:\r
+                self.running = False\r
+                break\r
+            elif event.type == pg.KEYDOWN:\r
+                if event.key == pg.K_d and self.snakeFunctions.dy != 0:\r
+                    self.snakeFunctions.dx = 1\r
+                    self.snakeFunctions.dy = 0\r
+                    self.snakeFunctions.direction = 270\r
+                    break\r
+                elif event.key == pg.K_a and self.snakeFunctions.dy != 0:\r
+                    self.snakeFunctions.dx = -1\r
+                    self.snakeFunctions.dy = 0\r
+                    self.snakeFunctions.direction = 90\r
+                    break\r
+                elif event.key == pg.K_s and self.snakeFunctions.dx != 0:\r
+                    self.snakeFunctions.dx = 0\r
+                    self.snakeFunctions.dy = 1\r
+                    self.snakeFunctions.direction = 180\r
+                    break\r
+                elif event.key == pg.K_w and self.snakeFunctions.dx != 0:\r
+                    self.snakeFunctions.dx = 0\r
+                    self.snakeFunctions.dy = -1\r
+                    self.snakeFunctions.direction = 0\r
+                    break\r
+                elif event.key == pg.K_SPACE:\r
+                    self.gameLoop()\r
+                    \r
+x = Game()\r
+x.gameLoop()\r
+pg.quit()\r