鱼C论坛

 找回密码
 立即注册
查看: 1790|回复: 2

[已解决]飞机大战运行显示'NoneType' and 'int'是什么意思?

[复制链接]
发表于 2021-1-6 20:07:14 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 凉风吹 于 2021-1-6 20:09 编辑

自己看别人视频写的飞机大战代码,写到碰撞检测,按空格发射子弹,直接运行没问题,一按空格发射子弹就会显示:

[b]Traceback (most recent call last):
  File "C:\Users\86176\Desktop\飞机大战\飞机大战.py", line 93, in <module>
    show_bullets()
  File "C:\Users\86176\Desktop\飞机大战\飞机大战.py", line 56, in show_bullets
    b.hit()
  File "C:\Users\86176\Desktop\飞机大战\飞机大战.py", line 48, in hit
    if(distance(self.X,self.Y,m.midX,m.midY) < 80):
TypeError: '<' not supported between instances of 'NoneType' and 'int'
libpng warning: iCCP: known incorrect sRGB profile

百度了,好像是说啥没有返回值,没有看懂

麻烦各位大佬帮我看看 ,这是代码
import pygame
import random
import math
#初始化界面
pygame.init()
screen = pygame.display.set_mode((600,680))
pygame.display.set_caption('飞机大战')
bg2=pygame.image.load('images/bg2.jpg')

bound=pygame.image.load('images/bound.jpg')
#飞机类
ship=pygame.image.load('images/ship.png')
shipX = 270
shipY = 550
shipStep = 0
number_of_mides = 5
#敌人类
class Mid():
    def __init__(self):
        self.midimg = pygame.image.load('images/sfemy.png')
        self.midX = random.randint(0,600)
        self.midY = random.randint(10, 100)
        self.midStep =0
    #重置敌人位置
    def reset(self):
        self.midX = random.randint(0, 600)
        self.midY = random.randint(10, 100)

mides = []
for M in range(number_of_mides):
    mides.append(Mid())
def show_Mid():
    for m in mides:
        screen.blit(m.midimg, (m.midX, m.midY))
        m.midY += 0.12
     # 防止敌人出界
        if (m.midY > 613 or m.midY < 0):
            m.midX = random.randint(77, 523)
            m.midY = random.randint(10, 100)
class Bullet():#子弹类
    def __init__(self):
        self.img = pygame.image.load('images/bossair2.png')
        self.X = shipX+19
        self.Y = shipY-10
        self.Step =0.5
    def hit(self):
        for m in mides:
            if(distance(self.X,self.Y,m.midX,m.midY) < 80):
                bullets.remove(self)
                m.reset()

bullets = []
def show_bullets():
    for b in bullets:
        screen.blit(b.img,(b.X,b.Y))
        b.hit()

        b.Y -= b.Step
        if b.Y < 0 :
            bullets.remove(b)
def distance(bx,by,mx,my):
    a = bx-mx
    b = by-my
    math.sqrt(a*a + b*b)#sqrt开根号
#游戏主循环
running = True
while running:
    screen.blit(bound,(0,0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        #通过键盘控制飞机移动
        if event.type == pygame.KEYDOWN:#按下
            if event.key == pygame.K_RIGHT:
                shipStep = 0.4
            elif event.key == pygame.K_LEFT:
                shipStep = -0.4
            elif event.key == pygame.K_SPACE:
                bullets.append(Bullet())

        if event.type == pygame.KEYUP:#抬起
            shipStep = 0
    screen.blit(ship, (shipX, shipY))
    shipX += shipStep
    # 防止飞机出界
    if shipX > 507:
        shipX = 507
    if shipX < 0:
        shipX = 0

    show_Mid()
    show_bullets()
    pygame.display.update()
最佳答案
2021-1-6 20:09:01
def distance(bx,by,mx,my):
    a = bx-mx
    b = by-my
    return math.sqrt(a*a + b*b)  # 修改此句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-6 20:09:01 | 显示全部楼层    本楼为最佳答案   
def distance(bx,by,mx,my):
    a = bx-mx
    b = by-my
    return math.sqrt(a*a + b*b)  # 修改此句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-6 20:11:49 | 显示全部楼层

解决了,谢谢大哥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 22:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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