Python Snake Game With Source code

 



Python Snake Game Source code



import pygame
pygame.init()
import random
import time
import sys


#Colors--
Blue=(9,14,217)
White=(255,255,255)
Black=(0,0,0)
Green=(0,200,0)
Light_Green=(0,255,0)
Purple=(201,29,201)
Yellow=(255,255,0)
Red=(255,0,0)

#Setup Screen--
wn=pygame.display.set_mode((820,440))
pygame.display.set_caption('SNAKE_GAME')
clock=pygame.time.Clock()


#Function For Length oF Snake--
#snk_list=[snk_x,snk_y] contain--
def plot_snk(wn,color,snk_list,snk_length,snk_breadth):
    for x,y in snk_list: # To join more rectangle with initial head's snake-
       pygame.draw.rect(wn,color,[x,y,snk_length,snk_breadth]) #Draw Rectangle


#To Print Text In Screen-

Font1=pygame.font.SysFont('italics',59)
def text_screen1(text,color,x,y):
    text_screen=Font1.render(text,True,color)
    wn.blit(text_screen,[x,y])

#For Highscore_text--
Font2=pygame.font.SysFont(0,42)
def text_screen2(text,color,x,y):
    text_screen=Font2.render(text,True,color)
    wn.blit(text_screen,[x,y])






# Effect Sound Img--
def soundimg_effect():
    sound = pygame.image.load('soundoff1.png')
    
    BackButton = pygame.image.load('BackButton.png')
    BackButtonchange = pygame.image.load('red_bt.png') # red

    Run = True
    while Run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
                sys.exit()
        wn.blit(BackButton,(10,5))
        wn.blit(sound,(292,177))
        
       
        mouse=pygame.mouse.get_pos()
        click=pygame.mouse.get_pressed()

        # Setting Button--
        if mouse[0] > 345 and mouse[0] < 448 and mouse[1] > 200 and mouse[1] < 240:
            if click==(0,0,1):
                setting_img()
            
        # Back Button--
        if mouse[0] > 16 and mouse[0] < 64 and mouse[1] > 25 and mouse[1] < 60:
        
            wn.blit(BackButtonchange,(10,5))
            if click == (1, 0, 0):
                Intro()
            
       
        pygame.display.update()


# For Setting_page--
def setting_img():
    
    BackButton = pygame.image.load('BackButton.png')
    BackButtonchange = pygame.image.load('yellow_bt.png') #yellow
    setting_img=pygame.image.load('music_frame1.jpg')
    snake_text=pygame.image.load('snake_text.jpg')
    Run=True
    while Run:
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                quit()
                sys.exit()

        wn.blit(setting_img,(0,0))
       
        wn.blit(snake_text,(0,0))
       
        wn.blit(BackButton,(10,5))
        
        mouse=pygame.mouse.get_pos()
        click=pygame.mouse.get_pressed()
        
      
            

        # For BackButton--
        if mouse[0] > 16 and mouse[0] < 64 and mouse[1] > 25 and mouse[1] < 60:
            wn.blit(BackButtonchange,(10,5))
            if click == (1, 0, 0):
                Intro()

        pygame.display.update()



# switch_cont()--
def switch_cont():
    switcher_cont = pygame.image.load('control_white1.png')
    BackButton = pygame.image.load('BackButton.png')
    control_key=pygame.image.load('control_keys5.jpg') # 250x73
    BackButtonchange = pygame.image.load('red_bt.png') #red
    Run = True
    while Run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
        wn.blit(switcher_cont, (155, 230))
        wn.blit(BackButton,(10,5)) #Back button image--
      
        wn.blit(control_key,(210,329))
        mouse = pygame.mouse.get_pos()
        
        click = pygame.mouse.get_pressed()
        
        # Switch Switcherbutton--
        if mouse[0] > 228 and mouse[0] < 351 and mouse[1] > 260 and mouse[1] < 310:
            if click == (0, 0, 1):
                Introduction_Page()

            
            
        
        # BackButton--
        
        if mouse[0]>16 and mouse[0]<64 and mouse[1]>25 and mouse[1]<60:
            wn.blit(BackButtonchange,(10,4))
            
            if click==(1,0,0):
                Intro()
        


        pygame.display.update()


