sponsored links

使用Python開發一個恐龍跑跑小遊戲,玩起來

使用Python開發一個恐龍跑跑小遊戲,玩起來

相信很多人都玩過 chrome 瀏覽器上提供的恐龍跑跑遊戲,在我們斷網或者直接在瀏覽器輸入地址“chrome://dino/”都可以進入遊戲

使用Python開發一個恐龍跑跑小遊戲,玩起來

今天我們就是用 Python 來製作一個類似的小遊戲

素材準備

首先我們準備下遊戲所需的素材,比如恐龍圖片,仙人掌圖片,天空,地面等等,我們統一放到 dino 資料夾下

使用Python開發一個恐龍跑跑小遊戲,玩起來

遊戲邏輯

我們使用 Pygame 來製作遊戲,先進行遊戲頁面的初始化

import pygame

# 初始化
pygame.init()
pygame.mixer.init()
# 設定視窗大小
screen = pygame.display.set_mode((900, 200))
# 設定標題
pygame.display.set_caption("恐龍跳跳")
# 使用系統自帶的字型
my_font = pygame.font.SysFont("arial", 20)
score = 0
# 背景色
bg_color = (218,220,225)

接下來我們將各種素材載入進記憶體

# 載入正常恐龍
dino_list = []
temp = ""
for i in range(1, 7):
    temp = pygame.image.load(f"dino/dino_run{i}.png")
    dino_list.append(temp)
dino_rect = temp.get_rect()
index = 0

# x 初始值
dino_rect.x = 100
# y 初始值
dino_rect.y = 150
# print(dino_rect)

# 設定y軸上的初速度為0
y_speed = 0
# 起跳初速度
jumpSpeed = -20
# 模擬重力
gravity = 2

 載入地面
ground = pygame.image.load("dino/ground.png")

# 載入仙人掌
cactus = pygame.image.load("dino/cactus1.png")
cactus_rect = cactus.get_rect()
cactus_rect.x,cactus_rect.y = 900,140

# 載入重新再來
restart = pygame.image.load("dino/restart.png")
restart_rect = restart.get_rect()
restart_rect.x,restart_rect.y = (900-restart.get_rect().width)/2,(200-restart.get_rect().height)/2+50
# 載入 gameover
gameover = pygame.image.load("dino/gameover.png")
gameover_rect = gameover.get_rect()
gameover_rect.x, gameover_rect.y = (
    900-gameover.get_rect().width)/2, (200-gameover.get_rect().height)/2
# 地面移動速度與距離
ground_speed = 10
ground_move_distance = 0

# 時鐘
clock = pygame.time.Clock()

# 重新再來一次
is_restart = False
text_color = (0,0,0)

再接下來,我們透過一個 while 死迴圈來保持遊戲程序

while True:
    # 每秒30次
    clock.tick(30)
    ...

在上面的迴圈當中,我們需要兩個檢測機制,事件檢測和碰撞檢測

事件檢測

# 事件偵測
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            if result_flag:
                with open("result.ini", "w+") as f:
                    f.write(str(best))
            sys.exit()
        # 空格鍵偵測
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE and dino_rect.y==150:
                y_speed = jumpSpeed

主要檢測退出事件和空格鍵事件

碰撞檢測

# 碰撞檢測
    if dino_rect.colliderect(cactus_rect):
        while not is_restart:
            # 事件偵測
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    if result_flag:
                        with open("result.ini", "w+") as f:
                            f.write(str(best))
                    sys.exit()
                # 空格鍵偵測
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_SPACE:
                        is_restart = True
                        bg_color = (218,220,225)
                        ground_speed = 10
            # 設定重新再來圖片
            screen.blit(restart, restart_rect)
            screen.blit(gameover, gameover_rect)
            pygame.display.update()

對於碰撞,只要恐龍碰撞到了仙人掌,那麼遊戲結束,展示重新再來圖片

由於我們希望遊戲可以記錄我們的最好成績,所以這裡使用了本地檔案儲存遊戲記錄的方式,當遊戲結束的時候,根據當前遊戲成績來判斷是否將新的成績寫入檔案當中

下面是計算跑動距離和最好成績的程式碼

