From 6785fb79f25f394b477d46caec6ee849523577c0 Mon Sep 17 00:00:00 2001 From: Sahil R Date: Mon, 5 Feb 2024 23:32:38 +0530 Subject: [PATCH] added snake game --- GAMES/snakeGame/Readme.md | 67 ++++++++++++++++++ GAMES/snakeGame/game.png | Bin 0 -> 18948 bytes GAMES/snakeGame/snakeGame.py | 132 +++++++++++++++++++++++++++++++++++ 3 files changed, 199 insertions(+) create mode 100644 GAMES/snakeGame/Readme.md create mode 100644 GAMES/snakeGame/game.png create mode 100644 GAMES/snakeGame/snakeGame.py diff --git a/GAMES/snakeGame/Readme.md b/GAMES/snakeGame/Readme.md new file mode 100644 index 00000000..25c3247b --- /dev/null +++ b/GAMES/snakeGame/Readme.md @@ -0,0 +1,67 @@ +# Snake Game + +A classic Snake Game implemented in Python using the Pygame library. + +![Gameplay](game.png) + +## Table of Contents + +- [Description](#description) +- [Features](#features) +- [Installation](#installation) +- [How to Play](#how-to-play) +- [Controls](#controls) +- [Contributing](#contributing) + +## Description + +This is a simple implementation of the classic Snake Game using Python and Pygame. The game starts with a single snake that you control using arrow keys or WASD keys. Your goal is to eat the brown squares (food) to grow longer while avoiding collisions with the game boundaries and the snake's own body. The game ends if you run into a wall or collide with yourself. + +## Features + +- Classic Snake Game experience. +- Simple and intuitive controls. +- Score tracking to see how well you've done. +- Game over screen with your final score. + +## Installation + +1. Clone the repository: + + ``` + git clone https://github.com/sahilrw/snake-game.git + ``` + +2. Navigate to the project directory: + + ``` + cd snake-game + ``` + +3. Install the required dependencies: + + ``` + pip install pygame + ``` + +4. Run the game: + + ``` + python snakeGame.py + ``` + +## How to Play + +- Use the arrow keys (Up, Down, Left, Right) or WASD keys (W, A, S, D) to control the snake's direction. +- Eat the brown squares (food) to grow longer. +- Avoid running into the game boundaries or colliding with the snake's own body. +- Try to achieve the highest score possible before the game ends. + +## Controls + +- Arrow Keys (Up, Down, Left, Right) or +- WASD Keys (W, A, S, D) + +## Contributing + +Contributions are welcome! If you find any issues or have suggestions for improvement, please open an issue or create a pull request. diff --git a/GAMES/snakeGame/game.png b/GAMES/snakeGame/game.png new file mode 100644 index 0000000000000000000000000000000000000000..eabb89783144163d4f28385ccd4c05eb46882c6b GIT binary patch literal 18948 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 literal 0 HcmV?d00001 diff --git a/GAMES/snakeGame/snakeGame.py b/GAMES/snakeGame/snakeGame.py new file mode 100644 index 00000000..3192e6e8 --- /dev/null +++ b/GAMES/snakeGame/snakeGame.py @@ -0,0 +1,132 @@ +# Snake Game! + +# Game imports +import pygame, sys, random, time + +check_errors = pygame.init() +if check_errors[1] > 0: + print("(!) Had {0} initializing errors, exiting...".format(check_errors[1])) + sys.exit(-1) +else: + print("(+) PyGame successfully initialized") + + +# Play Surface +playSurface = pygame.display.set_mode((720, 700)) +pygame.display.set_caption("Snake Game!") +# time.sleep(5) + +# Colors +red = pygame.Color(255, 0, 0) # gameover +green = pygame.Color(0, 255, 0) # snake +black = pygame.Color(0, 0, 0) # score +white = pygame.Color(255, 255, 255) # background +brown = pygame.Color(165, 42, 42) # food + +# FPS controller +fpsController = pygame.time.Clock() + +# Position of the snake +snakePos = [100, 50] +snakeBody = [[100, 50], [90, 50], [80, 50]] + +foodPos = [random.randrange(1, 72) * 10, random.randrange(1, 70) * 10] +foodSpawn = True + +direction = "RIGHT" +changeto = direction + +score = 0 + + +# Game over function +def gameOver(): + myFont = pygame.font.SysFont("monaco", 72) + GOsurf = myFont.render("Game over!", False, red) + GOrect = GOsurf.get_rect() + GOrect.midtop = (360, 150) + playSurface.blit(GOsurf, GOrect) + showScore(0) + pygame.display.flip() + time.sleep(5) + pygame.quit() # for exiting pygame + sys.exit() # for exiting from the console + + +def showScore(choice=1): + scoreFont = pygame.font.SysFont("monaco", 25) + scoreSurf = scoreFont.render("Score : {0}".format(score), True, black) + scoreRect = scoreSurf.get_rect() + if choice == 1: + scoreRect.midtop = (80, 10) + else: + scoreRect.midtop = (360, 120) + playSurface.blit(scoreSurf, scoreRect) + + +# Main Logic of the game +while True: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + pygame.quit() + sys.exit() + elif event.type == pygame.KEYDOWN: + if event.key == pygame.K_RIGHT or event.key == ord("d"): + changeto = "RIGHT" + if event.key == pygame.K_LEFT or event.key == ord("a"): + changeto = "LEFT" + if event.key == pygame.K_UP or event.key == ord("w"): + changeto = "UP" + if event.key == pygame.K_DOWN or event.key == ord("s"): + changeto = "DOWN" + if event.key == pygame.K_ESCAPE: + pygame.event.post(pygame.event.Event(pygame.QUIT)) + + # validation of direction + if changeto == "RIGHT" and not direction == "LEFT": + direction = "RIGHT" + if changeto == "LEFT" and not direction == "RIGHT": + direction = "LEFT" + if changeto == "UP" and not direction == "DOWN": + direction = "UP" + if changeto == "DOWN" and not direction == "UP": + direction = "DOWN" + + # Update snake position [x, y] + if direction == "RIGHT": + snakePos[0] += 10 + if direction == "LEFT": + snakePos[0] -= 10 + if direction == "UP": + snakePos[1] -= 10 + if direction == "DOWN": + snakePos[1] += 10 + + # Snake body mechanism + snakeBody.insert(0, list(snakePos)) + if snakePos[0] == foodPos[0] and snakePos[1] == foodPos[1]: + score += 1 + foodSpawn = False + else: + snakeBody.pop() + + if foodSpawn == False: + foodPos = [random.randrange(1, 72) * 10, random.randrange(1, 70) * 10] + foodSpawn = True + + playSurface.fill(white) + for pos in snakeBody: + pygame.draw.rect(playSurface, green, pygame.Rect(pos[0], pos[1], 10, 10)) + + pygame.draw.rect(playSurface, brown, pygame.Rect(foodPos[0], foodPos[1], 10, 10)) + if snakePos[0] > 710 or snakePos[0] < 0: + gameOver() + if snakePos[1] > 690 or snakePos[1] < 0: + gameOver() + + for block in snakeBody[1:]: + if snakePos[0] == block[0] and snakePos[1] == block[1]: + gameOver() + showScore() + pygame.display.flip() + fpsController.tick(18)