## @file Snake_2.o.py # @author Andy Hameed, Usman Irfan # @brief implements gameplay and connects the different components of the game # @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("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) #------------------------------------------------- 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() #game(70, [255,0,0], [255,255,0],[0,0,0])