飞船不能用键盘控制,即使是执行随时附赠的代码也是一样
import sys # 导入 sys 模块,用于退出程序
import pygame # 导入 pygame 模块,用于创建游戏窗口和处理事件
from settings import Settings
from ship import Ship
class AlienInvasion: # 定义一个类,表示外星人入侵的游戏
"""一个管理游戏资源和行为的类"""
def __init__(self) -> None: # 定义初始化方法,设置游戏的属性
"""初始化游戏并创建游戏资源"""
pygame.init() # 初始化 pygame ,准备显示模式和其他设置
self.settings = Settings()
self.clock = pygame.time.Clock() # 创建一个时钟对象,用于控制游戏的帧率
self.screen = pygame.display.set_mode(
(self.settings.screen_height, self.settings.screen_width)
) # 创建一个屏幕对象,设置分辨率为 3842x2160
pygame.display.set_caption("Alien Invasion") # 设置屏幕的标题为“Alien Invasion”
# 设置背景色
# self.bg_color = (230, 230, 230)
self.ship = Ship(self)
def run_game(self):
"""开始游戏的主循环"""
while True:
self._check_events()
self._update_screen()
# 每秒钟最多更新 60 次画面
self.clock.tick(60)
def _check_events(self):
for event in pygame.event.get():
# 如果用户单击了关闭按钮,退出程序
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
self.ship.moving_right = True
elif event.key == pygame.K_LEFT:
self.ship.moving_left = True
# self.ship.rect.x += 1
elif event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
self.ship.moving_right = False
elif event.key == pygame.K_LEFT:
self.ship.moving_left = False
def _update_screen(self):
# 每次循环都重绘屏幕
self.screen.fill(self.settings.bg_color)
self.ship.blitme()
# 更新屏幕上的图像,并切换到新屏幕
pygame.display.flip()
if __name__ == "__main__":
# 创建游戏实例并运行游戏
ai = AlienInvasion()
ai.run_game()
if __name__ == "__main__":
# 创建游戏实例并运行游戏
ai = AlienInvasion()
ai.run_game()
import pygame # 导入 pygame 模块,用于创建游戏窗口和处理图形
class Ship:
"""一个表示飞船的类"""
def __init__(self, ai_game) -> None:
"""初始化飞船并设置其初始位置"""
self.screen = ai_game.screen # 获取游戏窗口对象
self.screen_rect = ai_game.screen.get_rect() # 获取游戏窗口的矩形属性
self.image = pygame.image.load(
"E:/alien_invasion/images/ship.bmp"
) # 加载飞船的图像文件
self.rect = self.image.get_rect() # 获取飞船图像的矩形属性
self.rect.midbottom = self.screen_rect.midbottom # 将飞船的中下方对齐到游戏窗口的中下方
# 移动标志(飞船一开始不移动)
self.moving_right = False
self.moving_left = False
def update(self):
if self.moving_right:
self.rect.x += 1
if self.moving_left:
self.rect.x -= 1
def blitme(self):
"""在指定位置绘制飞船"""
self.screen.blit(self.image, self.rect) # 使用 pygame 的 blit 方法将飞船图像绘制到游戏窗口上
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.