账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    我根据书上改编的pygame小游戏,为什么总是提示不能完整出来?
    20
    0

    这是第一个marval_invasion

    import pygame
    
    from settings import Settings
    from ironman import Ironman
    from pygame.sprite import Group
    from mieba import Mieba
    import game_funtions 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("marvel_invasion")
    
        ironman=Ironman(ai_settings,screen)
        bullets=Group()
        miebas=Group()
        gf.create_fleet(ai_settings,screen,ironman,miebas)
        bg_color=(255,255,255)
        mieba=Mieba(ai_settings,screen)
    
        while True:
            gf.check_events(ai_settings,screen,ironman,bullets)
            ironman.update()
            gf.update_bullets(bullets)
            gf.update_screen(ai_settings,screen,ironman,miebas,bullets)
    run_game()

    The second

    import pygame
    
    class Ironman():
        def __init__(self,ai_settings,screen):
            self.screen=screen
            self.ai_settings=ai_settings
            self.image=pygame.image.load('images/iron-man.bmp')
            self.rect=self.image.get_rect()
            self.screen_rect=screen.get_rect()
    
            self.rect.centery=self.screen_rect.centery
            self.rect.right=self.screen_rect.right
            self.center=float(self.rect.centery)
            self.moving_down=False
            self.moving_up=False
    
        def update(self):
            if self.moving_down and self.rect.bottom<self.screen_rect.bottom:
                self.center+=self.ai_settings.ironman_speed_factor
            if self.moving_up and self.rect.top>0:
                self.center-=self.ai_settings.ironman_speed_factor
            self.rect.centery=self.center
        def blitme(self):
            self.screen.blit(self.image,self.rect)

    The third

    import pygame
    from pygame.sprite import Sprite
    
    class Mieba(Sprite):
        def __init__(self,ai_settings,screen):
            super(Mieba,self).__init__()
            self.screen=screen
            self.ai_settings=ai_settings
    
            self.image=pygame.image.load('images/mieba.bmp')
            self.rect=self.image.get_rect()
    
            self.rect.x=self.rect.width
            self.rect.y=self.rect.height
    
            self.x=float(self.rect.x)
        def blitme(self):
            self.screen.blit(self.image,self.rect)请输入代码

    The fourth

    import pygame
    from pygame.sprite import Sprite
    
    class Bullet(Sprite):
        def __init__(self,ai_settings,screen,ironman):
            super(Bullet, self).__init__()
            self.screen=screen
    
            self.rect=pygame.Rect(0,0,ai_settings.bullet_width,
                ai_settings.bullet_height)
            self.rect.centery=ironman.rect.centery
            self.rect.left=ironman.rect.left
            self.x=float(self.rect.x)
            self.color=ai_settings.bullet_color
            self.speed_factor=ai_settings.bullet_speed_factor
        def update(self):
            self.x-=self.speed_factor
            self.rect.x=self.x
        def draw_bullet(self):
            pygame.draw.rect(self.screen,self.color,self.rect)

    The fifth

    import sys
    import pygame
    from bullet import Bullet
    from mieba import Mieba
    
    def check_keydown_events(event,ai_settings,screen,ironman,bullets):
        if event.key == pygame.K_DOWN:
            ironman.moving_down = True
        elif event.key == pygame.K_UP:
            ironman.moving_up = True
        elif event.key==pygame.K_SPACE:
            fire_bullet(ai_settings,screen,ironman,bullets)
        elif event.key==pygame.K_q:
            sys.exit()
    def check_keyup_events(event,ironman):
        if event.key == pygame.K_DOWN:
            ironman.moving_down = False
        elif event.key == pygame.K_UP:
            ironman.moving_up = False
    def check_events(ai_settings,screen,ironman,bullets):
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                sys.exit()
            elif event.type==pygame.KEYDOWN:
                check_keydown_events(event,ai_settings,screen,ironman,bullets)
            elif event.type==pygame.KEYUP:
                check_keyup_events(event,ironman)
    def update_screen(ai_settings,screen,ironman,miebas,bullets):
        screen.fill(ai_settings.bg_color)
        for bullet in bullets.sprites():
            bullet.draw_bullet()
        ironman.blitme()
        miebas.draw(screen)
        pygame.display.flip()
    def update_bullets(bullets):
        bullets.update()
        for bullet in bullets.copy():
            if bullet.rect.right<=0:
                bullets.remove(bullet)
        print(len(bullets))
    def fire_bullet(ai_settings,screen,ironman,bullets):
        if len(bullets)<ai_settings.bullets_allowed:
            new_bullet=Bullet(ai_settings,screen,ironman)
            bullets.add(new_bullet)
    def get_number_miebas_y(ai_settings,mieba_height):
        available_space_y = ai_settings.screen_height - 2 * mieba_height
        number_miebas_y = int(available_space_y / (0.95 * mieba_height))
        return number_miebas_y
    def get_number_columns(ai_settings,ironman_width,mieba_width):
        available_space_x=(ai_settings.screen_width-
                           (3*mieba_width)-ironman_width)
        number_columns=int(available_space_x)/(2*mieba_width)
        return number_columns
    def create_mieba(ai_settings,screen,miebas,mieba_number):
        mieba = Mieba(ai_settings, screen)
        mieba_height=mieba.rect.height
        mieba.y = mieba_height + 1 * mieba_height * mieba_number
        mieba.rect.y = mieba.y
        mieba.rect.x=mieba.rect.width+2*mieba.rect.width
        miebas.add(mieba)
    def create_fleet(ai_settings,screen,ironman,miebas):
        mieba = Mieba(ai_settings, screen)
        number_miebas_y=get_number_miebas_y(ai_settings,mieba.rect.height)
        number_columns=get_number_columns(ai_settings,ironman.rect.width,
            mieba.rect.width)
        for colmns_number in range(number_columns):
            for mieba_number in range(number_miebas_y):
                create_mieba(ai_settings,screen,miebas,mieba_number,
                    colmns_number)

    the sixth

    class Settings():
        def __init__(self):
    
            self.screen_width=1200
            self.screen_height=800
            self.bg_color=(255,255,255)
    
            self.ironman_speed_factor=1.5
    
            self.bullet_speed_factor=4.5
            self.bullet_width=20
            self.bullet_height=3
            self.bullet_color=255,215,0
            self.bullets_allowed=5

    以上就是所有代码,但是运行总是TypeError: 'float' object cannot be interpreted as an integer
    我的构思是将发射子弹的飞船放在屏幕右边中间,外星人放在左侧构建成群的。
    希望大佬看后能帮忙解惑一下哪里编写不对,外星人的放置有没有什么其他方法

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部