微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的敌人中只有一个在射击子弹pygame

如何解决我的敌人中只有一个在射击子弹pygame

所以我一直在努力做到当我的敌人.x

https://gyazo.com/88e7499705f715082e1398bff0c3c91b

我的敌人1正在开枪,但我的其他敌人却不在

这是我的问题所在

# This is enemy bullets and when player press Spacebar they come
    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 etimer == 0:
            if len(eguns) < 30:
                eguns.append(enemybullets(round(enemy.x+enemy.width//2),round(enemy.y + enemy.height-24),(0,0)))

            etimer = 1

我的完整代码

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,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,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.speed = 4
        self.color = color
        self.rect = pygame.Rect(x,height)
        self.ss1 = pygame.image.load("enemyplane1.png")
        self.ss1 = pygame.transform.scale(self.ss1,self.ss1.get_height()//9))
    def draw(self):
        self.rect.topleft = (self.x,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,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,height)
        self.ss1 = pygame.image.load("enemyplane2.png")
        self.ss1 = pygame.transform.scale(self.ss1,self.rect)

        enemy2_rect = self.ss1.get_rect(center = self.rect.center)
        enemy2_rect.centerx += -4
        enemy2_rect.centery += -6
        window.blit(self.ss1,enemy2_rect)


# Class Enemy3
class enemy3:
    def __init__(self,height)
        self.ss1 = pygame.image.load("enemyplane3.png")
        self.ss1 = pygame.transform.scale(self.ss1,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 projectile(object):
   def __init__(self,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,color):
       self.x = x
       self.y = y
       self.slash = pygame.image.load("enemygun1.png")
       self.slash = pygame.transform.scale(self.slash,self.rect)



        
# Color
white = (255,255,255)

# Draw Player
playerman = player(5,250,90,40,white)

# For Enemy
enemy1 = enemy(400,100,white)
enemy4 = enemy(400,400,white)

# For Enemy2
enemy21 = enemy2(400,300,white)

# For Enemy3
ememy31 = enemy3(400,white)


enemys = [enemy1,enemy4]


# enemys
enemyGroup = pygame.sprite.Group()
level1 = [
"                        1         1            1                                                           ","                             1         1       1      1          1      1    1    1    1    1     1                            ","                          1                 1               1      1                 1                  1   ","                   1          1         1      1    1    1        1   1    1    1         1     1                ","                    1    1         1           1         1    1                      1   1    1     1     1    1  ","                              1           1                             1     1                                    ","                      1   1       1   1       1    1     1     1    1              1     1      1      1       ",]


for iy,row in enumerate(level1):
    for ix,col in enumerate(row):
        if col == "1":
            new_enemy = enemy(ix*70,iy*70,(255,255))
            enemys.append(new_enemy)



# Redrawwinodw
def redrawwindow():
    window.fill((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 enemygun

    for bullet in bullets:
        bullet.draw(window)

    for egun in eguns:
        egun.draw(window)





# FPS Cnd Clock
fps = (30)
clock = pygame.time.Clock()

# 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

    # 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)))

        btimer = 1




    # This is enemy bullets and when player press Spacebar they come
    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 etimer == 0:
            if len(eguns) < 30:
                eguns.append(enemybullets(round(enemy.x+enemy.width//2),0)))

            etimer = 1



    # For enemy to Move
    for enemy in enemys:
        enemy.x -= enemy.speed
    


    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()
        

解决方法

Class Names通常应使用CapWords约定(例如class Column::Iterator { private: Column* father; size_t index; public: Iterator(Column* father,size_t index) : father(father),index(index { } Iterator operator++() { Iterator i = *this; i.index++; return i; } Iterator operator++(int) { index++; return *this; } int32_t& operator*() { return (*father)[index]; } int32_t* operator->() { return &((*father)[index]); } bool operator==(const Iterator& other) { return father == other.father and index == other.index; } bool operator!=(const Iterator& other) { return not operator==(other); } }; -> import re equation = '30=10x-20' #Checking 'c = bx+a' or 'bx+a = c' x = re.match('[0-9]+=[0-9]+x+?-?[0-9]+',equation) if x: #print('True') output_1 = equation.split('=') c = int(output_1[0]) print('c = ',c) # checking the operator between bx and a #rhs = '[0-9]+x+?[0-9]+' y = re.match('[0-9]+x-?[0-9]+',output_1[1]) if y: #filter_b = ['x'] output_2 = output_1[1].split('-') a = int(output_2[1]) b = int(output_2[0].replace("x","")) print('a = ',a) print('b = ',b) else: print('False') else: print('False') )。
实现一个单一的类c = 30 a = 20 b = 10 就足够了。图像是类的属性,图像文件名可以是构造函数的参数。

无论如何,主要的问题是,您只有1个全局变量class enemyclass Enemy必须是类Enemy的属性:

btimer
btimer
Enemy

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。