# 統計距離
    score += ground_speed
    score_surface = my_font.render("Distance: "+str(score), True, text_color)

    # 計算最好成績
    result_flag = False
    if score >= best:
        best = score
        result_flag = True
    best_result = my_font.render("Best Result: " + str(best), True, text_color)

我們還需要給不同距離增加不同的遊戲難度,畢竟跑起來,肯定距離越遠,難度越大嘛

# 更換背景色,成績大於4000
    if score > 4000:
        bg_color = (55,55,55)
        ground_speed = 15
        text_color = (255,255, 255)
# 更換背景色,成績大於8000
    if score > 8000:
        bg_color = (220,20,60)
        ground_speed = 20
        text_color = (255, 255, 255)

    # 更換背景色,成績大於12000
    if score > 12000:
        bg_color = (25,25,112)
        ground_speed = 25
        text_color = (255, 255, 255)

    # 設定背景色
    screen.fill(bg_color)

最後我們將所有載入到記憶體當中的元素都呈現在 screen 上

# 設定地面圖片1
    screen.blit(ground, (0-ground_move_distance, 180))
    # 設定地面圖片2,在右邊邊界外
    screen.blit(ground, (900-ground_move_distance, 180))
    # 設定恐龍圖片
    screen.blit(dino_list[index % 6], dino_rect)
    # 設定仙人掌圖片
    screen.blit(cactus, cactus_rect)
    # 設定分數
    screen.blit(score_surface,(780,20))
    # 設定最好成績
    screen.blit(best_result, (20, 20))

    pygame.display.update()

為了增加遊戲性,我們再增加背景音樂和跳躍音效

pygame.mixer.music.load("background.mp3")
pygame.mixer.music.play(-1, 0)
sound = pygame.mixer.Sound('preview.mp3')

這樣,一個簡單易用的恐龍跑跑遊戲就完成了,我們來看下效果吧

使用Python開發一個恐龍跑跑小遊戲,玩起來

好了,今天的分享就到這裡,喜歡就點個

END

最近有一些小夥伴,讓我幫忙找一些 學習資料,於是我翻遍了收藏的 5T 資料後,彙總整理出來,可以說是Python學習必備!

所有資料都整理到網盤了,需要的私信777獲取!

使用Python開發一個恐龍跑跑小遊戲,玩起來

使用Python開發一個恐龍跑跑小遊戲,玩起來

使用Python開發一個恐龍跑跑小遊戲,玩起來

分類: 娛樂
時間: 2021-12-15

相關文章

硬糖少女錄製河南衛視中秋晚會,疑似因營銷炒作,節目被臨時撤掉

硬糖少女錄製河南衛視中秋晚會,疑似因營銷炒作,節目被臨時撤掉
硬糖少女錄製河南衛視中秋晚會,疑似因營銷炒作,節目被臨時撤掉 引子:自從"清朗行動"展開後,娛樂圈內多位流量藝人,都受到了降溫處理.尤其是今年的春晚,幾乎完全把流量排除在外,可見官 ...

芒果臺又一檔新綜藝將上線,擬邀嘉賓陣容曝光,已敲定丁程鑫

芒果臺又一檔新綜藝將上線,擬邀嘉賓陣容曝光,已敲定丁程鑫
引子:綜藝節目在當今社會,越來越受觀眾歡迎,篇幅短還不用擔心接不上,非常適合現在年輕人快節奏的生活,如果是追一部劇,需要操的心就多了. "清朗行動"的開展,讓不少節目受到了影響,未 ...

或2022年亮相,起亞純電動SUV EV4假想圖曝光

或2022年亮相,起亞純電動SUV EV4假想圖曝光
近日,有海外媒體曝光了起亞EV4的假想圖,根據報道稱新車的尺寸或與賓士EQA相當,產品也主要是針對歐洲市場.據悉,新車有望2022年亮相,於2023年正式上市銷售. 根據曝光的假想圖來看,新車採用了起 ...

曝《跑男黃河篇2》首期嘉賓陣容,宋雨琪迴歸,飛行嘉賓身份公開

