fre1228 2023-03-21 10:36 采纳率: 83.3%
浏览 13
已结题

python小游戏飞机大战 定义到子弹发射的代码总是不能用

python小游戏飞机大战
定义到子弹发射的代码总是不能用

import pygame
import random

FPS=60
WHITE=(255,255,255)
GREEN=(0,255,0)
RED=(255,0,0)
YELLOW=(0,0,255)
WIDTH=500
HEIGHT=600
pygame.init()
screen=pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("飞机大战")
clock=pygame.time.Clock()

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image=pygame.Surface((50,40))
        self.image.fill((0,255,0))
        self.rect=self.image.get_rect()
        self.rect.centerx=WIDTH/2
        self.rect.bottom=HEIGHT-10
        self.speedx=10
    def update(self):
        key_pressed=pygame.key.get_pressed()
        if key_pressed[pygame.K_RIGHT]:
            self.rect.x +=self.speedx
        if key_pressed[pygame.K_LEFT]:
            self.rect.x -=self.speedx
        if self.rect.right>WIDTH:
            self.rect.right=WIDTH
        if self.rect.left<0:
            self.rect.left=0
    def shoot(self):
        bullet=Bullet(self.rect.centerx,self.rect.top)
        all_sprites.add(bullet)

class Bullet(pygame.sprite.Sprite):
    def __init__(self,x,y):
        pygame.sprite.Sprite.__init__(self)
        self.image=pygame.Surface((10,20))
        self.image.fill(YELLOW)
        self.rect=self.image.get_rect()
        self.rect.centerx=x
        self.rect.bottom=y
        self.speedy=-10
    def update(self):
        self.rect.y+=self.speedy()
        if self.rect.bottom<0:
            self.kill()
        
            
class Rock(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image=pygame.Surface((30,40))
        self.image.fill(RED)
        self.rect=self.image.get_rect()
        self.rect.x=random.randrange(0,WIDTH-self.rect.width)
        self.rect.y=random.randrange(-100,-40)
        self.speedy=random.randrange(2,10)
        self.speedx=random.randrange(-3,3)
        
        
    def update(self):
        self.rect.y+=self.speedy
        self.rect.x+=self.speedx
        if self.rect.top>HEIGHT or self.rect.left>WIDTH or self.rect.right<0:
            self.rect.x=random.randrange(0,WIDTH-self.rect.width)
            self.rect.y=random.randrange(-100,-40)
            self.speedy=random.randrange(2,10)
            self.speedx=random.randrange(-3,3)
            
            
all_sprites=pygame.sprite.Group()
player=Player()
all_sprites.add(player)
rock=Rock()
all_sprites.add(rock)
for i in range(8):
    r=Rock()
    all_sprites.add(r)

running=True
while running:
    clock.tick(FPS)
    for event in pygame.event.get():
    
   if event.type==pygame.QUIT:
            running=False
        elif event.type==pygame.KEYDOWN:
            if event.key==pygame.K_SPACE:
                player.shoot()

            
    all_sprites.update()


    screen.fill(WHITE)
    all_sprites.draw(screen)
    pygame.display.update()

pygame.quit()


问题位置

   if event.type==pygame.QUIT:
            running=False
        elif event.type==pygame.KEYDOWN:
            if event.key==pygame.K_SPACE:
                player.shoot()

运行只后按空格

img

  • 写回答

2条回答 默认 最新

  • allyfireshen 2023-03-21 10:52
    关注

    你在47行定义了speedy是int类型的,但是你在49行却当成了函数来使用,49行修改如下:

    def update(self):
            self.rect.y+=self.speedy
            if self.rect.bottom<0:
                self.kill()
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 已采纳回答 3月21日
  • 创建了问题 3月21日

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示