鱼C论坛

 找回密码
 立即注册
查看: 2669|回复: 19

飞机大战中的问题救助

[复制链接]
发表于 2018-6-10 22:48:19 | 显示全部楼层 |阅读模式

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

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

x
这段是game_function中的代码,刚刚写完加入子弹的部分

import sys
import pygame
from bullet import Bullet

def check_keydown_events(event,ship,ai_settings,screen,bullets):
    if event.key==pygame.K_RIGHT:
        ship.moving_right=True
    elif event.key==pygame.K_LEFT:
        ship.moving_left=True
    elif event.key==pygame.K_UP:
        ship.moving_up=True
    elif event.key==pygame.K_DOWN:
        ship.moving_down=True
    elif event.key==pygame.K_SPACE:
        new_bullet=Bullet(ai_settings,screen,ship)
        bullets.add(new_bullet)


但一运行就会这样 搜狗截图20180610224012.png


报错上说bullets.add()后必须加可迭代内容,但我是完全按书上写的有大佬知道是哪里的问题吗,或者还用不用展示其他部分的代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-11 08:47:52 | 显示全部楼层
add 方法必须传入一个 可迭代 参数。
错误提示很清楚了,再检查下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-11 08:58:56 From FishC Mobile | 显示全部楼层
完全照抄书上的,检查过一遍了没问题,请问一般情况是哪里的错误会导致这样?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-11 11:14:09 | 显示全部楼层
混帖子,百度看  和你的代码也差不多   没学过这个,刚看python不到半个月
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-11 14:44:53 | 显示全部楼层
还有大佬吗,求助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-11 21:47:19 | 显示全部楼层
你的代码也不全把相关的发出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-11 21:54:55 | 显示全部楼层
错误是提示你要用可迭代序列添加,不是一个界面对象,
函数用错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-11 22:05:00 From FishC Mobile | 显示全部楼层
塔利班 发表于 2018-6-11 21:54
错误是提示你要用可迭代序列添加,不是一个界面对象,
函数用错了

那要怎么改呢(í _ ì)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-11 22:25:38 | 显示全部楼层
不发代码让我们猜什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-12 14:25:28 | 显示全部楼层
塔利班 发表于 2018-6-11 22:25
不发代码让我们猜什么

game_function
import sys
import pygame
from bullet import Bullet

def check_keydown_events(event,ship,ai_settings,screen,bullets):
    if event.key==pygame.K_RIGHT:
        ship.moving_right=True
    elif event.key==pygame.K_LEFT:
        ship.moving_left=True
    elif event.key==pygame.K_UP:
        ship.moving_up=True
    elif event.key==pygame.K_DOWN:
        ship.moving_down=True
    elif event.key==pygame.K_SPACE:
        new_bullet=Bullet(ai_settings,screen,ship)
        bullets.add(new_bullet)

def check_keyup_events(event,ship):
    if event.key==pygame.K_RIGHT:
        ship.moving_right=False
    elif event.key==pygame.K_LEFT:
        ship.moving_left=False
    elif event.key==pygame.K_UP:
        ship.moving_up=False
    elif event.key==pygame.K_DOWN:
        ship.moving_down=False


def check_events(ship,ai_settings,screen,bullets):
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()

        elif event.type==pygame.KEYDOWN:
            check_keydown_events(event,ship,ai_settings,bullets,screen)
        elif event.type==pygame.KEYUP:
            check_keyup_events(event,ship)

def update_screen(ai_settings,screen,ship,bullets):
    screen.fill(ai_settings.bg_color)
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    ship.blitme()

    pygame.display.flip()







settings.py
class Settings():
    def __init__(self):
        self.screen_width=900
        self.screen_height=600
        self.bg_color=(230,230,230)
        self.ship_speed_factor=5
        self.bullet_speed_factor=3
        self.bullet_width=3
        self.bullet_height=15
        self.bullet_color=60,60,60




bullet.py
import pygame
from pygame.sprite import Sprite

class Bullet(Sprite):
    def _init_(self,ai_settings,screen,ship):
        super(Bullet,self)._init_()
        self.screen=screen
        self.rect=pygame.Rect(
            0,0,ai_settings.bullet_width,ai_settings.bullet_height)
        self.rect.centerx=ship.rect.centerx
        self.rect.top=ship.rect.top
        self.y=float(self.rect.y)
        self.color=ai_settings.bullet_color
        self.speed_factor=ai_settings.bullet_speed_factor

    def update():
        self.y-=self.speed_factor
        self.rect.y=self,y
    def draw_bullet(self):
        pygame.draw.rect(self.screen,self.rect,self.color)



