国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用python做小游戲——以射擊游戲?yàn)槔?/h1>

這篇具有很好參考價(jià)值的文章主要介紹了用python做小游戲——以射擊游戲?yàn)槔OM麑?duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

本博客使用了Pygame庫(kù)來(lái)創(chuàng)建游戲窗口和處理游戲邏輯。

目錄

一、代碼的詳細(xì)解釋:

創(chuàng)建游戲窗口:

蜜蜂的定義與循環(huán)出現(xiàn):

顯示蜜蜂和處理碰撞:

定義射擊器:

子彈的定義與處理碰撞:

計(jì)算兩點(diǎn)間距離的函數(shù):

播放背景音樂(lè):

主游戲循環(huán):

二、完整代碼展示:

三、視頻演示:

四、Gitee倉(cāng)庫(kù)地址


一、代碼的詳細(xì)解釋: ?

創(chuàng)建游戲窗口:
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Bee")

創(chuàng)建了一個(gè)名為"Bee"的游戲窗口,窗口的大小由WIDTHHEIGHT變量決定。

蜜蜂的定義與循環(huán)出現(xiàn):
class Enemy():
    # 構(gòu)造函數(shù)
    def __init__(self):
        self.img = pygame.image.load('bee.png')
        self.x = random.randint(200, 600)
        self.y = random.randint(50, 250)
        self.step = random.randint(2, 6)

    # 重置蜜蜂位置
    def reset(self):
        self.x = random.randint(200, 600)
        self.y = random.randint(50, 200)

enemies = []
for i in range(number_of_bee):
    enemies.append(Enemy())

定義了一個(gè)名為Enemy的類,每個(gè)蜜蜂對(duì)象有圖像、x坐標(biāo)、y坐標(biāo)和步長(zhǎng)。蜜蜂的循環(huán)出現(xiàn)在enemies列表中,初始位置隨機(jī)。

顯示蜜蜂和處理碰撞:
def show_bee():
    for e in enemies:
        screen.blit(e.img, (e.x, e.y))
        e.x += e.step
        if e.x > 736 or e.x < 0:
            e.step *= -1
            e.y += 40
            if e.y >= 450:
                over, over_rect = init_item('game over.jpg', 0, 0)
                txt_restart, txt_restart_rect = show_text("Restart", 300, 300, 32)
                screen.blit(over, over_rect)  ##顯示gameover圖片
                screen.blit(txt_restart, txt_restart_rect)
                quit()

這個(gè)函數(shù)用于顯示蜜蜂,并在蜜蜂到達(dá)窗口邊緣時(shí),讓其改變方向并向下移動(dòng)。如果蜜蜂的y坐標(biāo)超過(guò)了450,則游戲結(jié)束,顯示"game over"圖片和"Restart"文字,然后退出游戲。

定義射擊器:
play_x = 400
play_y = 500
shoot, shoot_rect = init_item('fighter.png', play_x, play_y)
playerstep = 0

定義了射擊器的初始位置,并加載了射擊器的圖像。

子彈的定義與處理碰撞:
class bullet():
    def __init__(self):
        self.img = pygame.image.load('bullet1.png')
        self.x = play_x
        self.y = play_y + 10
        self.step = 10  # 子彈移動(dòng)的速度

    def hit(self):
        for e in enemies:
            if distance(self.x, self.y, e.x, e.y) < 30:
                bullets.remove(self)
                e.reset()

bullets = []

def show_bullets():
    for b in bullets:
        screen.blit(b.img, (b.x, b.y))
        b.hit()
        b.y -= b.step
        if b.y < 0:
            bullets.remove(b)

這段代碼定義了bullet類,每個(gè)子彈對(duì)象有圖像、x坐標(biāo)、y坐標(biāo)和速度。在子彈的hit()方法中,檢查子彈與蜜蜂是否碰撞,若是,則移除該子彈并重新生成蜜蜂。show_bullets()函數(shù)用于顯示子彈,并在子彈超出窗口時(shí)移除它們。

計(jì)算兩點(diǎn)間距離的函數(shù):
def distance(bx, by, ex, ey):
    a = bx - ex
    b = by - ey
    return math.sqrt(a * a + b * b)

這個(gè)函數(shù)用于計(jì)算兩點(diǎn)之間的距離,其中bxby表示子彈的坐標(biāo),exey表示蜜蜂的坐標(biāo)。

播放背景音樂(lè):
pygame.mixer.music.load('背景音樂(lè).mp3')  # 導(dǎo)入音樂(lè)
pygame.mixer.music.play(loops=-1)  # 循環(huán)播放