#Introduction_Page-
def Introduction_Page():
    intro_page = pygame.image.load('IP1.jpg')
    switcher_Img=pygame.image.load('image_white5.png')
    
    Fruits_img=pygame.image.load('Fruits_img7.png')

    
    BackButton = pygame.image.load('BackButton.png')
    
    BackButtonchange = pygame.image.load('red_bt.png') #red
    Run=True
    while Run:
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                quit()
        
        
        wn.blit(intro_page,(0,0))
        wn.blit(switcher_Img,(140,231))
        
        wn.blit(Fruits_img,(210,330))
        
        wn.blit(BackButton,(10,5)) #Back button image--

        mouse=pygame.mouse.get_pos()
      
        click=pygame.mouse.get_pressed()

        # Switcher Button--
        if mouse[0]>228 and mouse[0]<351 and mouse[1]>260 and mouse[1]<310:
            if click==(1,0,0):
               switch_cont()
            
        # BackButton--
        if mouse[0]>16 and mouse[0]<64 and mouse[1]>25 and mouse[1]<60:
            wn.blit(BackButtonchange,(10,4))
            
            if click==(1,0,0):
                Intro()
        
        pygame.display.update()


# Quit Button--
def Quit(): 
    Run=True
    while Run:
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                quit()
                sys.exit()
        pygame.display.update()


#Intro Page--
def Intro():
    intro_image = pygame.image.load('Starting_Frame2.jpg')
    FirstButtonFrame1=pygame.image.load('FirstButtonFrame3.png')
    settingicon1 = pygame.image.load('settingbt8.png')
    settingicon2 = pygame.image.load('settingbt14.png')

    Run=True
    while Run:
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                    pygame.quit()
                    quit()
                    sys.exit()
        
        wn.blit(intro_image,(0,0))
        wn.blit(settingicon1,(700,-35))
        pygame.draw.rect(wn,Red,(322,166,130,50)) # Bg For Start Button
        text_screen1('Start', Black, 340, 175)

        pygame.draw.rect(wn,Red,(322,250,270,50)) # Bg For Introduction Button
        text_screen1('Introduction',Black,340,255)

        pygame.draw.rect(wn,Red,(322,334,130,50)) # Bg For Quit Button
        text_screen1('Quit',Black,340,340)

        
        #control with mouse--
        mouse=pygame.mouse.get_pos()
        click=pygame.mouse.get_pressed()
            
                                                
                
            
        
        # Text Effects---
       
        if mouse[0]>302 and mouse[0]<452 and mouse[1]>166 and mouse[1]<216:

            text_screen1('Start', White, 340, 170)
           
            #call gameloop()
            if click==(1, 0, 0):
                gameloop()
     
        if mouse[0]>302 and mouse[0]<590 and mouse[1]>250 and mouse[1]<300:
            text_screen1('Introduction',White,340,250)
            if click==(1,0,0):
                Introduction_Page()
        
        if mouse[0]>320 and mouse[0]<450 and mouse[1]>333 and mouse[1]<383:
            text_screen1('Quit',White,340,335)
           
            if click==(1,0,0):
                pygame.quit()
                quit()
                sys.exit()
        
        # For Setting Button--
        if mouse[0]>744 and mouse[0]<783 and mouse[1]>6 and mouse[1]<50:
            
            wn.blit(settingicon2,(744,9))
            if click==(1,0,0):
                setting_img()
                
        
                
        pygame.display.update()
        

