0% found this document useful (0 votes)
18 views3 pages

Projek Uler Cobra Jawa

This document contains the code for a snake game written in Python using the tkinter library. It defines classes for the Snake and Food objects, and includes functions for moving the snake each turn, checking for collisions, restarting the game, and more. The code initializes the game window and canvas, places the starting snake and food, and uses callbacks to continuously move the snake and update the display.

Uploaded by

Test Coba
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)
18 views3 pages

Projek Uler Cobra Jawa

This document contains the code for a snake game written in Python using the tkinter library. It defines classes for the Snake and Food objects, and includes functions for moving the snake each turn, checking for collisions, restarting the game, and more. The code initializes the game window and canvas, places the starting snake and food, and uses callbacks to continuously move the snake and update the display.

Uploaded by

Test Coba
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/ 3

from tkinter import *

import random

GAME_WIDTH = 700
GAME_HEIGHT = 700
SPACE_SIZE = 50
BODY_PARTS = 3
SNAKE_COLOR = "#00FF00"
FOOD_COLOR = "#FF0000"
BACKGROUND_COLOR = "#000000"

# Initial values for level and speed


current_level = 1
SPEED = 200

direction = 'down'

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, int((GAME_WIDTH / SPACE_SIZE) - 1)) * SPACE_SIZE
y = random.randint(0, int((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 direction, SPEED, current_level

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, tag="snake")
snake.squares.insert(0, square)

if x == food.coordinates[0] and y == food.coordinates[1]:


global score
score += 1

if score % 5 == 0:
current_level += 1
SPEED -= 10 # Decrease speed for each level up
label_level.config(text="Level: {}".format(current_level))

label.config(text="Score:{}".format(score))
canvas.delete("food")
food = Food()
else:
del snake.coordinates[-1]
canvas.delete(snake.squares[-1])
del snake.squares[-1]

if check_collisions(snake):
game_over()
else:
window.after(SPEED, next_turn, snake, food)

def change_direction(new_direction):
global direction
if new_direction == 'left' and direction != 'right':
direction = new_direction
elif new_direction == 'right' and direction != 'left':
direction = new_direction
elif new_direction == 'up' and direction != 'down':
direction = new_direction
elif new_direction == 'down' and direction != 'up':
direction = new_direction

def check_collisions(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("snake")
canvas.create_text(canvas.winfo_width() / 2, canvas.winfo_height() / 2,
font=('consolas', 70), text="GAME OVER", fill="red",
tag="gameover")
canvas.create_text(canvas.winfo_width() / 2, canvas.winfo_height() / 1.5,
font=('consolas', 20), text="Press R to play again",
fill="white", tag="restart")
window.bind('<Key>', restart_game)

def restart_game(event):
global direction, score, SPEED, current_level
if event.char.lower() == 'r':
direction = 'down'
score = 0
SPEED = 200 # Reset speed to initial value
current_level = 1
label.config(text="Score:{}".format(score))
label_level.config(text="Level: {}".format(current_level))
canvas.delete("gameover", "restart")
snake = Snake()
food = Food()
window.after_id = window.after(SPEED, next_turn, snake, food)

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

score = 0

label = Label(window, text="Score:{}".format(score), font=('consolas', 40))


label.pack()

label_level = Label(window, text="Level: {}".format(current_level),


font=('consolas', 20))
label_level.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 = int((screen_width / 2) - (window_width / 2))


y = int((screen_height / 2) - (window_height / 2))

window.geometry(f"{window_width}x{window_height}+{x}+{y}")

window.bind('<Left>', lambda event: change_direction('left'))


window.bind('<Right>', lambda event: change_direction('right'))
window.bind('<Up>', lambda event: change_direction('up'))
window.bind('<Down>', lambda event: change_direction('down'))

snake = Snake()
food = Food()

window.after_id = window.after(SPEED, next_turn, snake, food)

window.mainloop()

You might also like