貪吃蛇(二)

上一期拧晕,我們開發(fā)了貪吃蛇小游戲,但是細心的小伙伴們可以發(fā)現户敬,游戲還存在幾個問題:

  1. 我們的小蛇會跑到屏幕外面去,這導致我們很難將其找回來溅漾,而我們的小蛇還可以穿越自己的身體山叮!
  2. 我們的小蛇是無敵的,不會死亡添履,而我們的游戲會一直運行屁倔。
  3. 游戲沒有一點背景音樂,好尷尬啊~~
  4. 隨機產生的食物居然會出現在我們小蛇的身體上
  5. 小蛇的樣子都是方塊暮胧,不好看锐借。

本期,我們就解決這幾個問題~

一往衷、限制小蛇的活動范圍為屏幕內钞翔,而且是的小蛇不能穿越自己的身體,否則死亡席舍。

這個很簡單布轿,只要每次移動的時候我們判斷蛇頭的位置是否超出屏幕之外就好了。

# 限制小蛇的活動范圍
if snake_body[0][0] < 0 or snake_body[0][0] >= WIDTH or\
        snake_body[0][1] < 0 or snake_body[0][1] >= HEIGHT:
    # 超出屏幕之外游戲結束
    running = False

# 限制小蛇不能碰到自己的身體
for sb in snake_body[1:]:
    # 身體的其他部位如果和蛇頭(snake_body[0])重合就死亡
    if sb == snake_body[0]:
        running = False

我們運行游戲之后會發(fā)現,只要運行到屏幕之外或撞到了自己的身體汰扭,就會退出稠肘!

二、來點背景音樂吧~~

背景音樂大家可以隨便到網上下載萝毛,向小蛇吃東西的音效的話项阴,網上也是有許多資源的,我就在這個網站上下的一些音效笆包。

要加入聲音效果环揽,首先要初始化pygame的mixer,然后我們載入音樂庵佣,最后播放就可以了歉胶,是不是很簡單呢~

# 要想載入音樂,必須要初始化 mixer
pygame.mixer.init()

# 設置游戲的根目錄為當前文件夾
base_folder = os.path.dirname(__file__)

# 這里需要在當前目錄下創(chuàng)建一個名為music的目錄巴粪,并且在里面存放名為back.mp3的背景音樂
music_folder = os.path.join(base_folder, 'music')

# 背景音樂跨扮,大家可以到網上去下自己喜歡的背景音樂
back_music = pygame.mixer.music.load(os.path.join(music_folder, 'back.mp3'))

# 小蛇吃食物的音樂,armor-light.wav 是我在網絡上下的免費音效資源
bite_dound = pygame.mixer.Sound(os.path.join(music_folder, 'armor-light.wav'))

# 設置一下音量大小验毡,防止過大
pygame.mixer.music.set_volume(0.4)

# 設置音樂循環(huán)次數 -1 表示無限循環(huán)
pygame.mixer.music.play(loops=-1)

到這里衡创,我們的背景音樂就加好了,但是小蛇吃食物的食物的音效雖然載入了晶通,我們還沒有播放璃氢,必須在遲到食物的時候播放,只需要一行代碼就可以咯狮辽! 我們在之前一也,我們grow()函數里面添加一行代碼:bite_dound.play()

# 判斷貪吃蛇是否吃到了事物,如果吃到了我們就加長小蛇的身體
def grow():
    if snake_body[0][0] == food_pos[0] * CUBE_WIDTH and\
            snake_body[0][1] == food_pos[1] * CUBE_WIDTH:
        # 每次吃到食物喉脖,就播放音效
        bite_dound.play()
        return True

    return False

OKR丁!運行一下游戲树叽,就可以聽到音樂和音效咯舆蝴!

三、解決一下题诵,食物會出現在小蛇身體上的問題

我們在產生食物的函數里洁仗,加上判斷,如果我們產生的一個事物在小蛇的身體上性锭,我們就再隨機產生下一個赠潦,一直到不再小蛇身體上為止,這里有一點點效率問題草冈,感興趣的同學可以自己優(yōu)化哦~

