鱼C论坛

 找回密码
 立即注册
查看: 1674|回复: 3

自己理解尝试写了己方飞机的代码,发现子弹原地不动,帮忙求解!拜托

[复制链接]
发表于 2020-10-2 10:18:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 幸运值MAX 于 2020-10-3 11:59 编辑

import pygame


#己方飞机类
class Myplane:
    def __init__(self, screen):
        self.x = 180
        self.y = 550
        self.screen = screen
        self.image = p.image.load('./sucai/images/plane.png')
        self.moving_left = False
        self.moving_right = False
        self.moving_up = False
        self.moving_down = False
        self.keeping_fire = False
        self.bulletlist = []

    def display(self):
        self.screen.blit(self.image, (self.x, self.y))
        delbulletlist = []

        for bullet in self.bulletlist:
            bullet.display()
            bullet.move()

        for firebullet in self.bulletlist:
            if firebullet.judge:
                delbulletlist.append(firebullet)

        for item in delbulletlist:
            self.bulletlist.remove(item)

    def control(self):
        for event in p.event.get():
            if event.type == p.QUIT:
                exit()
        #实现按下按钮时激活  
        elif event.type == p.KEYDOWN:
                if event.key == p.K_d:
                    self.moving_right = True

                elif event.key == p.K_a:
                    self.moving_left = True

                elif event.key == p.K_w:
                    self.moving_up = True

                elif event.key == p.K_s:
                    self.moving_down = True

                elif event.key == p.K_SPACE:
                    self.keeping_fire = True

            #实现松开按钮时关闭
            elif event.type == p.KEYUP:
                if event.key == p.K_d:
                    self.moving_right = False

                elif event.key == p.K_a:
                    self.moving_left = False

                elif event.key == p.K_w:
                    self.moving_up = False

                elif event.key == p.K_s:
                    self.moving_down = False

                elif event.key == p.K_SPACE:
                    self.keeping_fire = False

        if self.moving_left:
            if self.x > 0:
                self.x -= 0.4

        elif self.moving_right:
            if self.x < 355:
                self.x += 0.4

        elif self.moving_down:
            if self.y < 550:
                self.y += 0.4

        elif self.moving_up:
            if self.y > 0:
                self.y -= 0.4

        if self.keeping_fire:
        #创建子弹实例对象,并将产生的子弹添加到子弹列表中
            newbullet = MyBullet(self.x, self.y, self.screen)
            self.bulletlist.append(newbullet)


#己方子弹类
class MyBullet:
    def __init__(self, x, y, screen):
        self.x = x + 21
        self.y = y - 6
        self.screen = screen
        self.image = p.image.load('./sucai/images/bullet.png')

    def display(self):
        self.screen.blit(self.image, (self.x, self.y))

    def move(self):
        self.y -= 1

#判断是否子弹越界
    def judge(self):
        if self.y < 0:
            return True
        else:
            return False

def main():
    p.init()
    screen = p.display.set_mode((400, 600))
    background = p.image.load('./sucai/images/background.png')
    p.display.set_caption('大战外星飞船')
    myplane = Myplane(screen)

    while True:
        screen.blit(background, (0, 0))
        myplane.display()
        myplane.control()
        p.display.update()

if __name__ == '__main__':
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-3 18:45:07 | 显示全部楼层
小甲鱼的源代码:
pygame飞机大战.zip (1.43 MB, 下载次数: 6)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-4 12:54:37 | 显示全部楼层
嘉岳呀 发表于 2020-10-3 18:45
小甲鱼的源代码:

很感谢能回答问题,我已经买了小甲鱼的课件。但我这个什么也不参考自己凭理解写的代码找不到哪里有问题,然而子弹仅仅只在飞机头部出现。我尝试打印子弹列表,发现子弹列表中始终只有一个元素,而且没有移动就删除了。但我有限定条件:子弹出界以后才会被删除。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-14 20:15:32 | 显示全部楼层
我之前也写过,也是有问题找了半天。
再看看子弹这一块吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 23:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表