Я делаю старую классическую c игру Space Invaders, и вот моя проблема
На самом деле я хочу убивать врагов, но когда удачно попадает в исходную игру, работает только код. Пожалуйста, помогите.
Я перепробовал все, и вот мой последний код после всех усилий.
Я думал попробовать сделать идентификаторы для каждого врага:
import pygame
import random
import math
# Initialise
pygame.init()
# Title & Icon
pygame.display.set_caption("Space Invaders")
icon = pygame.image.load("si.ico")
pygame.display.set_icon(icon)
# Screen
screen = pygame.display.set_mode((800, 600))
# Background
background = pygame.image.load("background.jpg")
# Player
playerimg = pygame.image.load("sip.png")
playerX = 370
playerY = 480
playerX_change = 0
# Enemy
enemyimg = []
enemyY = []
enemyX = []
enemyX_change = []
enemyY_change = []
n_e = 10
for i in range(n_e):
enemyimg.append(pygame.image.load("sie.ico"))
# clearimg = pygame.image.load("clear.png")
enemyX.append(random.randint(0, 736))
enemyY.append(random.randint(50, 150))
enemyX_change.append(2)
enemyY_change.append(40)
# Bullet
bulletimg = pygame.image.load("bullet.png")
bulletX = 370
bulletY = 481
bulletX_change = 0
bulletY_change = 10
bullet_state = "ready"
# Fuctions
def enemy(x, y, i):
screen.blit(enemyimg[i], (x, y))
# def cleanenemy(x, y):
# screen.blit(clearimg, (x, y))
def player(x, y):
screen.blit(playerimg, (x, y))
def fire(x, y):
global bullet_state
bullet_state = "fire"
screen.blit(bulletimg, (x + 16, y + 10))
def collission_chk(enemyX, enemyY, bulletX, bulletY):
distance = int(math.sqrt(math.pow(enemyX[i] - bulletX, 2) + (math.pow(enemyY[i] - bulletY, 2))))
if distance < 27:
return True
else:
return False
# Game Loop
running = True
while running:
screen.fill((0, 0, 0))
screen.blit(background, (0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
playerX_change = 5
if event.key == pygame.K_LEFT:
playerX_change = -5
if event.key == pygame.K_SPACE:
bulletX = playerX
fire(playerX, bulletY)
if event.type == pygame.KEYUP:
playerX_change = 0
playerX += playerX_change
if playerX >= 736:
playerX = 736
elif playerX <= 0:
playerX = 0
collission = collission_chk(enemyX, enemyY, bulletX, bulletY)
for i in range(n_e):
if collission:
bulletY = playerY
# screen.blit(clearimg, (enemyX, enemyY))
bullet_state = "ready"
enemyX[i] = 7000
enemyY[i] = 7000
else:
enemyX[i] += enemyX_change[i]
if enemyX[i] >= 736:
enemyX_change[i] = -2
enemyY[i] += enemyY_change[i]
elif enemyX[i] <= 0:
enemyX_change[i] = 2
enemyY[i] += enemyY_change[i]
enemy(enemyX[i], enemyY[i], i)
if bulletY <= 0:
bulletY = 480
bullet_state = "ready"
if bullet_state == "fire":
fire(bulletX, bulletY)
bulletY -= bulletY_change
player(playerX, playerY)
pygame.display.update()