alien_invasion.py
import pygame

from pygame.sprite import Group
from settings import Settings
from ship import Ship
import game_functions as gf

def run_game():
    pygame.init()
    ai_settings=Settings()
    screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
    pygame.display.set_caption('Alien Invasion')
   
    ship=Ship(ai_settings,screen)
    bullets=Group()
   
    while True:
        screen.fill(ai_settings.bg_color)
        ship.blitme()
        pygame.display.flip()
        gf.check_events(ai_settings,screen,ship,bullets)
        ship.update()
        bullets.update()
        gf.update_screen(ai_settings,screen,ship,bullets)

run_game()


这些可以不
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-12 18:27:44 | 显示全部楼层
check_keydown_events(event,ship,ai_settings,screen,bullets):
你在后边是check_keydown_events(event,ship,ai_settings,bullets,screen)
后两个参数颠倒了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-12 20:24:08 | 显示全部楼层
塔利班 发表于 2018-6-12 18:27
check_keydown_events(event,ship,ai_settings,screen,bullets):
你在后边是check_keydown_events(event, ...

谢谢大佬,按你说的把有问题的地方都改了。大佬能不能再帮我看下bullet.py第5行super的位置有什么问题,改完上面的问题后报错就报那里(原来_init_已经改成了__init__)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-12 21:57:27 | 显示全部楼层
212361277 发表于 2018-6-12 20:24
谢谢大佬,按你说的把有问题的地方都改了。大佬能不能再帮我看下bullet.py第5行super的位置有什么问题, ...

错误信息发下,是super()那行?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-12 22:48:58 | 显示全部楼层
塔利班 发表于 2018-6-12 21:57
错误信息发下,是super()那行?

Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\alien Invasion\alien_invasion.py", line 26, in <module>
    run_game()
  File "C:\Users\Administrator\Desktop\alien Invasion\alien_invasion.py", line 21, in run_game
    gf.check_events(ai_settings,screen,ship,bullets)
  File "C:\Users\Administrator\Desktop\alien Invasion\game_functions.py", line 35, in check_events
    check_keydown_events(event,ai_settings,screen,ship,bullets)
  File "C:\Users\Administrator\Desktop\alien Invasion\game_functions.py", line 15, in check_keydown_events
    new_bullet=Bullet(ai_settings,screen,ship)
  File "C:\Users\Administrator\Desktop\alien Invasion\bullet.py", line 6, in __init__
    super(Bullet,self).__init__(self)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pygame\sprite.py", line 124, in __init__
    self.add(*groups)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pygame\sprite.py", line 142, in add
    self.add(*group)
TypeError: add() argument after * must be an iterable, not Bullet


飞船移动没问题,一按空格发射就这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-12 23:07:26 | 显示全部楼层
212361277 发表于 2018-6-12 22:48
Traceback (most recent call last):
  File "C:%users\Administrator\Desktop\alien Invasion\alien_in ...

super(Bullet,self).__init__()
改成Sprite.__init__(self)试试,反正是没看懂你的逻辑0 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-13 08:22:38 | 显示全部楼层
塔利班 发表于 2018-6-12 23:07
super(Bullet,self).__init__()
改成Sprite.__init__(self)试试,反正是没看懂你的逻辑0 0

解决了,谢谢大佬,不过最后发现是别的参数问题,super那句是对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-19 01:07:44 | 显示全部楼层
求问楼主最好怎样解决了,我也遇到类似的额问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-5 21:07:06 From FishC Mobile | 显示全部楼层
212361277 发表于 2018-6-13 08:22
解决了,谢谢大佬,不过最后发现是别的参数问题,super那句是对的

我也在做这个,是哪个参数的问题啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-13 09:54:42 | 显示全部楼层
链接: https://pan.baidu.com/s/1gLeSGQgKdnQupT2d_OzvBQ
提取码: 1fwa
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-13 15:04:57 | 显示全部楼层
一个账号 发表于 2019-9-13 09:54
链接: https://pan.baidu.com/s/1gLeSGQgKdnQupT2d_OzvBQ
提取码: 1fwa

飞机大战的全部代码,自己对着看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 08:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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