【Python】Python編程從入門到實踐課後題 12-3

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()

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章