A game of snake using python tkinter. #shorts #programming #python

preview_player
Показать описание
#shorts #programming #python @Boolcoder
Рекомендации по теме
Комментарии
Автор

#youdeservemoresubs #awesomecontent #nopygame

ilcp
Автор


The code:

import time
from tkinter import *
import random

GAME_WIDTH= 900
GAME_HEIGHT = 800
SPEED = 120
SPACE_SIZE =50
BODY_PARTS = 4
SNAKE_COLOR = "blue"
FOOD_COLOR = "red"
BACKGROUND_COLOR = "green"


class Snake:
def __init__(self):
self.body_size = BODY_PARTS
self.coordinates = []
self.squares = []

for i in range(0, BODY_PARTS):
self.coordinates.append([0, 0])
for x, y in self.coordinates:
square = canvas.create_rectangle(x, y, x+SPACE_SIZE, y+SPACE_SIZE, fill=SNAKE_COLOR, tag = "snake")
self.squares.append(square)

class Food:
def __init__(self):
x = random.randint(0, (GAME_WIDTH/SPACE_SIZE)-1) * SPACE_SIZE
y = random.randint(0, (GAME_HEIGHT / SPACE_SIZE) - 1) * SPACE_SIZE
self.coordinates = [x, y]
canvas.create_oval(x, y, x+SPACE_SIZE, y+SPACE_SIZE, fill= FOOD_COLOR, tag="food")
def next_turn(snake, food):
global score, SPEED
x, y = snake.coordinates[0]
if direction == "up":
y -= SPACE_SIZE

elif direction == "down":
y += SPACE_SIZE

elif direction == "left":
x -= SPACE_SIZE
elif direction == "right":
x += SPACE_SIZE
snake.coordinates.insert(0, (x, y))

square = canvas.create_rectangle(x, y, x+SPACE_SIZE, y+SPACE_SIZE, fill=SNAKE_COLOR)
snake.squares.insert(0, square)
if x == food.coordinates[0] and y == food.coordinates[1]:

score += 1

canvas.delete("food")
food = Food()

else:
del snake.coordinates[-1]

del snake.squares[-1]
if check_collisons(snake):
game_over()
else:
window.after(SPEED, next_turn, snake, food)

def
global direction
if new_direction == 'left':
if direction != 'right':
direction = new_direction
elif new_direction == 'right':
if direction != 'left':
direction = new_direction
elif new_direction == 'up':
if direction != 'down':
direction = new_direction
elif new_direction == 'down':
if direction != 'up':
direction = new_direction



def check_collisons(snake):
x, y= snake.coordinates[0]
if x<0 or x >= GAME_WIDTH:

return True
elif y < 0 or y >= GAME_HEIGHT:

return True
for body_part in snake.coordinates[1:]:
if x == body_part[0] and y == body_part[1]:
return True

return False
def game_over():
canvas.delete(ALL)
button.config(state="active", bg = "lime")
canvas.create_text(canvas.winfo_width()/2, canvas.winfo_height()/2,
font=("consolas", 70), text="GAME OVER", fill="red", tag = "gameover")

def new_game():
BODY_PARTS = 3
global score, squares, coordinates, direction, label
direction = "down"
squares = []
score=0
coordinates =[]
canvas.delete(ALL)

snake = Snake()
food = Food()
next_turn(snake, food)
button.config(state="disabled", bg="red")
window.update()


window = Tk()

window.title("Snake game")
window.resizable(False, False)

score = 0
direction = "down"
label = Label(window, text = "Score:{}".format(score), font=("consolas", 40))
label.pack()
button = Button(window, text="New Game", font=("consolas", 20), command=new_game, state="disabled", bg='red')
button.pack()
canvas = Canvas(window, bg = BACKGROUND_COLOR, height = GAME_HEIGHT, width=GAME_WIDTH)
canvas.pack()

window.update()
window_width= window.winfo_width()
window_height = window.winfo_height()
screen_width = window.winfo_screenwidth()
screen_height = window.winfo_screenheight()

x =
y =


window.bind('<a>', lambda event: change_direction("left"))
window.bind('<d>', lambda event: change_direction("right"))
window.bind('<w>', lambda event: change_direction("up"))
window.bind('<s>', lambda event: change_direction("down"))

snake = Snake()
food = Food()


next_turn(snake, food)


window.mainloop()

Boolcoder
Автор

It turned out very cool! I also made a snake game, but limited myself to the console)

Svin
Автор

What's ur vs code color and font themes?

binarakr
Автор

Why tkinter.. pygame would have been so much easier

SiriusCD