和风畅远 2020-04-19 23:12 采纳率: 100%
浏览 456
已采纳

新人求教:请Python大佬帮我看看为什么这段代码会提示“SyntaxError: invalid syntax”语法错误

本来之前按照书上的好好的,但是不知道怎么的,后面修改代码的时候就出现了语法错误:
Traceback (most recent call last):
File "alien_invasion.py", line 9, in
import game_functions as gf
File "D:\python_work\第12章\alien_invasion\game_functions.py", line 45
def check_play_button(ai_settings,screen,stats,sb,play_button,ship,
^
SyntaxError: invalid syntax


(program exited with code: 1)

请按任意键继续. . .

这个是我的代码

def check_play_button(ai_settings,screen,stats,sb,play_button,ship,
    aliens,bullets,mouse_x,mouse_y):
    # 在玩家单击Play按钮时开始新游戏 #
    button_clicked = play_button.rect.collidepoint(mouse_x,mouse_y)
    if button_clicked and not stats.game_active:
        # 重置游戏设置
        ai_settings.initialize_dynamic_settings()
        # 隐藏光标
        pygame.mouse.set_visible(False)     
        # 重置游戏统计信息
        stats.reset_stats() 
        stats.game_active = True
        # 重置记分牌图像
        sb.prep_score()
        sb.prep_high_score()
        sb.prep_level()
        sb.prep_ships()
        # 清空外星人列表和子弹列表
        aliens.empty()  
        bullets.empty()
        #创建一群新的外星人,并让飞船居中
        create_fleet(ai_settings,screen,ship,aliens)
        ship.center_ship()

再原文件里
后来我有重新贴到新的.PY文件中
粘贴在新的.PY文件后

做过的措施:
排除了中文符号的可能(用英文字符逐个修改的);
然后也取消过缩进让后面的参数在一排还是会提示错误;
重启过电脑;
将此段代码重新编写过;
为什么会出现语法错误呢?请求大佬指教!

以下是整个文件的代码

# coding:utf-8
# game_functions.py
import sys
from time import sleep
import pygame
from bullet import Bullet
from alien import Alien

def check_keydown_events(event,ai_settings,screen,ship,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_SPACE:
        fire_bullet(ai_settings,screen,ship,bullets)
    elif event.key == pygame.K_q:
        sys.exit()

def fire_bullet(ai_settings,screen,ship,bullets):
    if len(bullets) < ai_settings.bullets_allowed:
        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

def check_events(ai_settings,screen,stats,sb,play_button,ship,aliens,
    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,ship,bullets)
        elif event.type == pygame.KEYUP:
            check_keyup_events(event,ship)
        elif event.type == pygame.MOUSEBUTTONDOWN:      
            mouse_x,mouse_y = pygame.mouse.get_pos()    
            check_play_button(ai_settings,screen,stats,sb,play_button,
                ship,aliens,bullets,mouse_x,mouse_y 

def check_play_button(ai_settings,screen,stats,sb,play_button,ship,
    aliens,bullets,mouse_x,mouse_y):
    # 在玩家单击Play按钮时开始新游戏 #
    button_clicked = play_button.rect.collidepoint(mouse_x,mouse_y)
    if button_clicked and not stats.game_active:
        # 重置游戏设置
        ai_settings.initialize_dynamic_settings()
        # 隐藏光标
        pygame.mouse.set_visible(False)     
        # 重置游戏统计信息
        stats.reset_stats() 
        stats.game_active = True
        # 重置记分牌图像
        sb.prep_score()
        sb.prep_high_score()
        sb.prep_level()
        sb.prep_ships()
        # 清空外星人列表和子弹列表
        aliens.empty()  
        bullets.empty()
        #创建一群新的外星人,并让飞船居中
        create_fleet(ai_settings,screen,ship,aliens)
        ship.center_ship()


def update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,
    play_button):
    # 更新屏幕上的图像,并切换到新屏幕
    screen.fill(ai_settings.bg_color)
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    ship.blitme()
    aliens.draw(screen)
    # 显示得分
    sb.show_score()
    # 如果游戏处于非活动状态,就绘制Play按钮
    if not stats.game_active:
        play_button.draw_button()
    # 让最近绘制的屏幕可见
    pygame.display.flip()

def update_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets):
    #更新子弹的位置,并删除已消失的子弹
    bullets.update()
    #删除已消失的子弹
    for bullet in bullets.copy():
        if bullet.rect.bottom <= 0:
            bullets.remove(bullet)
    check_bullet_alien_collisions(ai_settings,screen,stats,sb,ship,
        aliens,bullets)

def check_bullet_alien_collisions(ai_settings,screen,stats,sb,ship,
    aliens,bullets):
    ##响应子弹和外星人的碰撞##
    # 删除发生碰撞的子弹和外星人 
    collisions = pygame.sprite.groupcollide(bullets,aliens,True,True)
    if collisions:
        for aliens in collisions.values():  #1
            stats.score += ai_settings.alien_points * len(aliens)
            sb.prep_score()
        check_high_score(stats,sb)

    if len(aliens) == 0:
        # 如果整群外星人都被消灭,就提高一个等级
        bullets.empty()
        #p.s在此调用settings.py的increase_speed方法
        ai_settings.increase_speed()
        #提高等级
        stats.level += 1
        sb.prep_level() 
        create_fleet(ai_settings,screen,ship,aliens)

def get_number_aliens_x(ai_settings,alien_width):                       
    # 计算每行可容纳多少个外星人
    available_space_x = ai_settings.screen_width - 2 * alien_width
    number_aliens_x = int(available_space_x / (2 * alien_width))
    return number_aliens_x

def get_number_rows(ai_settings,ship_height,alien_height):                  
    # 计算屏幕可容纳多少行外星人
    available_space_y = (ai_settings.screen_height - 
        (3 * alien_height) - ship_height)                                  
    number_rows = int(available_space_y / (2 * alien_height))
    return number_rows

def create_alien(ai_settings,screen,aliens,alien_number,row_number):
    # 创建一个外星人并将其放在当前行
    alien = Alien(ai_settings,screen)
    alien_width = alien.rect.width                                      

    alien.x = alien_width + 2 * alien_width * alien_number
    alien.rect.x = alien.x

    alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number       
    aliens.add(alien)

def create_fleet(ai_settings,screen,ship,aliens):
    # 创建外星人群
    # 创建一个外星人,并计算每行可容纳多少个外星人
    alien = Alien(ai_settings,screen)
    number_aliens_x = get_number_aliens_x(ai_settings,alien.rect.width) 
    number_rows = get_number_rows(ai_settings,ship.rect.height,
        alien.rect.height)
    # 创建外星人群
    for row_number in range(number_rows):                                       
        for alien_number in range(number_aliens_x):
            create_alien(ai_settings,screen,aliens,alien_number,row_number) 

def check_fleet_edges(ai_settings,aliens):
    # 有外星人到达边缘时采取相应的措施
    for alien in aliens.sprites():                          
        if alien.check_edges():
            change_fleet_direction(ai_settings,aliens)
            break

def change_fleet_direction(ai_settings,aliens):
    # 将整群外星人下移,并改变它们的方向"""
    for alien in aliens.sprites():
        alien.rect.y += ai_settings.fleet_drop_speed        
    ai_settings.fleet_direction *= -1

def ship_hit(ai_settings,screen,stats,sb,ship,aliens,bullets):
    """响应被外星人撞到的飞船"""
    if stats.ships_left >0 :
        # 将ships_left减1
        stats.ships_left -= 1
        # 更新记分牌
        sb.prep_ships() 
        #清空外星人列表和子弹列表
        aliens.empty()          
        bullets.empty()
        #创建一群新的外星人,并将飞船放到屏幕底端中央
        create_fleet(ai_settings,screen,ship,aliens)    
        ship.center_ship()
        # 暂停
        sleep(0.5)  
    else:
        stats.game_active = False
        pygame.mouse.set_visible(True)

def check_aliens_bottom(ai_settings,screen,stats,sb,ship,aliens,bullets):
    # 检查是否有外星人抵达屏幕底端 #
    screen_rect = screen.get_rect()
    for alien in aliens.sprites():
        if alien.rect.bottom >= screen_rect.bottom:
            # 像飞船被碰到一样进行处理
            ship_hit(ai_settings,screen,stats,sb,ship,aliens,bullets)
            break

def update_aliens(ai_settings,screen,stats,sb,ship,aliens,bullets): 
    ##PS:注意 screen,stats交换了位置
    # 检查是否外星人位于屏幕边缘,并更新整群外星人的位置 #
    check_fleet_edges(ai_settings,aliens)                   
    aliens.update()
    # 检测外星人和飞船之间的碰撞
    if pygame.sprite.spritecollideany(ship,aliens):
        ship_hit(ai_settings,screen,stats,sb,ship,aliens,bullets)
    ##PS:注意 screen,stats交换了位置 
    # 检查是否有外星人到达屏幕底端
    check_aliens_bottom(ai_settings,screen,stats,sb,ship,aliens,bullets)

def check_high_score(stats,sb):
    ###检查是否诞生了新的最高得分###
    if stats.score > stats.high_score:
        stats.high_score = stats.score
        sb.prep_high_score()
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-04-20 18:38
    关注
        elif event.type == pygame.MOUSEBUTTONDOWN:      
            mouse_x,mouse_y = pygame.mouse.get_pos()    
            check_play_button(ai_settings,screen,stats,sb,play_button,
                ship,aliens,bullets,mouse_x,mouse_y 
    
    这里少了后括号!!!
    

    问题解决的话,请点采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!