曝《跑男黃河篇2》首期嘉賓陣容,宋雨琪迴歸,飛行嘉賓身份公開
要說最近幾年最火的綜藝節目是什麼,毫無疑問就是<奔跑吧>.<奔跑吧>自2014年推出,如今已經陪伴觀眾們走過了七個年頭. 七年過去了,<奔跑吧>這檔綜藝依舊熱度不減 ...

非五大聯賽最貴陣容:荷甲豪門5人入選,總身價不及姆巴佩哈蘭德

非五大聯賽最貴陣容:荷甲豪門5人入選,總身價不及姆巴佩哈蘭德
之前,德轉市場盤點了五大聯賽最貴陣容,姆巴佩.哈蘭德領銜11人身價高達10.3億歐元.近日,德轉又列出了非五大聯賽最貴陣容,結果全隊11人總身價只有2.81億歐元,不及姆巴佩和哈蘭德二人之和,差距立現 ...

幾大衛視中秋晚會陣容全曝光!王菲謝霆鋒穿“情侶裝”世紀大同框

幾大衛視中秋晚會陣容全曝光!王菲謝霆鋒穿“情侶裝”世紀大同框
因為今天是中秋節,所以相信大家的活動都安排得十分豐富,除了賞月之外,看晚會應該也是不少人最期待的一件事了,而不久前,幾大衛視的晚會陣容和節目單全部被曝光,不得不說,大灣區的晚會應該是最讓大家期待的了. ...

《我們戀愛吧3》官宣嘉賓陣容,伊能靜攜三人留任,張繼科成新人

《我們戀愛吧3》官宣嘉賓陣容,伊能靜攜三人留任,張繼科成新人
近日,大型觀察類情感推理真人秀<我們戀愛吧>第三季官宣了明星嘉賓陣容,不少網友猜中了開頭,卻沒有猜中結尾.第二季加盟的伊能靜攜常駐嘉賓朱正廷.張純燁.姜振宇繼續留任,最大的驚喜就是&quo ...

新車 | 約合人民幣13萬元起,2022款馬自達3將於11月釋出,配置曝光

新車 | 約合人民幣13萬元起,2022款馬自達3將於11月釋出,配置曝光
文:懂車帝原創 史景旭 [懂車帝原創 產品] 作為馬自達旗下的一款經典緊湊型車,馬自達3目前已經推出四代車型.日前,日本媒體又曝光了基於第四代車型打造的2022款馬自達3配置資訊以及售價.據悉,202 ...

《真正男子漢》第三季嘉賓陣容來了,看看有你們喜歡的嗎?

《真正男子漢》第三季嘉賓陣容來了,看看有你們喜歡的嗎?
<真正男子漢>算是湖南衛視擁有很高口碑的綜藝節目,雖然停播了一段時間,但是當得知要開始第三季的時候,網際網路上還是引發了一陣熱議和回憶殺,那我們現在來看看<真正男子漢>第三季- ...

離婚早有預謀!獄中宋喆爆王寶強猛料,其實馬蓉才最無辜?

離婚早有預謀!獄中宋喆爆王寶強猛料,其實馬蓉才最無辜?
五年前有媒體發現,北京寶億嶸業有限公司中馬校花原本持有公司75%的股份,後來在變更股權後比例為零,隨後不久,王寶強就在微博上發文宣佈與馬校花解除婚姻關係.其實明星離婚也不算是什麼新鮮事,但這對明星離婚 ...

限娛令大潮下,失落的湖南衛視,尷尬的芒果超媒

限娛令大潮下,失落的湖南衛視,尷尬的芒果超媒
流量在手,代言不愁,這是娛樂圈鐵律. 但用流量搭砌起來的圍城,風一吹就倒了. 9月初,有網友爆料李維嘉被罵失德藝人,起因是其代言的一家茶飲公司跑路,導致加盟商受騙,多人赴湖南臺維權,現場大喊:&quo ...

中秋晚會8臺同競,央視打擊劣跡藝人,創最豪陣容,地方衛視難搞

