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
welcome to shbcf.ru