From c7b8698deda8db6c490cadfac6e15b8f07e33f69 Mon Sep 17 00:00:00 2001 From: Osaid Ali <161992336+Osaidgit@users.noreply.github.com> Date: Fri, 20 Dec 2024 07:29:16 +0500 Subject: [PATCH] Create main_py_updated I resolve fire issuue --- main_py_updated | 185 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 main_py_updated diff --git a/main_py_updated b/main_py_updated new file mode 100644 index 00000000..46bff27a --- /dev/null +++ b/main_py_updated @@ -0,0 +1,185 @@ +import math +import random + +import pygame +from pygame import mixer + +# Intialize the pygame +pygame.init() + +# create the screen +screen = pygame.display.set_mode((0,0), pygame.RESIZABLE) + + + +# Background +background = pygame.image.load('background.png') + +# Sound +mixer.music.load("background.wav") +mixer.music.play(-1) + +# Caption and Icon +pygame.display.set_caption("Space Invader") +icon = pygame.image.load('ufo.png') +pygame.display.set_icon(icon) + +# Player +playerImg = pygame.image.load('player.png') +playerX = 370 +playerY = 480 +playerX_change = 0 + +# Enemy +enemyImg = [] +enemyX = [] +enemyY = [] +enemyX_change = [] +enemyY_change = [] +num_of_enemies = 6 + +for i in range(num_of_enemies): + enemyImg.append(pygame.image.load('enemy.png')) + enemyX.append(random.randint(0, 736)) + enemyY.append(random.randint(50, 150)) + enemyX_change.append(4) + enemyY_change.append(40) + +# Bullet + +# Ready - You can't see the bullet on the screen +# Fire - The bullet is currently moving + +bulletImg = pygame.image.load('bullet.png') +bulletX = 0 +bulletY = 480 +bulletX_change = 0 +bulletY_change = 10 +bullet_state = "ready" + +# Score + +score_value = 0 +font = pygame.font.Font('freesansbold.ttf', 32) + +textX = 10 +testY = 10 + +# Game Over +over_font = pygame.font.Font('freesansbold.ttf', 64) + + +def show_score(x, y): + score = font.render("Score : " + str(score_value), True, (255, 255, 255)) + screen.blit(score, (x, y)) + + +def game_over_text(): + over_text = over_font.render("GAME OVER", True, (255, 255, 255)) + screen.blit(over_text, (200, 250)) + + +def player(x, y): + screen.blit(playerImg, (x, y)) + + +def enemy(x, y, i): + screen.blit(enemyImg[i], (x, y)) + + +def fire_bullet(x, y): + global bullet_state + bullet_state = "fire" + screen.blit(bulletImg, (x + 16, y + 10)) + + +def isCollision(enemyX, enemyY, bulletX, bulletY): + distance = math.sqrt(math.pow(enemyX - bulletX, 2) + (math.pow(enemyY - bulletY, 2))) + if distance < 27: + return True + else: + return False + + +# Game Loop +running = True +while running: + + # RGB = Red, Green, Blue + screen.fill((0, 0, 0)) + # Background Image + screen.blit(background, (0, 0)) + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + + # if keystroke is pressed check whether its right or left + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_LEFT: + playerX_change = -5 + if event.key == pygame.K_RIGHT: + playerX_change = 5 + if event.key == pygame.K_SPACE: + if bullet_state == "ready": + bulletSound = mixer.Sound("laser.wav") + bulletSound.play() + # Get the current x cordinate of the spaceship + bulletX = playerX + fire_bullet(bulletX, bulletY) + + if event.type == pygame.KEYUP: + if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: + playerX_change = 0 + + # 5 = 5 + -0.1 -> 5 = 5 - 0.1 + # 5 = 5 + 0.1 + + playerX += playerX_change + if playerX <= 0: + playerX = 0 + elif playerX >= 736: + playerX = 736 + + # Enemy Movement + for i in range(num_of_enemies): + + # Game Over + if enemyY[i] > 440: + for j in range(num_of_enemies): + enemyY[j] = 2000 + game_over_text() + break + + enemyX[i] += enemyX_change[i] + if enemyX[i] <= 0: + enemyX_change[i] = 4 + enemyY[i] += enemyY_change[i] + elif enemyX[i] >= 736: + enemyX_change[i] = -4 + enemyY[i] += enemyY_change[i] + + # Collision + collision = isCollision(enemyX[i], enemyY[i], bulletX, bulletY) + if collision: + explosionSound = mixer.Sound("explosion.wav") + explosionSound.play() + bulletY = 480 + bullet_state = "ready" + score_value += 1 + enemyX[i] = random.randint(0, 736) + enemyY[i] = random.randint(50, 150) + + enemy(enemyX[i], enemyY[i], i) + + # Bullet Movement + if bulletY <= 0: + bulletY = 480 + bullet_state = "ready" + + if bullet_state == "fire": + fire_bullet(bulletX, bulletY) + bulletY -= bulletY_change + + player(playerX, playerY) + show_score(textX, testY) + pygame.display.update()