中秋晚會8臺同競,央視打擊劣跡藝人,創最豪陣容,地方衛視難搞
中秋晚會就要來了,今年8臺同播,是不是不知道該看哪一個?別急,小編給大家整理了各衛視以及B站中秋晚會陣容,看完就有答案了. 一.央視中秋晚會 央視中秋晚會的名單其實早就公佈了,作為表率,央視堅決不用問 ...

湖南衛視中秋之夜官宣陣容,眾星雲集,共賞美月,共享盛宴

湖南衛視中秋之夜官宣陣容,眾星雲集,共賞美月,共享盛宴
中秋月明寄遙思,歌舞昇平訴真情.人圓月圓情更圓,眾星雲集送祝願! 共賞美月,共享盛宴,一起歡度中秋.湖南衛視2021中秋之夜重磅官宣陣容,眾星雲集,群星薈萃,燈火闌珊,星月交輝,流光溢彩,盡在一江秋水 ...

屢次出圈的河南衛視,真有那麼優秀嗎?

屢次出圈的河南衛視,真有那麼優秀嗎?
中秋佳節,各大平臺進入新一輪的晚會角逐,河南衛視又雙叒叕出圈,時長僅60多分鐘的<中秋奇妙遊>,開播後迅速收割十多個熱搜話題. 甚至還有<甄嬛傳>眉姐姐和溫太醫的番外. 這次晚 ...

湖南衛視國慶晚會大洗牌!梁田沈夢辰挑大樑,吳昕鏡頭比李莎還少

湖南衛視國慶晚會大洗牌!梁田沈夢辰挑大樑,吳昕鏡頭比李莎還少
10月1日,湖南衛視推出了國慶節特別節目<稻花香裡說豐年>,金秋十月正是收穫的季節,湖南衛視以"稻花香裡說豐年"為主題,在晚會進行的過程中直播帶貨,還有廚師現場做飯吃. ...

下期《快本》抓住收視密碼,嘉賓不僅有顏值,還是熱播劇熒幕CP

下期《快本》抓住收視密碼,嘉賓不僅有顏值,還是熱播劇熒幕CP
湖南衛視的<快樂大本營>,可以說是一個火爆了全網的節目,憑藉邀請嘉賓的好眼光,一直都是引領了各大棚內錄製的綜藝真人秀.2021年<快本>依舊是紅紅火火,特別是在謝娜復出後,邀請 ...

《青春環遊記3》開錄,範丞丞造型吸睛,楊洋加盟,飛行嘉賓強大

《青春環遊記3》開錄,範丞丞造型吸睛,楊洋加盟,飛行嘉賓強大
<青春環遊記3>開錄,賈玲又胖了,吳彤透露周深朗朗退出原因--引言. [本文主筆:阿菜] 不少網友都感覺近段時間綜藝荒,已經很久沒有好看的綜藝節目開播了,而10月10日浙江衛視的<青 ...

衛視最新晚會收視出爐:湖南臺重回第一,陣容不及浙江臺依舊贏了

衛視最新晚會收視出爐:湖南臺重回第一,陣容不及浙江臺依舊贏了
也是沒想到臨近國慶假期末尾,兩大衛視又默契給觀眾獻上了一次精彩的晚會對打,湖南臺和浙江臺在同一天同一時段都舉辦了一場相似點極多的晚會,也讓這場最新出爐的晚會收視資料更加有意思了! 話不多說先看結果,湖 ...

新《仙劍》即將開拍,五大主演曝光,好傢伙,趙靈兒選角有點意思

新《仙劍》即將開拍,五大主演曝光,好傢伙,趙靈兒選角有點意思
新<仙劍>即將開拍,五大主演曝光,好傢伙,趙靈兒選角有點意思 近年來,影視劇市場的仙俠劇層出不窮,爆款頻出.比如<琉璃><花千骨>以及<三生三世>系列, ...

中秋晚會即將開幕,央視官宣節目單,你最期待哪位嘉賓的表演

中秋晚會即將開幕,央視官宣節目單,你最期待哪位嘉賓的表演
再過兩天就是中秋佳節了,多家的中秋晚會也即將同時開幕了.央視"秋晚"率先公佈了中秋晚會嘉賓和節目單,又引起一陣熱議.因為無論是主持陣容還是嘉賓陣容,沒有出現一粒流量藝人或" ...