1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python外星人入侵游戏加随机游动_Python外星人入侵游戏(四):飞船左右移动

python外星人入侵游戏加随机游动_Python外星人入侵游戏(四):飞船左右移动

时间:2021-12-03 23:13:35

相关推荐

python外星人入侵游戏加随机游动_Python外星人入侵游戏(四):飞船左右移动

今日任务:

控制飞船

动手前思考

1.如何实现左右移动;游戏是通过循环来刷新界面,那就需要在循环中更新飞船的位置,更新位置是通过按键的点击,所以操作应该在监听按键和页面刷新中完成

2.考虑到习惯,我们通常点击后不松开就会一直移动;移动不能出屏幕,考虑好之后,代码如下

实现代码

alien_invasion.py

import sys

import pygame

from setting 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("外星人入侵")

# 创建一艘飞船

ship = Ship(ai_settings, screen)

# 开始游戏主循环

while True:

check_events(ship)

ship.update()

update_screen(ai_settings, screen, ship)

# 监测事件

def check_events(ship):

# 监视键盘和鼠标事件

for event in pygame.event.get():

if event.type == pygame.QUIT:

sys.exit()

elif event.type == pygame.KEYDOWN:

check_keydown_events(event, ship)

elif event.type == pygame.KEYUP:

check_keyup_events(event, ship)

def check_keydown_events(event, ship):

"""响应按键"""

if event.key == pygame.K_RIGHT:

ship.moving_right = True

if event.key == pygame.K_LEFT:

ship.moving_left = True

def check_keyup_events(event, ship):

"""响应松开"""

if event.key == pygame.K_RIGHT:

ship.moving_right = False

if event.key == pygame.K_LEFT:

ship.moving_left = False

# 更新屏幕

def update_screen(ai_settings, screen, ship):

# 每次循环都重绘屏幕

screen.fill(ai_settings.bg_color)

ship.blitme()

# 让最近绘制的屏幕可见

pygame.display.flip()

run_game()

ship.py

import pygame

class Ship:

def __init__(self, ai_settings, screen):

"""初始化飞船并设置初始位置"""

self.screen = screen

# 加载飞船图像并设置其初始位置

self.image = pygame.image.load('img/ship.png')

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

self.ai_settings = ai_settings

# 移动标志

self.moving_right = False

self.moving_left = False

def update(self):

"""根据移动标志调整飞船位置"""

if self.moving_right and self.rect.right < self.screen_rect.right:

self.rect.centerx += self.ai_settings.ship_speed_factor

elif self.moving_left and self.rect.left > 0:

self.rect.centerx -= self.ai_settings.ship_speed_factor

def blitme(self):

"""在指定位置绘制飞船"""

self.screen.blit(self.image, self.rect)

小结

Python 使用不是main函数哦,注意变量的使用,到这里,我终于知道,为什么要建一个设置类,去存储常量,不是Java随便找个地方设置一个全局变量了。

Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。