Skip to main content

Snake game using python

 CODE:

import math

import random

import pygame

import random

import tkinter as tk

from tkinter import messagebox


width = 500

height = 500


cols = 25

rows = 20



class cube():

    rows = 20

    w = 500

    def __init__(self, start, dirnx=1, dirny=0, color=(255,0,0)):

        self.pos = start

        self.dirnx = dirnx

        self.dirny = dirny # "L", "R", "U", "D"

        self.color = color


    def move(self, dirnx, dirny):

        self.dirnx = dirnx

        self.dirny = dirny

        self.pos  = (self.pos[0] + self.dirnx, self.pos[1] + self.dirny)

            


    def draw(self, surface, eyes=False):

        dis = self.w // self.rows

        i = self.pos[0]

        j = self.pos[1]

        

        pygame.draw.rect(surface, self.color, (i*dis+1,j*dis+1,dis-2,dis-2))

        if eyes:

            centre = dis//2

            radius = 3

            circleMiddle = (i*dis+centre-radius,j*dis+8)

            circleMiddle2 = (i*dis + dis -radius*2, j*dis+8)

            pygame.draw.circle(surface, (0,0,0), circleMiddle, radius)

            pygame.draw.circle(surface, (0,0,0), circleMiddle2, radius)

        



class snake():

    body = []

    turns = {}

    

    def __init__(self, color, pos):

        #pos is given as coordinates on the grid ex (1,5)

        self.color = color

        self.head = cube(pos)

        self.body.append(self.head)

        self.dirnx = 0

        self.dirny = 1

    

    def move(self):

        for event in pygame.event.get():

            if event.type == pygame.QUIT:

                pygame.quit()

            keys = pygame.key.get_pressed()


            for key in keys:

                if keys[pygame.K_LEFT]:

                    self.dirnx = -1

                    self.dirny = 0

                    self.turns[self.head.pos[:]] = [self.dirnx,self.dirny]

                elif keys[pygame.K_RIGHT]:

                    self.dirnx = 1

                    self.dirny = 0

                    self.turns[self.head.pos[:]] = [self.dirnx,self.dirny]

                elif keys[pygame.K_UP]:

                    self.dirny = -1

                    self.dirnx = 0

                    self.turns[self.head.pos[:]] = [self.dirnx,self.dirny]

                elif keys[pygame.K_DOWN]:

                    self.dirny = 1

                    self.dirnx = 0

                    self.turns[self.head.pos[:]] = [self.dirnx,self.dirny]

        

        for i, c in enumerate(self.body):

            p = c.pos[:]

            if p in self.turns:

                turn = self.turns[p]

                c.move(turn[0], turn[1])

                if i == len(self.body)-1:

                    self.turns.pop(p)

            else:

                c.move(c.dirnx,c.dirny)

        

        

    def reset(self,pos):

        self.head = cube(pos)

        self.body = []

        self.body.append(self.head)

        self.turns = {}

        self.dirnx = 0

        self.dirny = 1


    def addCube(self):

        tail = self.body[-1]

        dx, dy = tail.dirnx, tail.dirny


        if dx == 1 and dy == 0:

            self.body.append(cube((tail.pos[0]-1,tail.pos[1])))

        elif dx == -1 and dy == 0:

            self.body.append(cube((tail.pos[0]+1,tail.pos[1])))

        elif dx == 0 and dy == 1:

            self.body.append(cube((tail.pos[0],tail.pos[1]-1)))

        elif dx == 0 and dy == -1:

            self.body.append(cube((tail.pos[0],tail.pos[1]+1)))


        self.body[-1].dirnx = dx

        self.body[-1].dirny = dy

    

    def draw(self, surface):

        for i,c in enumerate(self.body):

            if i == 0:

                c.draw(surface, True)

            else:

                c.draw(surface)




def redrawWindow():

    global win

    win.fill((0,0,0))

    drawGrid(width, rows, win)

    s.draw(win)

    snack.draw(win)

    pygame.display.update()

    pass