這段代碼加載名為"背景音樂(lè).mp3"的音樂(lè),并設(shè)置為循環(huán)播放。

主游戲循環(huán):
clock = pygame.time.Clock()  ##用來(lái)設(shè)定窗口的刷新頻率
while True:
    clock.tick(60)  ##每秒執(zhí)行60次
    screen.fill((0, 0, 0))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                playerstep = 5
            elif event.key == pygame.K_LEFT:
                playerstep = -5
            elif event.key == pygame.K_SPACE:
                bullets.append(bullet())

        if event.type == pygame.KEYUP:
            playerstep = 0
    screen.blit(shoot, (play_x, play_y))
    play_x += playerstep
    if play_x > 736:
        play_x = 736
    if play_x < 0:
        play_x = 0
    show_bee()
    show_bullets()
    pygame.display.flip()

這是游戲的主循環(huán),游戲會(huì)在每次循環(huán)中執(zhí)行以下步驟:

最后,游戲會(huì)在主循環(huán)中不斷重復(fù)執(zhí)行以上步驟,實(shí)現(xiàn)了蜜蜂的循環(huán)出現(xiàn)、射擊器的控制以及子彈和蜜蜂之間的碰撞檢測(cè)。

  • 設(shè)置窗口刷新頻率為60幀。
  • 填充窗口背景為黑色。
  • 處理事件,包括按鍵事件和退出事件。
  • 根據(jù)按鍵事件移動(dòng)射擊器的位置,如果按下空格鍵,則添加一個(gè)新的子彈對(duì)象到bullets列表。
  • 顯示射擊器的圖像,根據(jù)按鍵事件移動(dòng)射擊器的位置,使其在窗口內(nèi)左右移動(dòng),并限制其不超出窗口邊界。
  • 調(diào)用show_bee()函數(shù),顯示蜜蜂,并處理蜜蜂與窗口邊界的碰撞,以及蜜蜂與子彈的碰撞。
  • 調(diào)用show_bullets()函數(shù),顯示子彈,并處理子彈與窗口邊界的碰撞,以及子彈與蜜蜂的碰撞。
  • 使用pygame.display.flip()方法更新整個(gè)游戲窗口。

    二、完整代碼展示:

    import pygame
    import sys
    import random
    import math
    
    WIDTH = 800
    HEIGHT = 600
    
    
    def pygame_1():
        global event, e
        pygame.init()
        screen = pygame.display.set_mode((WIDTH, HEIGHT))
        pygame.display.set_caption("Bee")
        ##蜜蜂:
        number_of_bee = 6
        ##顯示分?jǐn)?shù)
        txt_score, txt_score_rect = show_text("Score:0", 40, 20, 20)
        score = 0
    
        ##蜜蜂的循環(huán)出現(xiàn)
        class Enemy():
            def __init__(self):
                self.img = pygame.image.load('bee.png')
                self.x = random.randint(200, 600)
                self.y = random.randint(50, 250)
                self.step = random.randint(2, 6)
    
            def reset(self):
                self.x = random.randint(200, 600)
                self.y = random.randint(50, 200)
    
        enemies = []
        for i in range(number_of_bee):
            enemies.append(Enemy())
    
        def show_bee():
            for e in enemies:
                screen.blit(e.img, (e.x, e.y))
                e.x += e.step
                if e.x > 736 or e.x < 0:
                    e.step *= -1
                    e.y += 40
                    if e.y >= 450:
                        over, over_rect = init_item('game over.jpg', 0, 0)
                        txt_restart, txt_restart_rect = show_text("Restart", 300, 300, 32)
                        screen.blit(over, over_rect)  ##顯示gameover圖片
                        screen.blit(txt_restart, txt_restart_rect)
                        quit()
    
    
        ##射擊器
        play_x = 400
        play_y = 500
        shoot, shoot_rect = init_item('fighter.png', play_x, play_y)
        playerstep = 0
    
        ##子彈
        class bullet():
            def __init__(self):
                self.img = pygame.image.load('bullet1.png')
                self.x = play_x
                self.y = play_y + 10
                self.step = 10  # 子彈移動(dòng)的速度
    
            def hit(self):
                for e in enemies:
                    if distance(self.x, self.y, e.x, e.y) < 30:
                        bullets.remove(self)
                        e.reset()
    
    
        bullets = []
    
        def show_bullets():
            for b in bullets:
                screen.blit(b.img, (b.x, b.y))
                b.hit()
                b.y -= b.step
                if b.y < 0:
                    bullets.remove(b)
    
        def distance(bx, by, ex, ey):
            a = bx - ex
            b = by - ey
            return math.sqrt(a * a + b * b)
    
        pygame.mixer.music.load('背景音樂(lè).mp3')  # 導(dǎo)入音樂(lè)
        pygame.mixer.music.play(loops=-1)  # 循環(huán)播放
        clock = pygame.time.Clock()  ##用來(lái)設(shè)定窗口的刷新頻率
        while True:
            clock.tick(60)  ##每秒執(zhí)行60次
            screen.fill((0, 0, 0))
    
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_RIGHT:
                        playerstep = 5
                    elif event.key == pygame.K_LEFT:
                        playerstep = -5
                    elif event.key == pygame.K_SPACE:
                        bullets.append(bullet())
    
                if event.type == pygame.KEYUP:
                    playerstep = 0
            screen.blit(shoot, (play_x, play_y))
            play_x += playerstep
            if play_x > 736:
                play_x = 736
            if play_x < 0:
                play_x = 0
            show_bee()
            show_bullets()
            pygame.display.flip()
    
    
    def init_item(img_path, pos_x, pos_y):
        ##顯示圖片
        item = pygame.image.load(img_path)
        item_rect = pygame.Rect((pos_x, pos_y, 0, 0))
        item_rect.size = item.get_size()
        return item, item_rect
    
    
    def show_text(txt, pos_x, pos_y, fontsize=12):
        ##設(shè)定顯示文本信息
        font = pygame.font.Font(None, fontsize)
        text = font.render(txt, True, (255, 0, 0))
        text_rect = text.get_rect()
        text_rect.centerx = pos_x
        text_rect.centery = pos_y
        return text, text_rect
    
    
    if __name__ == "__main__":
        pygame_1()
    

    三、視頻演示: ?

    用python做小游戲——以射擊游戲?yàn)槔?span toymoban-style="hidden">文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-719301.html

    四、Gitee倉(cāng)庫(kù)地址

  • Jiamei Fu/PythonWork - 碼云 - 開源中國(guó) (gitee.com)

