Sign up Free. Don't forget to check out our challenges, lessons, solve and learn series and more ...
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# ---------------- READ ME ---------------------------------------------
# This Script is Created Only For Practise And Educational Purpose Only
# This is an Example Of Tkinter Canvas Graphics
# This Script Is Created For http://bitforestinfo.blogspot.in
# This Script is Written By
__author__='''
######################################################
By S.S.B Group
######################################################
Suraj Singh
Admin
S.S.B Group
[email protected]
http://bitforestinfo.blogspot.in/
Note: We Feel Proud To Be Indian
######################################################
'''
# ============= Configuration ==================================
PLAYGROUND_WIDTH=700
PLAYGROUND_HEIGHT=400
PLAYGROUND_COLOR='powder blue'
SNAKE_HEAD_COLOR="red"
SNAKE_MOVING_SPEED=8
# ==============================================================
# Importing Modules
try:
import Tkinter
except:
import tkinter as Tkinter
import time, random
# Creating Main Function
class main(Tkinter.Tk):
def __init__(self, *args, **kwargs):
Tkinter.Tk.__init__(self, *args, **kwargs)
# Trigger Of Other Functions
self.creating_playground()
self.creating_snake_head()
self.creating_snake_moving_settings()
self.creating_score_board()
self.bind('',self.connecting_head_with_keys)
# Creating Score Board
def creating_score_board(self):
self.scoreboard=Tkinter.Label(self, text="Score : {}".format(self.score))
self.scoreboard.pack(anchor='n')
return
# Updating Score Board
def update_score_board(self):
self.score=self.score+1
self.scoreboard['text']="Score : {}".format(self.score)
#SNAKE_MOVING_SPEED=SNAKE_MOVING_SPEED+1
return
# Creating Snake Moving Settings
def creating_snake_moving_settings(self):
self.x=SNAKE_MOVING_SPEED
self.y=0
self.roadmap=[(0,0)]
self.bodylength=3
self.snake_target=None
self.gamevalid=1
self.score=0
return
# Creating Snake Moving Head
def connecting_head_with_keys(self, event=None):
key=event.keysym
if key=='Left':
self.turn_left()
elif key=='Right':
self.turn_right()
elif key=='Up':
self.turn_up()
elif key=='Down':
self.turn_down()
else:
pass
return
# Creating Turning Function
def turn_left(self):
self.x=-SNAKE_MOVING_SPEED
self.y=0
return
# Creating Turning Function
def turn_right(self):
self.x=SNAKE_MOVING_SPEED
self.y=0
return
# Creating Turning Function
def turn_up(self):
self.x=0
self.y=-SNAKE_MOVING_SPEED
return
# Creating Turning Function
def turn_down(self):
self.x=0
self.y=SNAKE_MOVING_SPEED
return
# Creating snake Head
def creating_snake_head(self):
self.snake=self.board.create_rectangle(1,1,11,11,fill=SNAKE_HEAD_COLOR)
return
# Creating Ground
def creating_playground(self):
self.board=Tkinter.Canvas(self, width=PLAYGROUND_WIDTH, height=PLAYGROUND_HEIGHT, background=PLAYGROUND_COLOR)
self.board.pack(padx=10, pady=10)
return
# Function For Moving Head
def moving_snake_head(self):
self.board.move(self.snake,self.x,self.y)
x1,y1,x2,y2=self.board.coords(self.snake)
if x1<=0 or y1<=0:
self.x=0
self.y=0
self.game_loss()
elif PLAYGROUND_HEIGHT<=y2 or PLAYGROUND_WIDTH<=x2:
self.x=0
self.y=0
self.game_loss()
return
# Game Loss
def game_loss(self):
self.board.create_text(PLAYGROUND_WIDTH/2,PLAYGROUND_HEIGHT/2,text="Game Over"\
,font=('arial 60 bold'),fill='red')
self.gamevalid=0
return
# Snake Regularly Moving
def re_update(self):
self.moving_snake_head()
self.update_snake_body_structure()
self.food_of_snake()
return
# Snake Food
def food_of_snake(self):
if self.snake_target==None:
x1=random.randint(15,PLAYGROUND_WIDTH-15)
y1=random.randint(15,PLAYGROUND_HEIGHT-15)
self.snake_target=self.board.create_oval(x1,y1,x1+10,y1+10,fill='yellow', tag="food")
if self.snake_target:
x1,y1,x2,y2=self.board.coords(self.snake_target)
if len(self.board.find_overlapping(x1,y1,x2,y2))!=1:
self.board.delete("food")
self.snake_target=None
self.update_score_board()
return
# Creating Snake Body Moving Function
def update_snake_body_structure(self):
x1,y1,x2,y2=self.board.coords(self.snake)
x2=(x2-((x2-x1)/2))
y2=(y2-((y2-y1)/2))
self.roadmap.append((x2,y2))
self.board.delete('body')
if len(self.roadmap)>=self.bodylength:
self.roadmap=self.roadmap[-self.bodylength:]
self.board.create_line(tuple(self.roadmap), tag="body",width=10,fill=SNAKE_HEAD_COLOR)
return
# Script Trigger
if __name__ == '__main__':
root=main(className=" Snake Game ")
while True:
root.update()
root.update_idletasks()
root.re_update()
time.sleep(0.09)