0% found this document useful (0 votes)
8 views2 pages

Games. Py

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views2 pages

Games. Py

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 2

#Snake Game starts

import math import random import pygame import tkinter as tk from tkinter import
messagebox
class cube(object): rows = 20 w = 500 def __init__(self, start,
dirnx=1, dirny=0,color=(255,0,0)): self.pos = start self.dirnx = 1
self.dirny = 0 self.color = color def move(self, dirnx, dirny):
self.dirnx = dirnx self.dirny = dirny self.pos = (self.pos[0] +
self.dirnx, 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(object): body=[] turns = {} def __init__(self, color, pos):


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.dirnx = 0 self.dirny = -1
self.turns[self.head.pos[:]] = [self.dirnx, self.dirny]
elif keys[pygame.K_DOWN]: self.dirnx = 0
self.dirny = 1 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: if c.dirnx == -1 and c.pos[0]
<= 0: c.pos = (c.rows-1, c.pos[1]) elif c.dirnx == 1 and c.pos[0]
>= c.rows-1: c.pos = (0, c.pos[1]) elif c.dirny == 1 and c.pos[1]
>= c.rows-1: c.pos = (c.pos[0], 0) elif c.dirny == -1 and c.pos[1]
<= 0: c.pos = (c.pos[0], c.rows-1) 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 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
redrawWindow(surface): global rows, width, s, snack surface.fill((0,0,0))
s.draw(surface) snack.draw(surface) drawGrid(width, rows,surface)
pygame.display.update()
def randomSnack(rows, item): positions = item.body while True:
x = random.randrange(rows) y = random.randrange(rows) if
len(list(filter(lambda z:z.pos == (x,y), positions)))> 0: continue
else: break return (x,y) def
message_box(subject, content): root = tk.Tk() root.attributes("-topmost",
True) root.withdraw() messagebox.showinfo(subject,content) try:
root.destroy() except:
pass
def main(): global width, rows, s, snack width = 500 rows = 20 win
= pygame.display.set_mode((width, width)) s = snake((255,0,0), (10,10))
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() 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))
message_box('You Lost!', 'Play again...') s.reset((10,10))
break redrawWindow(win) pass
main()

You might also like