到了這里,關(guān)于用python做小游戲——以射擊游戲?yàn)槔奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • [游戲開發(fā)][Unity] TPS射擊游戲相機(jī)實(shí)現(xiàn)

    [游戲開發(fā)][Unity] TPS射擊游戲相機(jī)實(shí)現(xiàn)

    滑屏控制 角色的橫向旋轉(zhuǎn) 相機(jī)的縱向旋轉(zhuǎn)(區(qū)別于橫向旋轉(zhuǎn)) 相機(jī)貼墻拉近(不能穿墻) 相機(jī)觀察旋轉(zhuǎn)(角色不轉(zhuǎn)相機(jī)轉(zhuǎn)用于觀察四周) 開火按鈕和旋轉(zhuǎn)屏幕功能共存(邊開槍邊轉(zhuǎn)向瞄準(zhǔn)) 市面上的TPS射擊游戲基本上有兩種實(shí)現(xiàn)射擊瞄準(zhǔn) 方案一:以槍口射擊方向?yàn)榛鶞?zhǔn),相機(jī)跟著人

    2024年02月16日
    瀏覽(37)
  • 【用unity實(shí)現(xiàn)100個(gè)游戲之1】制作類元?dú)怛T士、挺進(jìn)地牢——俯視角射擊游戲多種射擊效果(二)(附源碼)

    參考原視頻鏈接 : 【視頻】:https://space.bilibili.com/641773200 注意 :本文為學(xué)習(xí)筆記記錄,推薦支持原作者,去看原視頻自己手敲代碼理解更加深入

    2024年02月07日
    瀏覽(31)
  • 【用unity實(shí)現(xiàn)100個(gè)游戲之1】制作類元?dú)怛T士、挺進(jìn)地牢——俯視角射擊游戲多種射擊效果(一)(附源碼)

    【用unity實(shí)現(xiàn)100個(gè)游戲之1】制作類元?dú)怛T士、挺進(jìn)地牢——俯視角射擊游戲多種射擊效果(一)(附源碼)

    參考原視頻鏈接 【視頻】:https://space.bilibili.com/641773200 注意 :本文為學(xué)習(xí)筆記記錄,推薦支持原作者,去看原視頻自己手敲代碼理解更加深入 近幾年 俯視角射擊游戲 隨著《挺進(jìn)地牢》等雙搖桿射擊游戲的火熱再次出現(xiàn)在玩家的視野中,這類游戲通常都有種類繁多的 武器

    2024年02月12日
    瀏覽(23)
  • unity制作FPS射擊游戲

    unity制作FPS射擊游戲

    角色動(dòng)作方面包括行走、奔跑、跳躍、武器切換、彈夾更換、武器展示、彈殼拋出效果、射擊效果、全自動(dòng)與半自動(dòng)射擊效果、瞄準(zhǔn)效果、后坐力效果、彈痕效果等多種動(dòng)作。 非玩家角色(NPC)具備多個(gè)動(dòng)畫狀態(tài),包括固定路徑巡邏、行走、奔跑、尋路攻擊等多種行為。 太

    2024年02月08日
    瀏覽(29)
  • 【Unity實(shí)戰(zhàn)】制作類元?dú)怛T士、挺進(jìn)地牢——俯視角射擊游戲多種射擊效果(二)

    參考原視頻鏈接 : 【視頻】:https://space.bilibili.com/641773200 注意 :本文為學(xué)習(xí)筆記記錄,推薦支持原作者,去看原視頻自己手敲代碼理解更加深入

    2024年02月12日
    瀏覽(29)
  • 關(guān)于ue4 射擊游戲架構(gòu)設(shè)計(jì)

    傳統(tǒng)mmo的服務(wù)器架構(gòu) 網(wǎng)關(guān)---游戲邏輯服---游戲db服 網(wǎng)關(guān)---?游戲邏輯服---關(guān)系服務(wù)器master 其結(jié)構(gòu)簡(jiǎn)單,方便維護(hù),但是在應(yīng)對(duì)射擊游戲時(shí)候暴露出很大的缺陷 但是隨著大dau產(chǎn)品的像和平精英等游戲問(wèn)世 騰訊主要的服務(wù)器是基于tbus4j,基于共享內(nèi)存+ socket的數(shù)據(jù)交互,該框架的

    2024年02月02日
    瀏覽(27)
  • 使用團(tuán)結(jié)引擎開發(fā)Unity 3D射擊游戲

    使用團(tuán)結(jié)引擎開發(fā)Unity 3D射擊游戲

    ? ? ? ?本案例是初級(jí)案例,意在引導(dǎo)想使用unity的初級(jí)開發(fā)者能較快的入門,體驗(yàn)unity開發(fā)的方便性和簡(jiǎn)易性能。 ? ? ? 本次我們將使用團(tuán)結(jié)引擎進(jìn)行開發(fā),幫助想體驗(yàn)團(tuán)結(jié)引擎的入門開發(fā)者進(jìn)行較快的環(huán)境熟悉。 ? ? ?本游戲是一個(gè)俯視角度的射擊游戲。主角始終位于屏幕

    2024年01月19日
    瀏覽(110)
  • Unity游戲源碼分享-Unity手游射擊橫版游戲

    Unity游戲源碼分享-Unity手游射擊橫版游戲

    Unity游戲源碼分享-Unity手游射擊橫版游戲 ? 戰(zhàn)斗場(chǎng)景 項(xiàng)目地址: https://download.csdn.net/download/Highning0007/88050256

    2024年02月16日
    瀏覽(29)
  • WTN6170-8S語(yǔ)音芯片:射擊游戲機(jī)新時(shí)代,CS音效射擊體驗(yàn)引領(lǐng)者

    在射擊游戲機(jī)的刺激世界中,唯創(chuàng)知音的WTN6170-8S語(yǔ)音芯片,作為聲音提示播放IC,為射擊游戲機(jī)帶來(lái)了更智能、更富有戰(zhàn)斗感的音效體驗(yàn),引領(lǐng)玩家進(jìn)入一個(gè)嶄新的射擊游戲時(shí)代。 射擊游戲機(jī)啟動(dòng)時(shí),WTN6170-8S語(yǔ)音芯片通過(guò)戰(zhàn)場(chǎng)音效,如爆炸聲、射擊聲等,迅速拉近玩家與虛

    2024年02月05日
    瀏覽(35)
  • Unity游戲源碼分享-射擊游戲Low Poly FPS Pack 3.2

    Unity游戲源碼分享-射擊游戲Low Poly FPS Pack 3.2

    Unity游戲源碼分享-射擊游戲Low Poly FPS Pack 3.2 項(xiàng)目地址:https://download.csdn.net/download/Highning0007/88057717 ? ?

    2024年02月16日
    瀏覽(35)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包