python 外星人大战,飞船不移动怎么办

今天遇到的小问题!便对着书边敲代码,发现出现错误。python 外星人大战,飞船不移动。这个问题我首先是发去了吾爱,不过后期我自己解决了。如题,边看书边敲的代码,发现飞船不移动。求大佬帮忙看一下!主文件本来发现问题的时候是很慌的,我一开始是以为可能跟书上的内容不太一样,但是后来下了源代码发现确实应该那样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# main.py
import pygame
from setting import Settings
from ship import Ship
import game_functions as gf

def run_game():
# 初始化游戏并且创建一个屏幕对象
pygame.init()

# 初始化背景属性
ai_settings = Settings()

# 使类setting里的内容直接被调用
screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
pygame.display.set_caption("Alien Invasion") # 窗口名字

# 创建飞船
ship = Ship(screen)

# 开始游戏的主循环
while True:
# 监视鼠标和键盘事件
gf.check_events(ship)
gf.update_screen(ai_settings, screen, ship)

run_game()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# game_functions.py
import sys
import pygame

def check_events(ship):
"""响应按键和鼠标事件"""
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT: # 向右移动飞船
ship.rect.centerx += 1
elif event.key == pygame.K_LEFT:
ship.rect.centerx -= 1

def update_screen(ai_settings, screen, ship):
"""更新数据"""
screen.fill(ai_settings.bg_color)
ship.blitme()
pygame.display.flip()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# ship.py
import pygame

class Ship():
def __init__(self, screen):
"""初始化飞船位置"""
self.screen = screen

# 加载飞船图像并获取其外接矩形
self.image = pygame.image.load("images/ship.bmp")
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()

# 将每艘新飞船放在屏幕底部中央
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom

def blitme(self):
"""在指定位置绘制飞船"""
self.screen.blit(self.image, self.rect)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# ship.py
import pygame

class Ship():
def __init__(self, screen):
"""初始化飞船位置"""
self.screen = screen

# 加载飞船图像并获取其外接矩形
self.image = pygame.image.load("images/ship.bmp")
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()

# 将每艘新飞船放在屏幕底部中央
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom

def blitme(self):
"""在指定位置绘制飞船"""
self.screen.blit(self.image, self.rect)

1
2
3
4
5
6
7
8
9
10
# setting.py
class Settings():
"""储存外星人大战的所有设置"""
def __init__(self):
"""初始化游戏的设置"""
# 屏幕设置
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (230, 230, 230)

最后还是把书上的内容都复制下来,然后挨个比对,发现错误是game_functions.py文件内第9行if event.type == pygame.K_RIGHT:应该把event.type改为event.key!! 敲代码还是要看仔细,仔细很重要,细节决定成败!

python 外星人大战,飞船不移动怎么办

http://www.datehoer.com/posts/69c5bd21-6e80-11ee-a697-01b0896cf41d/

作者

datehoer

发布于

2020-11-07

更新于

2023-10-19

许可协议

评论