12-3火箭:編寫一個遊戲, 開始時屏幕中央有一個火箭, 而玩家可使用四個方向鍵上下左右移動火箭。 請務必確保火箭不會移到屏幕外面 。
費了老勁把它改成這樣了,爲了把它放到一個文件裏,示例裏的東西都挪到一起了,紀念下
import sys
import pygame
class Rocket():
def __init__(self,screen):
#初始化飛船並設置其初始位置
self.screen = screen
#加載飛船圖像並獲取其外接矩形
self.image = pygame.image.load('images/rocket.jpg')
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
#將圖片放在屏幕中央
self.rect.centerx = self.screen_rect.width/2
self.rect.bottom = self.screen_rect.height/2 + self.image.get_height()/2
#移動標誌
self.moving_right = False
self.moving_left = False
self.moving_up = False
self.moving_down = False
def update(self):
"""根據移動標誌調整飛船的位置"""
if self.moving_right and self.rect.right < self.screen_rect.right + 20:
self.rect.centerx += 1
if self.moving_left and self.rect.left > 0-20:
self.rect.centerx -= 1
if self.moving_up and self.rect.top > 0-10:
self.rect.bottom -= 1
if self.moving_down and self.rect.bottom < self.screen_rect.bottom + 10:
self.rect.bottom += 1
def blitme(self):
#在指定位置繪製飛船
self.screen.blit(self.image, self.rect)
def check_keydown_events(event, rocket):
if event.key == pygame.K_RIGHT:
#向右移動飛船
# ship.rect.centerx += 1
rocket.moving_right = True
if event.key == pygame.K_LEFT:
rocket.moving_left = True
if event.key == pygame.K_UP:
rocket.moving_up = True
if event.key == pygame.K_DOWN:
rocket.moving_down = True
def check_keyup_events(event, rocket):
if event.key == pygame.K_RIGHT:
rocket.moving_right = False
elif event.key == pygame.K_LEFT:
rocket.moving_left = False
elif event.key == pygame.K_UP:
rocket.moving_up = False
elif event.key == pygame.K_DOWN:
rocket.moving_down = False
def check_events(rocket):
#響應按鍵和鼠標事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event, rocket)
elif event.type == pygame.KEYUP:
check_keyup_events(event, rocket)
def update_screen(screen, rocket):
"""更新屏幕上的圖像,並切換到新屏幕"""
#每次循環時都重繪屏幕
# screen.fill(ai_settings.bg_color)
rocket.blitme()
#讓最近繪製的屏幕可見
pygame.display.flip()
def run_game():
#初始化遊戲並創建一個屏幕對象
pygame.init()
screen = pygame.display.set_mode((1200, 800))
pygame.display.set_caption("Rocket")
#設置背景色
bg_color = (252, 252, 252)
#創建一艘飛船
rocket = Rocket(screen)
#開始遊戲的主循環
while True:
#監視鍵盤和鼠標事件
# for event in pygame.event.get():
# if event.type == pygame.QUIT:
# sys.exit()
# gf.check_events()
check_events(rocket)
#每次循環時都重繪屏幕
screen.fill(bg_color)
# screen.fill(ai_settings.bg_color)
rocket.blitme()
# #讓最近繪製的屏幕可見
# pygame.display.flip()
rocket.update()
update_screen(screen, rocket)
run_game()