def drawGrid(w, rows, surface):

    sizeBtwn = w // rows


    x = 0

    y = 0

    for l in range(rows):

        x = x + sizeBtwn

        y = y +sizeBtwn


        pygame.draw.line(surface, (255,255,255), (x, 0),(x,w))

        pygame.draw.line(surface, (255,255,255), (0, y),(w,y))

    



def randomSnack(rows, item):

    positions = item.body


    while True:

        x = random.randrange(1,rows-1)

        y = random.randrange(1,rows-1)

        if len(list(filter(lambda z:z.pos == (x,y), positions))) > 0:

               continue

        else:

               break


    return (x,y)



def main():

    global s, snack, win

    win = pygame.display.set_mode((width,height))

    s = snake((255,0,0), (10,10))

    s.addCube()

    snack = cube(randomSnack(rows,s), color=(0,255,0))

    flag = True

    clock = pygame.time.Clock()

    

    while flag:

        pygame.time.delay(50)

        clock.tick(10)

        s.move()

        headPos = s.head.pos

        if headPos[0] >= 20 or headPos[0] < 0 or headPos[1] >= 20 or headPos[1] < 0:

            print("Score:", len(s.body))

            s.reset((10, 10))


        if s.body[0].pos == snack.pos:

            s.addCube()

            snack = cube(randomSnack(rows,s), color=(0,255,0))

            

        for x in range(len(s.body)):

            if s.body[x].pos in list(map(lambda z:z.pos,s.body[x+1:])):

                print("Score:", len(s.body))

                s.reset((10,10))

                break

                    

        redrawWindow()


main()

OUTPUT:

    

Make snake game using python


    


Comments

Post a Comment

Popular posts from this blog

Spoken Tutorial Linux Test answer

 1. we can use command "Alt + T" in the terminal in ubuntu environment? a) True  b) False 2.  Justify whether the commands given below are true or false .  a . $ > chmod -R 744 programming --- > This command is used to assign read , write , execute permission to owner and readonly for all others on programming folder .  b . $ > chown - R www - data : www - data --- > This command is used to change the ownership of all the folders and subfolders including files , under current directory to www - data user . a) True         b) False 3. We can use the commands $ > Is -1 | wc -1 > filecount.txt to check the count of number of files in a directory ? Select one a) True  b) False 4.  The following commands will help us identify the number of lines of code written in programcode.c file . $ > programcode.c | wc - a) True   b) False 5.  Identify whether the output of the following commands is true or false ?   $ > mkdir programs  $ >  cd programs  $ > mv

Spoken Tutorial C test answer

1)    In the following statements, what does   6   specify?  int num[ 6 ];  num[ 6 ]=21; Select one: In the first statement,  6  specifies a particular element, whereas in the second statement it specifies an array size. In the first statement,  6  specifies a particular element, whereas in the second statement it specifies a type. In both the statements,  6  specifies an array size. In the first statement,  6  specifies an array size, whereas in the second statement it specifies a particular element of an array. 2)  What will be the   output   of the following program? #include<stdio.h>  int main()  {      char j=1;      while(j < 5)      {          printf("%d, ", j);          j = j+1;      }      printf("\n");      return 0;  } Select one: 1 2 3 4 1, 2, 3, 4, 4, 3, 2, 1 2 3 4 5 6 3)  What will be   output   when you will execute following c code?   #include<stdio.h> void main(){     int a=5,b=10;     if(a < b)          printf("%d  %d",+

How to make calculator using HTML in notepad

CODE:-  <html> <head> <script> //function that display value function dis(val) { document.getElementById("result").value+=val } //function that evaluates the digit and return result function solve() { let x = document.getElementById("result").value let y = eval(x) document.getElementById("result").value = y } //function that clear the display function clr() { document.getElementById("result").value = "" } </script> <!-- for styling --> <style> .title{ margin-bottom: 10px; text-align:center; width: 210px; color:green; border: solid black 2px; } input[type="button"] { background-color:green; color: black; border: solid black 2px; width:100% } input[type="text"] { background-color:white; border: solid black 2px; width:100% } </style> </head> &