我們在產生食物的函數里加一個循環(huán)判斷一下:

# 隨機產生一個事物
def generate_food():
    while True:
        pos = (random.randint(0, GRID_WIDTH_NUM - 1),
               random.randint(0, GRID_HEIGHT_NUM - 1))

        # 如果當前位置沒有小蛇的身體她奥,我們就跳出循環(huán)瓮增,返回食物的位置
        if not (pos[0] * CUBE_WIDTH, pos[1] * CUBE_WIDTH) in snake_body:
            return pos

四、修改一下我們游戲的外觀A蟆钉赁!

(一)修改背景圖片

  1. 加載圖片
# 加載圖片
# 我們將背景圖片放到 images 文件夾中
img_folder = os.path.join(base_folder, 'images')

# 加載圖片
back_img = pygame.image.load(os.path.join(img_folder, 'back.png'))

blit 函數的作用其實就是將像素點直接復制到指定位置。

# 調整圖片的大小携茂,和屏幕一樣大
background = pygame.transform.scale(back_img, (WIDTH, HEIGHT))
  1. 將圖片縮放到我們屏幕的大小
# 調整圖片的大小,和屏幕一樣大
background = pygame.transform.scale(back_img, (WIDTH, HEIGHT))
  1. 最后每次更新屏幕的時候诅岩,我們不再是把屏幕直接用背景色填充讳苦,而是用圖片填充。
# 在更新圖片的位置
# 用圖片填充屏幕吩谦,第二個參數是屏幕的位置鸳谜,也就是屏幕左上角的位置(0, 0)
screen.blit(background, (0, 0))

此時我們的游戲的背景就變成了我們制定的圖片了

(二)利用同樣的方法我們可以改變一下我們貪吃蛇和食物的形狀

五式廷、最后看一下具體效果

snake-full.png

就問你咐扭,酷不酷~~~~

完整的代碼可以去我的 github 看,點擊這里進入GitHub滑废。

如果你喜歡我的文章蝗肪,就打賞一下我吧~~~

您的支持是我繼續(xù)創(chuàng)作的動力~~~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蠕趁,隨后出現的幾起案子薛闪,更是在濱河造成了極大的恐慌,老刑警劉巖俺陋,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豁延,死亡現場離奇詭異,居然都是意外死亡腊状,警方通過查閱死者的電腦和手機诱咏,發(fā)現死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缴挖,“玉大人袋狞,你說我怎么就攤上這事∮澄荩” “怎么了硕并?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長秧荆。 經常有香客問我倔毙,道長,這世上最難降的妖魔是什么乙濒? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任陕赃,我火速辦了婚禮卵蛉,結果婚禮上,老公的妹妹穿的比我還像新娘么库。我一直安慰自己傻丝,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布诉儒。 她就那樣靜靜地躺著葡缰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忱反。 梳的紋絲不亂的頭發(fā)上泛释,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音温算,去河邊找鬼怜校。 笑死,一個胖子當著我的面吹牛注竿,可吹牛的內容都是我干的茄茁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼巩割,長吁一口氣:“原來是場噩夢啊……” “哼裙顽!你這毒婦竟也來了?” 一聲冷哼從身側響起宣谈,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤锦庸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蒲祈,有當地人在樹林里發(fā)現了一具尸體甘萧,經...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年梆掸,在試婚紗的時候發(fā)現自己被綠了扬卷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡酸钦,死狀恐怖怪得,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情卑硫,我是刑警寧澤徒恋,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站欢伏,受9級特大地震影響入挣,放射性物質發(fā)生泄漏。R本人自食惡果不足惜硝拧,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一径筏、第九天 我趴在偏房一處隱蔽的房頂上張望葛假。 院中可真熱鬧,春花似錦滋恬、人聲如沸聊训。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽带斑。三九已至,卻和暖如春勋拟,著一層夾襖步出監(jiān)牢的瞬間勋磕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工指黎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人州丹。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓醋安,卻偏偏與公主長得像,于是被迫代替她去往敵國和親墓毒。 傳聞我的和親對象是個殘疾皇子吓揪,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內容