Forked from
asghar / se3xa3
149 commits ahead of the upstream repository.
-
Hameed Andy authoredHameed Andy authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Gameplay.py 5.66 KiB
## @file Gameplay.py
# @author Andy Hameed | Usman Irfan
# @brief implements gameplay and connects the different components of the game
# @details including the snake, food item, score, exit and main interface
# @date 11/09/2018
from random import randint
from Snake import *
from Food import *
import ScoreDisplay
def game(speed, colour,food_colour, backgroundColour):
pygame.event.clear()
image = pygame.image.load("Images/barrier.png")
black1 = (48,47,47)
x = randint(0, grid_length) * size
y = randint(0, grid_length) * size
#defining a list to update snanke's length
snake_loc = []
#variable to increment snake's length, initially it would be 1
snake_length = 1
# 0 gives (- direction)
# 1 gives (+ direction)
direction = 1
# 0 - x-axis , 1 - y-axis
axis = 0
score = 0
# parameters for initializing food on the screen
food_location = []
food_x = randint(0, grid_length - 1) * size
food_y = randint(0, grid_length - 1) * size
food_location = [food_x, food_y]
##initialize snake and draw snake body somewhere on the screen
snake = Snake(size, 0, 20, 1)
pygame.draw.rect(win, colour , [x,y, size, size])
food = Food(size)
still = True
#Loop through the events as long as the game is running
run = True
while run:
#delay controls part of speed
pygame.time.delay(speed)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
#Each event type has an integer assigned to it. KEYDOWN has the code 2
if event.type == pygame.KEYDOWN:
if (event.key == pygame.K_LEFT):
# if snake is moving up or down, turn left, otherwise don't turn
if (snake.axis or still): snake.direct = -1; still = False
snake.axis = 0
if (event.key == pygame.K_RIGHT):
#if snake is moving up or down turn right, otherwise dont turn
if (snake.axis or still): snake.direct = 1; still = False
snake.axis = 0
if (event.key == pygame.K_UP):
#if snake is moving left or right turn up, otherwise dont turn
if (not snake.axis or still): snake.direct = -1; still = False
snake.axis = 1
if (event.key == pygame.K_DOWN):
#if snake is moving left or right turn down, otherwise dont turn
if (not snake.axis or still): snake.direct = 1; still = False
snake.axis = 1
#Snake moving depending on axis and direction
if (snake.axis):
y += (size)*snake.direct
else:
x += (size)*snake.direct
boundary_condition = (x < 0 or y < 0 or y > screenSize - size or x > screenSize - size)
maze_x = x == 100
maze_y = abs(y - 210) <= 110
maze2_x = x == 380
if (speed == 100):
if x < 0:
#x = 0
x = screenSize - size
if y < 0:
#y = 0
y = screenSize - size
if y > screenSize - size:
#y = 500 - size
y = 0
if x > screenSize - size:
#x = 500 - size
x = 0
elif (speed == 70):
#Boundary conditions for snake hitting window edge
if (boundary_condition):
run = False
ScoreDisplay.display(score,speed, colour,food_colour, backgroundColour)
elif (speed == 71):
if ((maze_x and maze_y) or boundary_condition or (maze2_x and maze_y)):
run = False
ScoreDisplay.display(score,speed, colour,food_colour, backgroundColour)
#detect collision between food and snake head
if(abs(x - food_location[0]) < 15 and abs(y - food_location[1]) < 15):
if (speed == 100):
score += 5
elif (speed == 70):
score += 7
else:
score += 10
#increment the length by 3 unit every time
snake_length += 3
win.fill(backgroundColour)
if speed == 71:
win.blit(image,(100,100))
win.blit(image,(380,100))
sc_color = [0,0,0] if backgroundColour[0] == 255 else [255,255,255]
font = pygame.font.Font("Roboto-Light.ttf",30)
text = font.render(" " + str(score),True,sc_color)
win.blit(text,(0,0))
if ([x,y] in snake_loc) and snake_length > 1:
ScoreDisplay.display(score,speed, colour,food_colour, backgroundColour)
snake_head = []
snake_head.append(x)
snake_head.append(y)
snake_loc.append(snake_head)
#function to print
#consumption of food block
food.redraw_food(x, y, food_location, screenSize, snake_loc)
snake_blocks = len(snake_loc)
#Draw food item
food.draw_food(food_colour, food_location)
if snake_blocks > snake_length:
#keep updating the new block
del snake_loc[0]
'''
Logic for updating the length is taken from:
CodeWithHarry, CodeWithHarry. “Snakes Game: Length Increment Logic - Python Game Development Using Pygame In Hindi #17.”
YouTube, YouTube, 2 Oct. 2018,
www.youtube.com/watch?v=mkGJb0W03DM&index=17&list=PLu0W_9lII9ailUQcxEPZrWgDoL36BtPYb.
'''
#Draw snake
snake.draw(colour,snake_loc)
#update display
pygame.display.update()
pygame.quit()