From 8531aef4eedf06c2f7ef54b993ae4814ae428e75 Mon Sep 17 00:00:00 2001 From: AnishKr91620 <145275076+AnishKr91620@users.noreply.github.com> Date: Sun, 15 Oct 2023 10:27:31 +0530 Subject: [PATCH] Create 8-bit-game-using-pygame MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pygame is a python library that can be used specifically to design and build games. Pygame supports only 2d games that are built using different sprites. Pygame is not particularly best for designing games as it is very complex to use doesn’t have a proper GUI like unity but it definitely builds logic for further complex projects. We’ll be creating a simple game with the following rules:- The player can only move vertically. Other than player block there will be two other blocks. One of them will be the enemy block and one of them will be score block. If the player collides with the enemy block then the game over screen pops up, if the player collides with the score block the score is incremented and it is compulsory to collect all score blocks. --- 8-bit-game-using-pygame | 341 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 341 insertions(+) create mode 100644 8-bit-game-using-pygame diff --git a/8-bit-game-using-pygame b/8-bit-game-using-pygame new file mode 100644 index 00000000..fcd6169b --- /dev/null +++ b/8-bit-game-using-pygame @@ -0,0 +1,341 @@ +# Python program to demonstrate +# 8 bit game + + +import pygame +import sys +import random + + +# initialize the constructor +pygame.init() +res = (720, 720) + +# randomly assigns a value to variables +# ranging from lower limit to upper +c1 = random.randint(125, 255) +c2 = random.randint(0, 255) +c3 = random.randint(0, 255) + +screen = pygame.display.set_mode(res) +clock = pygame.time.Clock() +red = (255, 0, 0) +green = (0, 255, 0) +blue = (0, 0, 255) +color_list = [red, green, blue] +colox_c1 = 0 +colox_c2 = 0 +colox_c3 = 254 +colox_c4 = 254 + +# randomly assigns a colour from color_list +# to player +player_c = random.choice(color_list) + +# light shade of menu buttons +startl = (169, 169, 169) + +# dark shade of menu buttons +startd = (100, 100, 100) +white = (255, 255, 255) +start = (255, 255, 255) +width = screen.get_width() +height = screen.get_height() + +# initial X position of player +lead_x = 40 + +# initial y position of player +lead_y = height / 2 +x = 300 +y = 290 +width1 = 100 +height1 = 40 +enemy_size = 50 + +# defining a font +smallfont = pygame.font.SysFont('Corbel', 35) + +# texts to be rendered on screen +text = smallfont.render('Start', True, white) +text1 = smallfont.render('Options', True, white) +exit1 = smallfont.render('Exit', True, white) + +# game title +colox = smallfont.render('Colox', True, (c3, c2, c1)) +x1 = random.randint(width / 2, width) +y1 = random.randint(100, height / 2) +x2 = 40 +y2 = 40 +speed = 15 + +# score of the player +count = 0 +rgb = random.choice(color_list) + +# enemy position +e_p = [width, random.randint(50, height - 50)] +e1_p = [random.randint(width, width + 100), random.randint(50, height + - 100)] + + +# function for game_over +def game_over(): + + while True: + + # if the player clicks the cross + # button + for ev in pygame.event.get(): + if ev.type == pygame.QUIT: + pygame.quit() + + if ev.type == pygame.MOUSEBUTTONDOWN: + if 100 < mouse1[0] < 140 and height - 100 < mouse1[1] \ + < height - 80: + pygame.quit() + + if ev.type == pygame.MOUSEBUTTONDOWN: + if width - 180 < mouse1[0] < width - 100 and height \ + - 100 < mouse1[1] < height - 80: + + # calling function game + game(lead_x, lead_y, speed, count) + + # fills the screen with specified colour + screen.fill((65, 25, 64)) + smallfont = pygame.font.SysFont('Corbel', 60) + smallfont1 = pygame.font.SysFont('Corbel', 25) + game_over = smallfont.render('GAME OVER', True, white) + game_exit = smallfont1.render('exit', True, white) + restart = smallfont1.render('restart', True, white) + mouse1 = pygame.mouse.get_pos() + + # exit + if 100 < mouse1[0] < 140 and height - 100 < mouse1[1] < height - 80: + pygame.draw.rect(screen, startl, [100, height - 100, 40,20]) + else: + pygame.draw.rect(screen, startd, [100, height - 100, 40,20]) + + # restart + if width - 180 < mouse1[0] < width - 100 and height - 100 < mouse1[1] < height - 80: + pygame.draw.rect(screen, startl, [width - 180, height- 100, 80, 20]) + else: + pygame.draw.rect(screen, startd, [width - 180, height- 100, 80, 20]) + + screen.blit(game_exit, (100, height - 100)) + + # superimposes one object on other + screen.blit(restart, (width - 180, height - 100)) + screen.blit(game_over, (width / 2 - 150, 295)) + + # updates frames of the game + pygame.display.update() + + +pygame.draw.rect(screen, startd, [100, height - 100, 40, 20]) +pygame.draw.rect(screen, startd, [width - 180, height - 100, 40, 50]) + + + +# function for body of the game +def game( + lead_y, + lead_X, + speed, + count, + ): + + while True: + for ev in pygame.event.get(): + if ev.type == pygame.QUIT: + pygame.quit() + + + # player control + # keeps track of the key pressed + keys = pygame.key.get_pressed() + if keys[pygame.K_UP]: + + # if up key is pressed then the players + # y pos will decrement by 10 + lead_y -= 10 + if keys[pygame.K_DOWN]: + + # if down key is pressed then the y pos + # of the player is incremented by 10 + lead_y += 10 + screen.fill((65, 25, 64)) + clock.tick(speed) + + # draws a rectangle on the screen + rect = pygame.draw.rect(screen, player_c, [lead_x, lead_y, 40,40]) + pygame.draw.rect(screen, (c1, c2, c3), [0, 0, width, 40]) + pygame.draw.rect(screen, (c3, c2, c1), [0, 680, width, 40]) + pygame.draw.rect(screen, startd, [width - 100, 0, 100, 40]) + smallfont = pygame.font.SysFont('Corbel', 35) + exit2 = smallfont.render('Exit', True, white) + + # exit + # gets the X and y position of mouse + # pointer and stores them as a tuple + mouse = pygame.mouse.get_pos() + if width - 100 < mouse[0] < width and 0 < mouse[1] < 40: + pygame.draw.rect(screen, startl, [width - 100, 0, 100, 40]) + else: + pygame.draw.rect(screen, startd, [width - 100, 0, 100, 40]) + if width - 100 < mouse[0] < width and 0 < mouse[1] < 40: + if ev.type == pygame.MOUSEBUTTONDOWN: + pygame.quit() + + # enemy position + if e_p[0] > 0 and e_p[0] <= width: + + # if the enemy block's X coordinate is between 0 and + # the width of the screen the X value gets + # decremented by 10 + e_p[0] -= 10 + else: + if e_p[1] <= 40 or e_p[1] >= height - 40: + e_p[1] = height / 2 + if e1_p[1] <= 40 or e1_p[1] >= height - 40: + e1_p[1] = random.randint(40, height - 40) + e_p[1] = random.randint(enemy_size, height - enemy_size) + e_p[0] = width + + + # game over + # collision detection + if lead_x <= e_p[0] <= lead_x + 40 and lead_y >= e_p[1] >= lead_y - 40: + game_over() + + # checks if the player block has collided with the enemy block + if lead_y <= e_p[1] + enemy_size <= lead_y + 40 and lead_x <= e_p[0] <= lead_x + 40: + game_over() + + pygame.draw.rect(screen, red, [e_p[0], e_p[1], enemy_size,enemy_size]) + if e1_p[0] > 0 and e1_p[0] <= width + 100: + e1_p[0] -= 10 + else: + if e1_p[1] <= 40 or e1_p[1] >= height - 40: + e1_p[1] = height / 2 + e1_p[1] = random.randint(enemy_size, height - 40) + e1_p[0] = width + 100 + + if lead_x <= e1_p[0] <= lead_x + 40 and lead_y >= e1_p[1] >= lead_y - 40: + e1_p[0] = width + 100 + e1_p[1] = random.randint(40, height - 40) + count += 1 + speed += 1 + if lead_y <= e1_p[1] + enemy_size <= lead_y + 40 and lead_x <= e1_p[0] <= lead_x + 40: + e1_p[0] = width + 100 + e1_p[1] = random.randint(40, height - 40) + + # increases the score when blue box is hit + count += 1 + + # increases the speed as score increases + speed += 1 + + if count >= 45: + + # freezes the game FPS to 60 if + # score reaches 45 or more + speed = 60 + + if lead_y <= 38 or lead_y >= height - 38: + game_over() + if e1_p[0] <= 0: + game_over() + + pygame.draw.rect(screen, blue, [e1_p[0], e1_p[1], enemy_size, + enemy_size]) + score1 = smallfont.render('Score:', True, white) + screen.blit(score1, (width - 120, height - 40)) + screen.blit(exit2, (width - 80, 0)) + pygame.display.update() + + +# intro +def intro( + colox_c1, + colox_c2, + colox, + exit1, + text1, + text, + ): + intro = True + while intro: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + pygame.quit() + screen.fill((65, 25, 64)) + mouse = pygame.mouse.get_pos() + + # start screen + if x < mouse[0] < x + width1 and y < mouse[1] < y + height1: + + # if mouse is hovered on a button + # its colour shade becomes lighter + pygame.draw.rect(screen, startl, [x, y, width1, height1]) + else: + if x < mouse[0] < x + width1 + 40 and y + 70 < mouse[1] < y \ + + 70 + height1: + pygame.draw.rect(screen, startl, [x, y + 70, width1+40,height1]) + else: + + if x < mouse[0] < width1 + x and y + 140 < mouse[1] < y + 140 + height1: + pygame.draw.rect(screen, startl, [x, y + 140,width1,height1]) + else: + pygame.draw.rect(screen, startd, [x, y, width1,height1]) + pygame.draw.rect(screen, startd, [x, y + 70, width1 + + 40, height1]) + pygame.draw.rect(screen, startd, [x, y + 140,width1, height1]) + + # start button + if event.type == pygame.MOUSEBUTTONDOWN: + if x < mouse[0] < x + width1 and y < mouse[1] < y + height1: + #music() + game(lead_y, lead_x, speed, count) + + if event.type == pygame.MOUSEBUTTONDOWN: + if x < mouse[0] < width1 + x and y + 140 < mouse[1] < y + 140 + height1: + pygame.quit() + + # this handles the colour breezing effect + if 0 <= colox_c1 <= 254 or 0 <= colox_c2 <= 254: + colox_c1 += 1 + colox_c2 += 1 + if colox_c1 >= 254 or colox_c2 >= 254: + colox_c1 = c3 + colox_c2 = c3 + + pygame.draw.rect(screen, (c2, colox_c1, colox_c2), [0, 0, 40, + height]) + pygame.draw.rect(screen, (c2, colox_c1, colox_c2), [width - 40, + 0, 40, height]) + smallfont = pygame.font.SysFont('Corbel', 35) + sig = smallfont.render('Designed by :- Antriksh', True, white) + text = smallfont.render('Start', True, white) + text1 = smallfont.render('Options', True, white) + exit1 = smallfont.render('Exit', True, white) + colox = smallfont.render('Colox', True, (c1, colox_c1, + colox_c2)) + screen.blit(colox, (312, 50)) + screen.blit(text, (312, 295)) + screen.blit(text1, (312, 365)) + screen.blit(exit1, (312, 435)) + screen.blit(sig, (320, height - 50)) + clock.tick(60) + pygame.display.update() + + +intro( + colox_c1, + colox_c2, + colox, + exit1, + text1, + text, + )