云梦泽๑҉ 2023-06-08 08:30 采纳率: 100%
浏览 23
已结题

python外星人入侵项目中的问题

pygame中外星人入侵项目,飞船移动问题。

#当按一次右键或左键,飞船就会一直移动至屏幕边缘,且再按左键或右键时,飞船不会移动
#和书上代码反复核对过,没发现问题,求求大佬帮帮孩子吧~
#代码如下
_alien_invasion.py_

import sys
import pygame
import game_functions as gf
 
from settings import Settings
from ship import Ship
 
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)  # screen实参
 
    # 开始游戏的主循环
    while True:
        gf.check_event(ship)  # 这里的ship是实参
        ship.update()
        gf.update_screen(ai_settings, screen, ship)
 
 
run_game()

ship.py

import sys
import pygame
 
 
def check_keydown_events(event, ship):
    if event.key == pygame.K_RIGHT:
        ship.moving_right = True
    elif event.key == pygame.K_LEFT:
        ship.moving_left = True
 
 
def check_keyup_events(event, ship):
    if event.key == pygame.K_RIGHT:
        ship.moving_right = True
    elif event.key == pygame.K_LEFT:
        ship.moving_left = True
 
 
def check_event(ship):
    '''捕获按键和鼠标事件'''
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
 
        elif event.type == pygame.KEYDOWN:  # type 类别
            check_keydown_events(event, ship)
        elif event.type == pygame.KEYUP:
            check_keyup_events(event, ship)
 
 
def update_screen(ai_settings, screen, ship):
    '''更新屏幕上的图像,并切换新屏幕'''
    # 每次循环都会绘制新屏幕
    screen.fill(ai_settings.screen_color)  # 设置屏幕背景色  方法screen.fill()只接受一个实参
    ship.blit()
    pygame.display.flip()  # 让最近绘制的屏幕可见  # flip浏览

game_functions.py__

import sys
import pygame
 
 
def check_keydown_events(event, ship):
    if event.key == pygame.K_RIGHT:
        ship.moving_right = True
    elif event.key == pygame.K_LEFT:
        ship.moving_left = True
 
 
def check_keyup_events(event, ship):
    if event.key == pygame.K_RIGHT:
        ship.moving_right = True
    elif event.key == pygame.K_LEFT:
        ship.moving_left = True
 
 
def check_event(ship):
    '''捕获按键和鼠标事件'''
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
 
        elif event.type == pygame.KEYDOWN:  # type 类别
            check_keydown_events(event, ship)
        elif event.type == pygame.KEYUP:
            check_keyup_events(event, ship)
 
 
def update_screen(ai_settings, screen, ship):
    '''更新屏幕上的图像,并切换新屏幕'''
    # 每次循环都会绘制新屏幕
    screen.fill(ai_settings.screen_color)  # 设置屏幕背景色  方法screen.fill()只接受一个实参
    ship.blit()
    pygame.display.flip()  # 让最近绘制的屏幕可见  # flip浏览

  • 写回答

1条回答 默认 最新

  • CF2301_77400554X 2023-06-08 08:37
    关注

    引用chatgpt部分指引作答:
    在你提供的代码中,我注意到在ship.py文件中的check_keyup_events函数中存在一个错误。在该函数中,当检测到pygame.K_LEFT键释放时,你错误地将ship.moving_left设置为True,而实际上应该将其设置为False,以停止飞船的移动。同样,在检测到pygame.K_RIGHT键释放时,你也犯了相同的错误。

    为了解决这个问题,你需要修改check_keyup_events函数中的代码如下:

    def check_keyup_events(event, ship):
        if event.key == pygame.K_RIGHT:
            ship.moving_right = False  # 将 moving_right 设置为 False
        elif event.key == pygame.K_LEFT:
            ship.moving_left = False  # 将 moving_left 设置为 False
    

    请确保在ship.py文件中的check_keyup_events函数中进行了这些更改,然后重新运行程序,看看问题是否得到解决。

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

报告相同问题?

问题事件

  • 系统已结题 6月16日
  • 已采纳回答 6月8日
  • 创建了问题 6月8日

悬赏问题

  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?