def gameloop():
    pygame.mixer.music.load('bgmusic.wav')
    pygame.mixer.music.set_volume(0.3)
    pygame.mixer.music.play(-1)
   

    game_over=False
    run=True
    #Colors--
    White=(255,255,255)
    Black=(0,0,0)
    Green=(0,255,0)
    Red=(255,0,0)
    #Variables---
    snk_x=60 #coordinate
    snk_y=60 #coordinate
    snk_xchange=0 #changable postion
    snk_ychange=0
    snk_length=20
    snk_breadth=20 
    #--------------------
   
    #Food -
    Foods=['Fd1.jpg','Fd2.png','Fd3.png','Fd4.jpg','Fd5.png','Fd6.jpg','Fd7.png']
   
    #End Screen--
    
    End_screen=pygame.image.load('Game_overpage1.jpg')
    randomfood=pygame.image.load(random.choice(Foods))
    randomfood_x=random.randint(40,230)
    randomfood_y=random.randint(40,230)
    #------------------
    snk_list=[]  # snk_list contain head's snake further head contain snk_x,snk_y coordinate of snk
    snake_length=1
    score=0
    fps=60
    # Highscore--
    
    with open('highScore.txt', 'r') as h:
        highScore = h.read()

   
    food_size=15
    # Adding Frame---
    Frame=pygame.image.load('finalframe3.png')
    Fruits=0

    FirstButtonFrame2 = pygame.image.load('FirstButtonFrame7.png')

    
    #MainLoop--
    while run:
       
        if game_over:
            
            with open('highScore.txt', 'w') as h:
                h.write(str(highScore)) 

            wn.blit(End_screen,(0,0))
            pygame.draw.rect(wn, Red, (678, 12, 8, 39))
            text_screen1('Back', White, 685, 16)
            
            mouse=pygame.mouse.get_pos()
            
            click=pygame.mouse.get_pressed()
            if mouse[0]>677 and mouse[0]<789 and mouse[1]>10 and mouse[1]<50:
                pygame.draw.rect(wn, Yellow, (678, 12, 109, 39))
                text_screen1('Back', Black, 685, 16)
                wn.blit(FirstButtonFrame2, (670, 6))
                if click ==(1,0,0):
                    Intro()
                
            text_screen1(""+str(score), Red, 328, 16)
            for event in pygame.event.get():
                if event.type==pygame.QUIT:
                        run=False
                if event.type==pygame.KEYDOWN:
                    if event.key==pygame.K_RETURN:
                            gameloop()
            
        
        else:  
            
            for event in pygame.event.get():
                if event.type==pygame.QUIT:
                        pygame.mixer.music.stop()
                        run=False
                if event.type==pygame.KEYDOWN:
                        if event.key==pygame.K_RETURN:
                            pass
                    
                if event.type==pygame.KEYDOWN:
                        
                        if event.key==pygame.K_RIGHT:
                                snk_xchange=4
                                snk_ychange=0
                        if event.key==pygame.K_LEFT:
                                snk_xchange=-4
                                snk_ychange=0
                        if event.key==pygame.K_UP:
                                snk_ychange=-4
                                snk_xchange=0
                        if event.key==pygame.K_DOWN:
                                snk_ychange=4
                                snk_xchange=0
                            
            snk_x+=snk_xchange #motion start
            snk_y+=snk_ychange #motion start
          

            #Initial Head of snk-
            head=[]
            head.append(snk_x)
            head.append(snk_y)
            snk_list.append(head)
 
            #collision part--
            if abs(snk_x-randomfood_x)<13 and abs(snk_y-randomfood_y)<20:
                bite_Sound = pygame.mixer.Sound('bite_Sound.wav')
                bite_Sound.play()
                bite_Sound.set_volume(0.2)
                score+=10
                Fruits+=1
                snake_length+=5
                randomfood=pygame.image.load(random.choice(Foods))
               
                randomfood_x=random.randint(40,530)
                randomfood_y=random.randint(40,330)
                if score>int(highScore):
                    highScore=score

               

            # cut head of snk--
            if len(snk_list)>snake_length:
                del snk_list[0]

            # collision ownself--
            if head in snk_list[:-1]: # :-1 means count all items of list but not last one
                pygame.mixer.music.stop()
                Crash_sound = pygame.mixer.Sound('gameover.wav')
                Crash_sound.play(0) # play and after play ones how many time you want to play (0) no after play
                
                game_over=True

            # Boundary For Snake --
            if snk_x<30 or snk_x>770 or snk_y<30 or snk_y>380:
                pygame.mixer.music.stop()
                Crash_sound = pygame.mixer.Sound('gameover.wav')
                Crash_sound.play(0)
                game_over=True
                
            
           
            
          
            wn.blit(Frame,(0,0))
            wn.blit(randomfood,(randomfood_x,randomfood_y))
           

            plot_snk(wn,Black,snk_list,snk_length,snk_breadth)
            text_screen1(""+str(score), Red, 444, 402)
            
            text_screen2(''+str(highScore),Green,690,413)
            text_screen2(''+str(Fruits),Green,199,413)


        pygame.display.update()
        clock.tick(fps)


Intro()
Introduction_Page()
soundimg_effect()
setting_img()
gameloop() 
pygame.quit()
quit()

Comments

Popular posts from this blog

Building a Python Music Player

CAR GAME | PYTHON'S MODULE PYGAME---

Increase your Computer speed with only few steps: