最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python實(shí)現(xiàn)原創(chuàng)程序猿乘風(fēng)破浪小游戲

 更新時(shí)間:2023年02月15日 11:29:37   作者:神奇代碼在哪里_  
最近學(xué)習(xí)了一丁點(diǎn)Pygame技能,感覺(jué)有點(diǎn)上頭,一波操作創(chuàng)作“程序猿乘風(fēng)破浪”游戲一款,文中的示例代碼講解詳細(xì),希望大家能夠喜歡

一、游戲展示

所謂:開(kāi)局一張圖,后面全靠編。先放圖片、動(dòng)畫展示一波。

游戲玩法很簡(jiǎn)單,按空格猴子↑跳起來(lái),躲開(kāi)巨浪襲擊,時(shí)間越長(zhǎng)得分越高,碰到巨浪游戲結(jié)束統(tǒng)計(jì)得分。

游戲展示畫面

二、游戲邏輯

為了通俗易懂,這里就不用代碼結(jié)構(gòu)的方式解釋。游戲大致可以分為四大部分,分別為:

游戲背景

1、天空背景。用多條藍(lán)色橫線點(diǎn)綴的白色天空,使用Python代碼讓天空背景從右到左不停的移動(dòng),從而制造猴子向右移動(dòng)的假象。

天空背景

背景精靈代碼:

class Background(GameSprite):
    """游戲背景精靈"""
    def __init__(self,image_path, is_alt=False):
        # 1.調(diào)用父類方法實(shí)現(xiàn)精靈的創(chuàng)建(image/rect/speed)
        super().__init__(image_path)
        # 2.判斷是否是交替圖像,如果是,需要設(shè)置初始位置
        if is_alt is True:
            self.rect.x = self.rect.width
        else:
            self.rect.x = 0
 
    def update(self):
        # 1.調(diào)用父類的方法實(shí)現(xiàn)
        super().update()
        # 2.判斷是否移出屏幕,如果移出屏幕,將圖像設(shè)置到屏幕的上方
        if self.rect.x <= -SCREEN_RECT.width:
            self.rect.x = self.rect.width

2、海洋背景。海洋背景使用了內(nèi)層海洋外層海洋兩張背景圖片,同時(shí)讓他們的移動(dòng)速度與天空背景不一致,兩個(gè)內(nèi)層與外層海洋之間的移動(dòng)速度也不一致,從而制造游戲的立體層次感,讓2D游戲增加3D的立體感覺(jué)。

    def __create_sprites(self):
        """創(chuàng)建背景精靈和精靈組"""
 
        # 天空背景
        bg1 = Background("./images/background_16_9.png", False)
        bg2 = Background("./images/background_16_9.png", True)
        self.back_group = pygame.sprite.Group(bg1, bg2)
 
        # 內(nèi)層海洋背景
        sea_bg_1 = Background("./images/sea_bg_1_16_9.png", False)
        sea_bg_2 = Background("./images/sea_bg_1_16_9.png", True)
        #移動(dòng)速度
        sea_bg_1.speed = 2
        sea_bg_2.speed = 2
        sea_bg_1.rect.bottom = SCREEN_RECT.height
        sea_bg_2.rect.bottom = SCREEN_RECT.height
        self.sea_bg_ground_1 = pygame.sprite.Group(sea_bg_1, sea_bg_2)
 
        # 外層海洋背景
        sea_bg_3 = Background("./images/sea_bg_2_16_9.png", False)
        sea_bg_4 = Background("./images/sea_bg_2_16_9.png", True)
        # 移動(dòng)速度
        sea_bg_3.speed = 3
        sea_bg_4.speed = 3
        sea_bg_3.rect.bottom = SCREEN_RECT.height
        sea_bg_4.rect.bottom = SCREEN_RECT.height
        self.sea_bg_ground_2 = pygame.sprite.Group(sea_bg_3, sea_bg_4)

猴子游戲精靈(玩家)

1、讓猴子精靈上下跳動(dòng)。使用Python監(jiān)聽(tīng)鍵盤時(shí)間,當(dāng)按下鍵盤空格鍵時(shí),給猴子精靈一個(gè)向上(y軸負(fù)值)的速度,當(dāng)鍵盤空格鍵沒(méi)按下時(shí)給猴子精靈一個(gè)向下(y軸正值)的速度,這樣就可以實(shí)現(xiàn)猴子精靈的上下跳動(dòng)。

主要代碼如下:

        # 使用鍵盤提供的方法獲取鍵盤按鍵 - 按鍵元組
        keys_pressed = pygame.key.get_pressed()
        # 判斷用戶按下鍵盤空格鍵
        if keys_pressed[pygame.K_SPACE]:
            # 跳起
            self.man.speed = -10
        else:
            # 下降
            self.man.speed = 10

2、讓猴子不能飛出游戲屏幕。使用Python代碼監(jiān)控猴子的位置,當(dāng)猴子y軸的值小于0(碰到屏幕上邊緣)時(shí)y軸的值重置為0,當(dāng)猴子y軸的值大于360(碰到屏幕下邊緣)時(shí)y軸重置為360。

主要代碼如下:

    def update(self):
        # 猴子在水平方向移動(dòng)
        self.rect.y += self.speed
        # 控制猴子不能移出屏幕
        if self.rect.y < 0:
            self.rect.y = 0
        elif self.rect.bottom > self.bottom_to_ground:
            self.rect.bottom = self.bottom_to_ground

3、讓猴子置與內(nèi)層海洋和外層海洋之間,增加游戲?qū)哟胃小?/strong>在調(diào)用Pygame刷新界面函數(shù)時(shí),先調(diào)用內(nèi)層海洋刷新函數(shù),再調(diào)用猴子精靈刷新函數(shù),最后在調(diào)用外層海洋刷新函數(shù),既可以實(shí)現(xiàn)預(yù)期效果。

主要代碼如下:

    def __update_sprites(self):
        """刷新各個(gè)精靈組"""
        # 先刷新內(nèi)層海洋
        self.sea_bg_ground_1.update()
        self.sea_bg_ground_1.draw(self.screen)
        # 再刷新猴子
        self.man_group.update()
        self.man_group.draw(self.screen)
        # 最后刷新外層海洋
        self.sea_bg_ground_2.update()
        self.sea_bg_ground_2.draw(self.screen)

巨浪游戲精力(敵人)

1、每個(gè)一段時(shí)間生成一股巨浪,巨浪由右到左出現(xiàn),速度有快有慢。首先繼承pygame.sprite.Sprite創(chuàng)建巨浪精靈類,使其具有速度speed等屬性。

class Wave(GameSprite):
    """海浪精靈"""
 
    def __init__(self):
        # 1.調(diào)用父類方法,創(chuàng)建海浪精靈,同時(shí)指定海浪圖片
        super().__init__("./images/wave.png")
 
        # 2.指定海浪的初始隨機(jī)速度
        self.speed = random.randint(2, 4)
 
        # 3.指定海浪的初始隨機(jī)位置
        self.rect.x = SCREEN_RECT.width
        self.rect.bottom = SCREEN_RECT.height

然后創(chuàng)建Pygame自定義事件CREATE_WAVE_EVENT。

# 創(chuàng)建海浪的定時(shí)器事件常量
CREATE_WAVE_EVENT = pygame.USEREVENT+1

同時(shí)使用pygame.time.set_timer創(chuàng)建定時(shí)器,每3秒觸發(fā)一次該事件。

# 4.設(shè)置定時(shí)器事件——每3秒創(chuàng)建一次海浪
pygame.time.set_timer(CREATE_WAVE_EVENT, 3000)

最后,若事件監(jiān)聽(tīng)處理函數(shù)發(fā)現(xiàn)該事件后,創(chuàng)建一個(gè)巨浪精靈并加入精靈組。

elif event.type == CREATE_WAVE_EVENT:
    # 創(chuàng)建海浪精靈
    wave = Wave()
    # 將海浪精靈添加到海浪精靈組
    self.wave_group.add(wave)

2、巨浪與猴子碰撞后結(jié)束游戲。每幀使用def __check_collide(self)檢測(cè)猴子精靈與巨浪精靈組是否出現(xiàn)碰撞,若碰撞了就結(jié)束本回合游戲。

碰撞檢測(cè)代碼如下:

    def __check_collide(self):
        # 1.撞到海浪
        waves = pygame.sprite.spritecollide(self.man, self.wave_group, True)
        # 2.判斷碰撞列表長(zhǎng)度
        if len(waves) > 0:
            # 該回合游戲結(jié)束,顯示菜單
            self.menu_sprite.display = True
            self.game_state = 0

3、巨浪移出左屏幕后刪除該巨浪。為了節(jié)省內(nèi)存,當(dāng)沒(méi)有被碰到的巨浪從右至左移出屏幕左邊緣的時(shí)候應(yīng)該刪除該巨浪精靈??梢悦繋袛嗑蘩说?strong>右側(cè)是否小于屏幕左邊緣實(shí)現(xiàn)該刪除操作。

定時(shí)器和得分

1、自定義定時(shí)器事件,每個(gè)1秒數(shù)字減1。游戲默認(rèn)游玩時(shí)間為30秒,游戲開(kāi)始后便開(kāi)始倒數(shù),右上角開(kāi)始30,29,28更新數(shù)字。和創(chuàng)建巨浪類似,可以先創(chuàng)建一個(gè)倒數(shù)事件,然后使用定時(shí)器每秒觸發(fā),最后在監(jiān)聽(tīng)事件函數(shù)中執(zhí)行刷新數(shù)字操作。

主要代碼如下:

創(chuàng)建自定義事件CREATE_I_EVENT。

# 創(chuàng)建游戲倒計(jì)時(shí)的定時(shí)器常量
CREATE_I_EVENT = pygame.USEREVENT+2

同時(shí)使用pygame.time.set_timer創(chuàng)建定時(shí)器,每1秒觸發(fā)一次該事件。

# 5.設(shè)置定時(shí)器事件——倒計(jì)時(shí)每1秒觸發(fā)一次
pygame.time.set_timer(CREATE_I_EVENT, 1000)

最后,若事件監(jiān)聽(tīng)處理函數(shù)發(fā)現(xiàn)該事件后,倒計(jì)時(shí)減1。

elif event.type == CREATE_I_EVENT:
    # 倒計(jì)時(shí)減1秒
    self.countdown_sprite.start_time = self.countdown_sprite.start_time - 1

2、每個(gè)一秒加十分。和倒計(jì)時(shí)一樣,只是這里是每秒加十分。

elif event.type == CREATE_I_EVENT:
    # 每過(guò)1秒加十分
    self.score_sprite.score = self.score_sprite.score + 10

3、游戲重新開(kāi)始時(shí),重置定時(shí)器及得分。如果用戶點(diǎn)擊重新開(kāi)始游戲,則重置相關(guān)屬性重新開(kāi)始游戲。

以上就是基于Python實(shí)現(xiàn)原創(chuàng)程序猿乘風(fēng)破浪小游戲的詳細(xì)內(nèi)容,更多關(guān)于Python程序猿乘風(fēng)破浪游戲的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

孝义市| 杭锦后旗| 西安市| 高淳县| 普兰店市| 新昌县| 榕江县| 平凉市| 盘锦市| 永泰县| 龙山县| 犍为县| 房产| 江西省| 巩义市| 达拉特旗| 闽清县| 民勤县| 临城县| 东安县| 咸阳市| 淅川县| 永康市| 永善县| 金湖县| 固安县| 建昌县| 肇庆市| 诸暨市| 安化县| 东宁县| 昌吉市| 慈利县| 宁德市| 东乌珠穆沁旗| 教育| 大英县| 白朗县| 横峰县| 云安县| 冕宁县|