So I been trying make it so when my enemy bullet's touch my player, it will disappear. My problem is that the bullets will randomly work for a couple of times then the next time it hits the player I get this error.
eguns.pop(eguns.index(egun))
ValueError: <__main__.main_loop.<locals>.enemybullets object at 0x06F69E50> is not in list
also here is a short clip showing what is happening. https://gyazo.com/f7718fd6b1200af3cf2f77d1a559fa46
When I got hit by the bullet, my game just froze.
here is the part that is not working
for egun in eguns:
for one in range(len(eguns)-1-1-1):
if egun.rect.colliderect(playerman.rect):
eguns.pop(eguns.index(egun)) # this is the code that was spouse to make the bullet dissaper
Lives -= 1
text2 = font.render("Lives = "+str(Lives),True,(0,0,0))
textRect2.center = ((600,65))
My full code
import pygame
pygame.init()
# Build The Screen
window = pygame.display.set_mode((700,500))
fps = (10)
clock = pygame.time.Clock()
# COLORS
white = (255,255,255)
darkred = (200,0,0)
darkgreen = (0,200,0)
green = (0,255,0)
red = (255,0,0)
black = (0,0,0)
#######
# Start Screen
def text_objects(text, font):
textSurface = font.render(text, True, black)
return textSurface, textSurface.get_rect()
def button(msg,x,y,w,h,ic,ac,action=None):
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
#print(click)
if x+w > mouse[0] > x and y+h > mouse[1] > y:
pygame.draw.rect(window, ac,(x,y,w,h))
if click[0] == 1 and action != None:
action()
else:
pygame.draw.rect(window, ic,(x,y,w,h))
smallText = pygame.font.SysFont("comicsansms",40)
textSurf, textRect = text_objects(msg, smallText)
textRect.center = ( (x+(w/2)), (y+(h/2)) )
window.blit(textSurf, textRect)
def quitgame():
pygame.quit()
def game_intro():
intro = True
while intro:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
window.fill((255,255,255))
largeText = pygame.font.Font('freesansbold.ttf',95)
TextSurf, TextRect = text_objects("AIR FLIGHT", largeText)
TextRect.center = ((700/2),(500/2))
window.blit(TextSurf, TextRect)
button("Fly!",50,350,200,100,green,darkgreen,main_loop)
button("Land!",450,350,200,100,red,darkred,quitgame)
pygame.display.update()
clock.tick(fps)
# Start Screen
###
def main_loop():
global Dead
# Name Screen
pygame.display.set_caption("Noobs first Game")
bg = pygame.image.load("skybg1.png")
bg_shift = 0
# Class Player
class player:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.speed = 6
self.color = color
self.rect = pygame.Rect(x,y,width,height)
self.ss1 = pygame.image.load("heroplane1.png")
self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
def draw(self):
self.rect.topleft=(self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
player_rect = self.ss1.get_rect(center = self.rect.center)
player_rect.centerx += -7
player_rect.centery += -6
window.blit(self.ss1,player_rect)
# Class Enemy
class Enemy:
def __init__(self,x,y,width,height,color,imagefile):
self.x = x
self.y = y
self.width = width
self.height = height
self.speed = 4
self.color = color
self.rect = pygame.Rect(x,y,width,height)
self.ss1 = pygame.image.load(imagefile)
self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
self.etimer = 0 # <---
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
enemy_rect = self.ss1.get_rect(center = self.rect.center)
enemy_rect.centerx += -2
enemy_rect.centery += -6
window.blit(self.ss1,enemy_rect)
# Class Enemy2
class Enemy2:
def __init__(self,x,y,width,height,color,imagefile):
self.x = x
self.y = y
self.width = width
self.height = height
self.speed = 4
self.color = color
self.rect = pygame.Rect(x,y,width,height)
self.ss1 = pygame.image.load(imagefile)
self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
self.etimer = 0 # <---
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
enemy_rect = self.ss1.get_rect(center = self.rect.center)
enemy_rect.centerx += -4
enemy_rect.centery += -6
window.blit(self.ss1,enemy_rect)
class enemy3:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.rect = pygame.Rect(x,y,width,height)
self.ss1 = pygame.image.load("enemyplane3.png")
self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
enemy3_rect = self.ss1.get_rect(center = self.rect.center)
enemy3_rect.centerx += -4
enemy3_rect.centery += -6
window.blit(self.ss1,enemy3_rect)
# Class Enemy3
class Star:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.rect = pygame.Rect(x,y,width,height)
self.ss1 = pygame.image.load("skycoin.png")
self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//12,self.ss1.get_height()//12))
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
enemy3_rect = self.ss1.get_rect(center = self.rect.center)
enemy3_rect.centerx += -4
enemy3_rect.centery += -4
window.blit(self.ss1,enemy3_rect)
class projectile(object):
def __init__(self, x, y,color):
self.x = x
self.y = y
self.slash = pygame.image.load("herogun1.png")
self.slash = pygame.transform.scale(self.slash,(self.slash.get_width()//11,self.slash.get_height()//11))
self.rect = self.slash.get_rect()
self.rect.topleft = ( self.x, self.y )
self.speed = 10
self.color = color
def draw(self, window):
self.rect.topleft = ( self.x,self.y )
window.blit(self.slash, self.rect)
class enemybullets(object):
def __init__(self, x, y,color):
self.x = x
self.y = y
self.slash = pygame.image.load("enemygun1.png")
self.slash = pygame.transform.scale(self.slash,(self.slash.get_width()//11,self.slash.get_height()//11))
self.rect = self.slash.get_rect()
self.rect.topleft = ( self.x, self.y )
self.speed = 10
self.color = color
def draw(self, window):
self.rect.topleft = ( self.x,self.y )
window.blit(self.slash, self.rect)
class Power:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.speed = 4
self.rect = pygame.Rect(x,y,width,height)
def draw(self):
self.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
import pygame
pygame.init()
# Build The Screen
window = pygame.display.set_mode((700,500))
# Name Screen
pygame.display.set_caption("Noobs first Game")
bg = pygame.image.load("skybg1.png")
bg_shift = 0
# Class Player
class player:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.speed = 6
self.color = color
self.rect = pygame.Rect(x,y,width,height)
self.ss1 = pygame.image.load("heroplane1.png")
self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
def draw(self):
self.rect.topleft=(self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
player_rect = self.ss1.get_rect(center = self.rect.center)
player_rect.centerx += -7
player_rect.centery += -6
window.blit(self.ss1,player_rect)
# Class Enemy
class Enemy:
def __init__(self,x,y,width,height,color,imagefile):
self.x = x
self.y = y
self.width = width
self.height = height
self.speed = 4
self.color = color
self.rect = pygame.Rect(x,y,width,height)
self.ss1 = pygame.image.load(imagefile)
self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
self.etimer = 0 # <---
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
enemy_rect = self.ss1.get_rect(center = self.rect.center)
enemy_rect.centerx += -2
enemy_rect.centery += -6
window.blit(self.ss1,enemy_rect)
# Class Enemy2
class Enemy2:
def __init__(self,x,y,width,height,color,imagefile):
self.x = x
self.y = y
self.width = width
self.height = height
self.speed = 4
self.color = color
self.rect = pygame.Rect(x,y,width,height)
self.ss1 = pygame.image.load(imagefile)
self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
self.etimer = 0 # <---
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
enemy_rect = self.ss1.get_rect(center = self.rect.center)
enemy_rect.centerx += -4
enemy_rect.centery += -6
window.blit(self.ss1,enemy_rect)
class enemy3:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.rect = pygame.Rect(x,y,width,height)
self.ss1 = pygame.image.load("enemyplane3.png")
self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
enemy3_rect = self.ss1.get_rect(center = self.rect.center)
enemy3_rect.centerx += -4
enemy3_rect.centery += -6
window.blit(self.ss1,enemy3_rect)
# Class Enemy3
class Star:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.rect = pygame.Rect(x,y,width,height)
self.ss1 = pygame.image.load("skycoin.png")
self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//12,self.ss1.get_height()//12))
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
enemy3_rect = self.ss1.get_rect(center = self.rect.center)
enemy3_rect.centerx += -4
enemy3_rect.centery += -4
window.blit(self.ss1,enemy3_rect)
class projectile(object):
def __init__(self, x, y,color):
self.x = x
self.y = y
self.slash = pygame.image.load("herogun1.png")
self.slash = pygame.transform.scale(self.slash,(self.slash.get_width()//11,self.slash.get_height()//11))
self.rect = self.slash.get_rect()
self.rect.topleft = ( self.x, self.y )
self.speed = 10
self.color = color
def draw(self, window):
self.rect.topleft = ( self.x,self.y )
window.blit(self.slash, self.rect)
class enemybullets(object):
def __init__(self, x, y,color):
self.x = x
self.y = y
self.slash = pygame.image.load("enemygun1.png")
self.slash = pygame.transform.scale(self.slash,(self.slash.get_width()//11,self.slash.get_height()//11))
self.rect = self.slash.get_rect()
self.rect.topleft = ( self.x, self.y )
self.speed = 10
self.color = color
def draw(self, window):
self.rect.topleft = ( self.x,self.y )
window.blit(self.slash, self.rect)
class Power:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.speed = 4
self.rect = pygame.Rect(x,y,width,height)
def draw(self):
self.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
# Color
white = (255,255,255)
black = (0,0,0)
# Draw Player
playerman = player(5,250,90,40,white)
# For Enemy
enemy1 = Enemy(400, 100, 90, 40, white, "enemyplane1.png")
enemy4 = Enemy(400, 400, 90, 40, white, "enemyplane1.png")
# For Enemy2
enemy21 = Enemy2(400,300,90,40,white,"enemyplane2.png")
enemy22 = Enemy2(400,100,90,40,white,"enemyplane2.png")
# For Coins
star1 = Star(300,250,45,45,white)
star2 = Star(300,350,45,45,white)
# For Enemy3
ememy31 = enemy3(400,400,90,40,white)
# For Enemy
enemys = [enemy1,enemy4]
#For Coin
stars = [star1,star2]
# enemys
enemyGroup = pygame.sprite.Group()
level1 = [
" 1 c 1 c 1 c c c ",
" c 1 1 1 c 1 c 1 1 1 1 1 1 1 c c c c c ",
" c 1 c 1 1 1 c 1 c 1 c c c ",
" c 1 c 1 c 1 1 1 c1 c 1 1 1 c 1 c 1 1 c c ",
" c c c c 1 1 c 1 c1 1 1 1 1 c1 1 c 1 1 c c c c ",
" c 1 c 1 c c 1 c 1 c c c ",
" 1 1 c 1 1 c 1 c1 1 c 1 1 cc 1 c 1 1 c 1 c c c c c",]
for iy, row in enumerate(level1):
for ix, col in enumerate(row):
if col == "1":
new_enemy = Enemy(ix*70,iy*70,90,40,(255,255,255),"enemyplane1.png")
enemys.append(new_enemy)
for iy, row in enumerate(level1):
for ix, col in enumerate(row):
if col == "c":
new_stars = Star(ix*70,iy*70,45,45,(255,255,255))
stars.append(new_stars)
enemy2Group = pygame.sprite.Group()
level2 = [
" ",
" ",
" ",
" ",
" ",
" ",
" ",]
for iy, row in enumerate(level2):
for ix, col in enumerate(row):
if col == "2":
new_enemy2 = Enemy2(ix*70,iy*70,90,40,(255,255,255),"enemyplane2.png")
Enemy2.append(new_enemy2)
Dead = False
def quitgame():
pygame.quit()
def unpause():
global Dead
Dead = False
def Die():
largeText = pygame.font.SysFont("comicsansms",115)
TextSurf, TextRect = text_objects("You Died!", largeText)
TextRect.center = ((700/2),(500/2))
window.blit(TextSurf, TextRect)
while Dead:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
button("Fly!",50,350,200,100,green,darkgreen,main_loop)
button("Land!",450,350,200,100,red,darkred,quitgame)
pygame.display.update()
clock.tick(fps)
# Redrawwinodw
def redrawwindow():
window.fill((0,0,0))
bg_width = bg.get_width()
bg_offset = bg_shift % bg_width
window.blit(bg, (-bg_offset, 0))
window.blit(bg, (bg_width - bg_offset, 0))
# Draw playerman
playerman.draw()
# Draw enemy
for enemy in enemys:
enemy.draw()
# Draw enemy2
enemy21.draw()
# Draw enemy3
ememy31.draw()
#Draw Coin
for Star in stars:
Star.draw()
# Draw Enemy gun and playergun
for bullet in bullets:
bullet.draw(window)
for egun in eguns:
egun.draw(window)
window.blit(text,textRect)
window.blit(text2,textRect2)
window.blit(text3,textRect3)
# FPS Cnd Clock
fps = (30)
clock = pygame.time.Clock()
font = pygame.font.Font("freesansbold.ttf",30)
score = 0
text = font.render("Coins = "+str(score),True,(0,0,0))
textRect = text.get_rect()
textRect.center = ((600,40))
font = pygame.font.Font("freesansbold.ttf",30)
Lives = 10
text2 = font.render("Lives = "+str(Lives),True,(0,0,0))
textRect2 = text.get_rect()
textRect2.center = ((600,65))
font = pygame.font.Font("freesansbold.ttf",30)
enemyd = 0
text3 = font.render("Enemys Died = 10/ "+str(enemyd),True,(0,0,0))
textRect3 = text.get_rect()
textRect3.center = ((450,95))
# For Bullets List And Timer
bullets = []
btimer = 0
# For Enemy Bullets And Timer
eguns = []
etimer = 0
# Main Loop
run = True
while run:
clock.tick(fps)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
for Star in stars:
for one in range(len(stars)-1,-1,-1):
if playerman.rect.colliderect(stars[one].rect):
del stars[one]
score += 1
text = font.render("Coins = "+str(score),True,(0,0,0))
textRect.center = ((600,40))
for enemy in enemys:
for one in range(len(enemys)-1-1-1):
if enemys[one].rect.colliderect(playerman.rect):
del enemys[one]
enemyd += 1
text3 = font.render("Enemys Died = 10/ "+str(enemyd),True,(0,0,0))
textRect3.center = ((450,95))
Lives -= 1
text2 = font.render("Lives = "+str(Lives),True,(0,0,0))
textRect2.center = ((600,65))
for Enemys in enemys:
if enemy.x < 0:
enemy.x * playerman.x
for Star in stars:
Star.x -= playerman.speed
ememy31.x -= playerman.speed
# Timer for Bullets
if btimer > 0:
btimer += 1
if btimer > 10:
btimer = 0
# Timer for Enemy Bullets
if etimer > 0:
etimer += 1
if etimer > 13:
etimer = 0
# This Is Keys for bullet
keys = pygame.key.get_pressed()
# This is bullets and when player press Spacebar they come
for bullet in bullets:
if bullet.x < 700 and bullet.x > 0:
bullet.x += bullet.speed
else:
bullets.pop(bullets.index(bullet))
if keys[pygame.K_SPACE] and btimer == 0:
if len(bullets) < 5:
bullets.append(projectile(round(playerman.x+playerman.width//2),round(playerman.y + playerman.height-24),(0,0,0)))
btimer = 1
# Allow's enemy to disapper when it touches the player bullets
for Enemy in enemys:
for bullet in bullets:
for one in range(len(enemys)-1,-1,-1):
if bullet.rect.colliderect(enemys[one].rect):
del enemys[one]
bullets.pop(bullets.index(bullet))
enemyd += 1
text3 = font.render("Enemys Died = 10/ "+str(enemyd),True,(0,0,0))
textRect3.center = ((450,95))
#A PART OF THE Died FUNCTION
if Lives < 1:
Dead = True
Die()
# Timer for Enemy Bullets
for enemy in enemys:
if enemy.etimer > 0:
enemy.etimer += 1
if enemy.etimer > 40:
enemy.etimer = 0
# Allows enemy to shoot
for egun in eguns:
if egun.x < 700 and egun.x > 0:
egun.x -= egun.speed
else:
eguns.pop(eguns.index(egun))
for Enemy in enemys:
if Enemy.x < 700 and Enemy.etimer == 0:
if len(eguns) < 15:
eguns.append(enemybullets(round(Enemy.x+Enemy.width//2),round(Enemy.y + Enemy.height-24),(0,0,0)))
Enemy.etimer = 1
# What make's the player lose live's when it touch the bullets for enenmy
for egun in eguns:
for one in range(len(eguns)-1-1-1):
if egun.rect.colliderect(playerman.rect):
eguns.pop(eguns.index(egun))
Lives -= 1
text2 = font.render("Lives = "+str(Lives),True,(0,0,0))
textRect2.center = ((600,65))
# Makes enemy move
for Enemy in enemys:
Enemy.x -= Enemy.speed
# For The Background Shifting
bg_shift += round(3/2)
# Keys For Playerman
keys = pygame.key.get_pressed()
if keys[pygame.K_a] and playerman.x > playerman.speed:
playerman.x -= playerman.speed
if keys[pygame.K_d] and playerman.x < 260 - playerman.width - playerman.speed:
playerman.x += playerman.speed
if keys[pygame.K_w] and playerman.y > playerman.speed:
playerman.y -= playerman.speed
if keys[pygame.K_s] and playerman.y < 500 - playerman.height - playerman.speed:
playerman.y += playerman.speed
# Update And Other Sutff
redrawwindow()
pygame.display.update()
pygame.quit()
unpause()
game_intro()
main_loop()