diff --git a/BlankProjectTemplate/src/Food.py b/BlankProjectTemplate/src/Food.py index 4256507ae1e53b03cd7734ac8fd0794200b20f33..aaed1139a10cbd97c62a03987dd0c5fea7bcf892 100644 --- a/BlankProjectTemplate/src/Food.py +++ b/BlankProjectTemplate/src/Food.py @@ -26,7 +26,11 @@ class Food(): # @param y is the location of snake's y-axis head location # @param location is a list that gives the location of present food # @param screenSize is the size of the screen - def redraw_food(self, x, y, location,screenSize): + def redraw_food(self, x, y, location,screenSize, snake_loc): + if(abs(x - location[0]) < 15 and abs(y - location[1]) < 15): location[0] = randint(0, grid_length - 1) * self.size location[1] = randint(0, grid_length - 1) * self.size + if(location[0], location[1] in snake_loc): + location[0] = randint(0, grid_length - 1) * self.size + location[1] = randint(0, grid_length - 1) * self.size diff --git a/BlankProjectTemplate/src/Gameplay.py b/BlankProjectTemplate/src/Gameplay.py index 04af693d90a8634840a0b0d09c594cd75f229e1b..7a1d7fb5e712ced9aaf474f5c6b77687ce92f0c6 100644 --- a/BlankProjectTemplate/src/Gameplay.py +++ b/BlankProjectTemplate/src/Gameplay.py @@ -7,144 +7,145 @@ from random import randint from Snake import * from Food import * -#defining a list to update snanke's length -snake_loc = [] -#variable to increment snake's length, initially it would be 1 -snake_length = 1 - -speed = 70 - -# 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, red , [x,y, size, size]) -food = Food(size) - - -#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): snake.direct = -1 - snake.axis = 0 - if (event.key == pygame.K_RIGHT): - #if snake is moving up or down turn right, otherwise dont turn - if (snake.axis): snake.direct = 1 - 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): snake.direct = -1 - 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): snake.direct = 1 - snake.axis = 1 - - #Snake moving depending on axis and direction - if (snake.axis): - y += (size)*snake.direct - else: - x += (size)*snake.direct - - #Boundary conditions for snake hitting window edge - if (x < 0 or - y < 0 or - y > screenSize - size or - x > screenSize - size): - - pygame.quit() #for now, quit the game when snake hits boundary +def Gameplay(speed, colour, backgroundColour): + #defining a list to update snanke's length + snake_loc = [] + #variable to increment snake's length, initially it would be 1 + snake_length = 1 + + speed = 70 -## snake.die() + # 0 gives (- direction) + # 1 gives (+ direction) + direction = 1 + # 0 - x-axis , 1 - y-axis + axis = 0 -#---------------------FOR WRAPING SNAKE AROUND WINDOW--------------------- - -## 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 + 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] - if(abs(x - food_location[0]) < 15 and abs(y - food_location[1]) < 15): - score += 10 + ##initialize snake and draw snake body somewhere on the screen - #increment the length by 3 unit every time - snake_length += 3 + snake = Snake(size, 0, 20, 1) + pygame.draw.rect(win, colour , [x,y, size, size]) + food = Food(size) + + #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): snake.direct = -1 + snake.axis = 0 + if (event.key == pygame.K_RIGHT): + #if snake is moving up or down turn right, otherwise dont turn + if (snake.axis): snake.direct = 1 + 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): snake.direct = -1 + 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): snake.direct = 1 + snake.axis = 1 + + #Snake moving depending on axis and direction + if (snake.axis): + y += (size)*snake.direct + else: + x += (size)*snake.direct + + #Boundary conditions for snake hitting window edge + if (x < 0 or + y < 0 or + y > screenSize - size or + x > screenSize - size): + + pygame.quit() #for now, quit the game when snake hits boundary + + ## snake.die() + + #---------------------FOR WRAPING SNAKE AROUND WINDOW--------------------- - win.fill(white) - - font = pygame.font.SysFont("times",30) - text = font.render("Score = " + str(score),True,[0,0,0]) - win.blit(text,(0,0)) - #function to print - #consumption of food block - food.redraw_food(x, y, food_location, screenSize) - - if ([x,y] in snake_loc) and snake_length > 1: - pygame.time.delay(1000) - pygame.quit() #quit for now, but should return to main menu - - snake_head = [] - snake_head.append(x) - snake_head.append(y) - - snake_loc.append(snake_head) - - - snake_blocks = len(snake_loc) - - #Draw food item - food.draw_food(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(snake_loc) - #update display - pygame.display.update() - -pygame.quit() + ## 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 + + #------------------------------------------------- + + if(abs(x - food_location[0]) < 15 and abs(y - food_location[1]) < 15): + score += 10 + + #increment the length by 3 unit every time + snake_length += 3 + + + win.fill(backgroundColour) + + font = pygame.font.SysFont("times",30) + text = font.render("Score = " + str(score),True,[0,0,0]) + win.blit(text,(0,0)) + + if ([x,y] in snake_loc) and snake_length > 1: + pygame.time.delay(1000) + pygame.quit() #quit for now, but should return to main menu + + 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_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(snake_loc) + #update display + pygame.display.update() + + pygame.quit() diff --git a/BlankProjectTemplate/src/Interface.py b/BlankProjectTemplate/src/Interface.py index c82c0c2e80c9169aa084bf3d7c95693bc31c31ce..75302d322c67297cb2c665a148c652a8818b2a1f 100644 --- a/BlankProjectTemplate/src/Interface.py +++ b/BlankProjectTemplate/src/Interface.py @@ -8,13 +8,6 @@ import highscore, theme ## @brief A Class that will contain useful functions in order for the creation of main interface class GUI(): - - ## @brief A function for running other files - # @details Executes another python file when this is selected, Given that the file is in same folder. - # @param runfilename The name of the file to be executed - def runfile(runfilename): - with open(runfilename,"r") as rnf: - exec(rnf.read()) ## @brief A method to create a button # @details This method will make a box on the interface @@ -41,70 +34,60 @@ class GUI(): # @details This will output the main page of this game by using the class above def main(): pygame.init() - lightgray = [200,200,200] - gray = [180,180,180] + lightBlue = [200,200,200] darkgray = [100,100,100] - red = [255,0,0] + image1 = pygame.image.load("Snake_Game_Logo_background.png") + image2 = pygame.image.load("snake_image.png") #while loop required to always refresh the page run = True while run: game = pygame.display.set_mode((800, 610)) - game.fill([213, 219, 219]) + game.blit(image1,(0,0)) + game.blit(image2,(550,0)) mousepos = pygame.mouse.get_pos() #checking mouse position mouseclick = pygame.mouse.get_pressed()#checking mouse pressed pygame.display.set_caption("Lets Play") - GUI.text('SNAKE GAME',"monospace", 100,red,(100,80),game) #Adding the play game button - if (130 <= mousepos[0] <= 130+250 and 250 <= mousepos[1] <= 250+100 ): + if (400 <= mousepos[0] <= 400+170 and 250 <= mousepos[1] <= 300+50 ): #checks if the mouse is hovering over the button - GUI.button(game,darkgray, [130,250,250,100], 0) + GUI.button(game,darkgray, [400,250,170,50], 0) #checking if the button is clicked if mouseclick[0] == 1: theme.Themes.themes() else: - GUI.button(game,lightgray, [130,250,250,100], 0) - GUI.text('Beginner',"comicsansms", 40,[10, 200, 10],(170,270),game) + GUI.button(game,lightBlue, [400,250,170,50], 0) + GUI.text('Beginner',"comicsansms", 35,[10, 200, 10],(410,250),game) - if (430 <= mousepos[0] <= 430+250 and 250 <= mousepos[1] <= 250+100 ): + if (430 <= mousepos[0] <= 430+220 and 350 <= mousepos[1] <= 350+50 ): #checks if the mouse is hovering over the button - GUI.button(game,darkgray, [430,250,250,100], 0) + GUI.button(game,darkgray, [430,350,220,50], 0) #checking if the button is clicked if mouseclick[0] == 1: theme.Themes.themes() else: - GUI.button(game,lightgray, [430,250,250,100], 0) - GUI.text('Intermediate',"comicsansms", 40,[250, 250, 10],(431,270),game) + GUI.button(game,lightBlue, [430,350,220,50], 0) + GUI.text('Intermediate',"comicsansms", 35,[250, 250, 10],(430,350),game) - if (270 <= mousepos[0] <= 270+250 and 400 <= mousepos[1] <= 400+100 ): + if (400 <= mousepos[0] <= 400+180 and 450 <= mousepos[1] <= 450+50 ): #checks if the mouse is hovering over the button - GUI.button(game,darkgray, [270,400,250,100], 0) + GUI.button(game,darkgray, [400,450,180,50], 0) #checking if the button is clicked if mouseclick[0] == 1: theme.Themes.themes() else: - GUI.button(game,lightgray, [270,400,250,100], 0) - GUI.text('Advanced',"comicsansms", 40,[200, 10, 30],(300,420),game) + GUI.button(game,lightBlue, [400,450,180,50], 0) + GUI.text('Advanced',"comicsansms", 35,[200, 10, 30],(410,450),game) - #Highest Score - if ( 10 <= mousepos[0] <= 310 and 550 <= mousepos[1] <= 550 +55): - GUI.button(game,[200,0,0],[10,550,300,55], 0) + if (15 <= mousepos[0] <= 15+115 and 565 <= mousepos[1] <= 565+35 ): if mouseclick[0] == 1: - highscore.main() - else: - GUI.button(game,[180,180,180], [10,550,300,55], 0) - GUI.text('HIGHEST SCORE',"comicsansms", 35,[0, 0, 0],(10,550),game) - - #If user wants to quit - if ( 670 <= mousepos[0] <= 670+105 and 550 <= mousepos[1] <= 550 +55): - GUI.button(game,[200,0,0],[670,550,105,55], 0) + highscore.main() + + if (725 <= mousepos[0] <= 725+50 and 565 <= mousepos[1] <= 565+35 ): if mouseclick[0] == 1: - pygame.quit() - sys.exit() - else: - GUI.button(game,[180,180,180], [670,550,105,55], 0) - GUI.text('QUIT',"comicsansms", 35,(0, 0, 0),(670,550),game) + pygame.quit() + sys.exit() pygame.display.update() diff --git a/BlankProjectTemplate/src/Snake_Game_Logo_background.png b/BlankProjectTemplate/src/Snake_Game_Logo_background.png new file mode 100644 index 0000000000000000000000000000000000000000..f7f0eeb47166be8f75f26869294bd64d42d10e01 Binary files /dev/null and b/BlankProjectTemplate/src/Snake_Game_Logo_background.png differ diff --git a/BlankProjectTemplate/src/__pycache__/Food.cpython-37.pyc b/BlankProjectTemplate/src/__pycache__/Food.cpython-37.pyc index 6b0953264c84128a6d088c3e19e941613b4f95b1..9a830c92d74ee361f1368ca26cb0c6d707d95e30 100644 Binary files a/BlankProjectTemplate/src/__pycache__/Food.cpython-37.pyc and b/BlankProjectTemplate/src/__pycache__/Food.cpython-37.pyc differ diff --git a/BlankProjectTemplate/src/__pycache__/Interface.cpython-37.pyc b/BlankProjectTemplate/src/__pycache__/Interface.cpython-37.pyc index 8ac82ceaaaff8c2f9af45844d30705cb9cd3d8bc..9a4a1cd6e2e72b10a4a497a6d54a3e051f42a7ce 100644 Binary files a/BlankProjectTemplate/src/__pycache__/Interface.cpython-37.pyc and b/BlankProjectTemplate/src/__pycache__/Interface.cpython-37.pyc differ diff --git a/BlankProjectTemplate/src/__pycache__/Snake.cpython-37.pyc b/BlankProjectTemplate/src/__pycache__/Snake.cpython-37.pyc index d1439d6a6f3d19a239cca60542761a16a4361e2c..64ed5e1ffc62e81f7a69696008571de8734360c2 100644 Binary files a/BlankProjectTemplate/src/__pycache__/Snake.cpython-37.pyc and b/BlankProjectTemplate/src/__pycache__/Snake.cpython-37.pyc differ diff --git a/BlankProjectTemplate/src/__pycache__/init.cpython-37.pyc b/BlankProjectTemplate/src/__pycache__/init.cpython-37.pyc index cce923f0e289ed3fb9a8cb0638c6cb526bac5e44..5ef93ec9897c680e94b72d19d335652862a2b13f 100644 Binary files a/BlankProjectTemplate/src/__pycache__/init.cpython-37.pyc and b/BlankProjectTemplate/src/__pycache__/init.cpython-37.pyc differ diff --git a/BlankProjectTemplate/src/__pycache__/theme.cpython-37.pyc b/BlankProjectTemplate/src/__pycache__/theme.cpython-37.pyc index 51083db02c0797c2a6e9d41e244f0793e98ada13..a2134b3fef5b6f94f441b0ef00f771775de7f4c0 100644 Binary files a/BlankProjectTemplate/src/__pycache__/theme.cpython-37.pyc and b/BlankProjectTemplate/src/__pycache__/theme.cpython-37.pyc differ diff --git a/BlankProjectTemplate/src/snake_image.png b/BlankProjectTemplate/src/snake_image.png new file mode 100644 index 0000000000000000000000000000000000000000..cf3f0abe920c8a70740cb103d1b0fa767f0f4a12 Binary files /dev/null and b/BlankProjectTemplate/src/snake_image.png differ