所以我一直在努力做到当我的敌人.x <700时开始向玩家射击,但它对我不起作用,它仅对其中一个起作用,而对唯一一个起作用为敌人工作是敌人之一。我曾尝试使用与播放器相同的代码,但没有用,也查看了错误,但没有,也检查了缩进。
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,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,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):
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("enemyplane1.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)
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):
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("enemyplane2.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)
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,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 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)
# Color
white = (255,255,255)
# Draw Player
playerman = player(5,250,90,40,white)
# For Enemy
enemy1 = enemy(400,100,90,40,white)
enemy4 = enemy(400,400,90,40,white)
# For Enemy2
enemy21 = enemy2(400,300,90,40,white)
# For Enemy3
ememy31 = enemy3(400,400,90,40,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,90,40,(255,255,255))
enemys.append(new_enemy)
# 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 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,0,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),round(enemy.y + enemy.height-24),(0,0,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()
答案 0 :(得分:2)
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 enemy
。 class Enemy
必须是类Enemy
的属性:
btimer
btimer
Enemy