python飛機大戰筆記(7) 遊戲背景滾動顯示

2021-09-29 18:16:01 字數 3376 閱讀 5717

背景交替滾動:

遊戲啟動後,背景影象會連續不斷地向下方移動;

在視覺上產生英雄的飛機不斷向上方飛行的錯覺;

即:遊戲的背景不斷變化;遊戲的主角未知保持不變;

在螢幕上,豎直疊放兩張背景影象;將第乙個影象一處螢幕後,將第一張影象憑藉到第二個影象的上方;

當第二張影象移出螢幕後 ,第一張接到上方,以此迴圈。

1)建立兩張背景影象;

第一張完全和螢幕重合;第二張在螢幕的正上方;

2)兩張影象一起向下運動;

3)當任意背景的y>=螢幕的高度時,證明已經移動到螢幕下方;

4)將移動到螢幕下方的這張影象 設定到螢幕的正上方;

設計背景類:

初始化方法:

直接指定背景

is_alt判斷是否時另一張影象

false:表示異地張圖象,需要與螢幕重合;true:表示另一張影象,在螢幕的正上方

update方法:判斷是否移出螢幕,如果是,將影象設定到螢幕的正下方,從而實現交替滾動『

顯示遊戲背景:

滾動方式

簡化對精靈組的建立

#主遊戲類

import pygame

import plane_sprite

class

planegame

(object):

"""飛機大戰主遊戲"""

def__init__

(self)

:print

("遊戲初始化"

)#1.建立遊戲視窗--矩形物件的size屬性就是元組

self.screen = pygame.display.set_mode(

(plane_sprite.screen_rect.size)

)#2.建立遊戲時鐘

self.clock = pygame.time.clock(

)#3.呼叫私有方法,精靈和精靈組的建立

self.__create_sprites(

)def

__create_sprites

(self)

:#建立背景

bg1 = plane_sprite.backgroud(

) bg2 = plane_sprite.backgroud(

true

) self.back_group = pygame.sprite.group(bg1,bg2)

defstart_game

(self)

:print

("遊戲開始"

)while

true

:#1.設定刷頻率

self.clock.tick(plane_sprite.frame_per_sec)

#2.事件監聽

self.__event_handles(

)#3.碰撞檢測

self.__check_collide(

)#4,更新/繪製精靈組

self.__update_sprites(

)#5.更新顯示

pygame.display.update(

)def

__event_handles

(self)

:for even in pygame.event.get():

#判斷是否退出遊戲

if even.

type

== pygame.quit:

planegame.__game_over(

)def

__check_collide

(self)

:pass

def__update_sprites

(self)

: self.back_group.update(

) self.back_group.draw(self.screen)

@staticmethod

def__game_over

(cls)

:print

("遊戲結束"

) pygame.quit(

) exit(

)if __name__ ==

'__main__'

:#建立遊戲物件

game = planegame(

)#啟動遊戲

game.start_game(

)

plane_sprite.py中

#精靈和精靈派生類;

import pygame

#螢幕大小的常量

screen_rect = pygame.rect(0,

0,480,

700)

#重新整理的幀率

frame_per_sec =

60class

gamesprite

(pygame.sprite.sprite)

:def

__init__

(self,image_name,speed =1)

:#呼叫父類的初始化方法

super()

.__init__(

)#定義物件的屬性

self.image = pygame.image.load(image_name)

self.rect = self.image.get_rect(

) self.speed = speed

defupdate

(self)

:#在螢幕的垂直方向移動

self.rect.y += self.speed

class

backgroud

(gamesprite)

:"""遊戲背景"""

def__init__

(self,is_alt=

false):

#is_alt區分時第一張影象還是第二張

#1.呼叫父類黨法完成基本設定

super()

.__init__(

"./images/background.png"

)#2.判斷是否時交替影象,如果是,需要設定初始位置

if is_alt:

self.rect.y =

-self.rect.height

defupadte

(self)

:#1.呼叫父類的方向實現,實現移動

super()

.update(

)#2.判斷是否移出螢幕,如果一處螢幕,將影象設定到螢幕的上方

if self.rect.y>= screen_rect.height:

self.rect.y =

-self.rect.height

完成了背景影象的滾動顯示

python飛機大戰 遊戲背景

背景交替滾動的思路確定 執行 備課 觀察 背景影象的顯示效果 解決辦法 建立兩張背景影象精靈 兩張影象 一起向下方運動 當 任意背景精靈 的 rect.y 螢幕的高度 說明已經 移動到螢幕下方 將 移動到螢幕下方的這張影象 設定到 螢幕的正上方 update 方法 繼承 如果父類提供的方法,不能滿足...

《Python遊戲趣味程式設計》 第7章 飛機大戰

7 飛機大戰 python遊戲開發 圖書簡介可以看這裡 童晶 python遊戲趣味程式設計 新書上架了 本章我們將編寫乙個飛機大戰的遊戲,滑鼠控制飛機移動 按下滑鼠發射子彈,效果如圖7 1所示。首先我們實現背景迴圈滾動 飛機發射子彈 然後實現敵機的控制與得分顯示 遊戲失敗判斷與處理 最後為遊戲新增音...

python小遊戲 飛機大戰(3)

二 新增 動畫 3 執行展示 三 遊戲結束介面 四 計分 五 提公升遊戲難度 六 總結 前兩節已經實現遊戲基本功能,接下來是對遊戲的完善,包括 動畫 計分 結束畫面等。這個其實是在剛開始開發就需要做的,這裡是為了方便讀者理解,將其挪到遊戲基本功能完成後再進行調整。基本思路其實很簡單,就是建立時鐘物件...