今日任務(wù):
- 控制飛船
動(dòng)手前思考
- 1.如何實(shí)現(xiàn)左右移動(dòng)撮执;游戲是通過循環(huán)來刷新界面库糠,那就需要在循環(huán)中更新飛船的位置,更新位置是通過按鍵的點(diǎn)擊剥纷,所以操作應(yīng)該在監(jiān)聽按鍵和頁(yè)面刷新中完成
- 2.考慮到習(xí)慣痹籍,我們通常點(diǎn)擊后不松開就會(huì)一直移動(dòng);移動(dòng)不能出屏幕筷畦,考慮好之后词裤,代碼如下
實(shí)現(xiàn)代碼
alien_invasion.py
import sys
import pygame
from setting import Settings
from ship import Ship
def run_game():
# 初始化游戲并創(chuàng)建一個(gè)屏幕對(duì)象
pygame.init()
ai_settings = Settings()
screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
pygame.display.set_caption("外星人入侵")
# 創(chuàng)建一艘飛船
ship = Ship(ai_settings, screen)
# 開始游戲主循環(huán)
while True:
check_events(ship)
ship.update()
update_screen(ai_settings, screen, ship)
# 監(jiān)測(cè)事件
def check_events(ship):
# 監(jiān)視鍵盤和鼠標(biāo)事件
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):
"""響應(yīng)按鍵"""
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):
"""響應(yīng)松開"""
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):
# 每次循環(huán)都重繪屏幕
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):
"""初始化飛船并設(shè)置初始位置"""
self.screen = screen
# 加載飛船圖像并設(shè)置其初始位置
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
# 移動(dòng)標(biāo)志
self.moving_right = False
self.moving_left = False
def update(self):
"""根據(jù)移動(dòng)標(biāo)志調(diào)整飛船位置"""
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)
小結(jié)
Python 使用不是main函數(shù)哦,注意變量的使用鳖宾,到這里吼砂,我終于知道,為什么要建一個(gè)設(shè)置類鼎文,去存儲(chǔ)常量渔肩,不是Java隨便找個(gè)地方設(shè)置一個(gè)全局變量了。
Python 中的變量不需要聲明拇惋。每個(gè)變量在使用前都必須賦值周偎,變量賦值以后該變量才會(huì)被創(chuàng)建。
在 Python 中撑帖,變量就是變量蓉坎,它沒有類型,我們所說的"類型"是變量所指的內(nèi)存中對(duì)象的類型胡嘿。