欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python貪吃蛇核心功能實(shí)現(xiàn)下

 更新時(shí)間:2022年09月21日 09:15:29   作者:jackwsd  
我想大家都玩過(guò)諾基亞上面的貪吃蛇吧,這篇文章將帶你一步步用python語(yǔ)言實(shí)現(xiàn)一個(gè)snake小游戲,文中的示例代碼講解詳細(xì),感興趣的可以了解一下

緊接上回,已經(jīng)完成了單獨(dú)的貪食蛇的控制,但是呢,居然沒(méi)有蘋(píng)果可以吃,所以,非常簡(jiǎn)單的加入蘋(píng)果,同時(shí)呢,修改一下主程序中貪食蛇的創(chuàng)建,單獨(dú)編寫(xiě)一個(gè)貪食蛇身體生成函數(shù),這樣將來(lái)要做雙蛇也很簡(jiǎn)單了。

#創(chuàng)建一條新的蛇
def create_new_snake():
    snake_body = []
    snake_x = random.randint(5, rows - 5)
    snake_y = random.randint(5, columns - 5)
    snake_body.append([snake_x, snake_y])
    snake_body.append([snake_x, snake_y + 1])
    snake_body.append([snake_x, snake_y + 2])
    return snake_body

把主程序中所有生成新蛇的地方換成

snake = create_new_snake()

創(chuàng)建新蘋(píng)果,蘋(píng)果不能出現(xiàn)在蛇的身體里,所以

def create_new_apple(snake_body):
    apple_in_game = False
    while not apple_in_game:
        apple_x = random.randint(0, rows - 1)
        apple_y = random.randint(0, columns - 1)
        # print(apple_x, apple_y)
        if (apple_x, apple_y) not in snake_body:
            new_apple = pygame.image.load('apple.png')
            new_apple = pygame.transform.scale(new_apple, (tile_size - 2, tile_size - 2))
            apple_x_location = apple_y * tile_size + x_margin/2
            apple_y_location = apple_x * tile_size + y_margin/2

            display.blit(new_apple, (apple_x_location, apple_y_location))
            apple_in_game = True
    return new_apple, (apple_x, apple_y), apple_x_location, apple_y_location

在主程序中,主循環(huán)之前創(chuàng)建一個(gè)蘋(píng)果

if __name__ == '__main__':
    pygame.init()
    snake = create_new_snake()
    # 未按下按鍵時(shí),默認(rèn)的初識(shí)移動(dòng)方向
    direction = directions[random.randint(0, 3)]
    # 創(chuàng)建一個(gè)小蘋(píng)果
    apple, apple_location, apple_left, apple_top = create_new_apple(snake)
    # 吃到蘋(píng)果標(biāo)志
    apple_was_eaten = False

因?yàn)樯吲c蘋(píng)果之間有交互關(guān)系,如果蛇吃到蘋(píng)果,那么蛇的身體會(huì)增加一格,也就是此次循環(huán)不刪除列表的最后一個(gè)元素,所以定義了一格標(biāo)志位。

在主循環(huán)中,與監(jiān)測(cè)按鍵平級(jí)的地方,放入蛇與蘋(píng)果關(guān)系檢查。

        if apple_location in snake:
            apple, apple_location, apple_left, apple_top = create_new_apple(snake)
            apple_was_eaten = True
            my_score += 1

無(wú)論??的那個(gè)部分碰到蘋(píng)果,都算遲到蘋(píng)果,也可以考慮只有舌頭碰到才算,這根據(jù)自己喜好吧。碰到蘋(píng)果后,蘋(píng)果消失,得分等等…

還需要修改刪除最后一個(gè)列表元素位置,同時(shí)因?yàn)樯叩纳眢w會(huì)變長(zhǎng)了,所以單純的碰到邊界游戲才結(jié)束,已經(jīng)不夠了,我們還需要加入如果蛇頭碰到自己的身體,游戲還是要結(jié)束。

        if snake[0] in snake[1:]:
            snake = create_new_snake()
            #print(snake)
        elif is_right_direction(snake, new_body_location[0], new_body_location[1]):
            snake.insert(0, new_body_location)
            if not apple_was_eaten:
                del snake[-1]
            else:
                apple_was_eaten = False

如果不想結(jié)束的太突然,祭出萬(wàn)年不變的結(jié)束動(dòng)畫(huà)。

#游戲結(jié)束時(shí)特效
def game_over_animation(color=white, animation_speed=50):
    orig_surf = display.copy()
    flash_surf = pygame.Surface(display.get_size())
    flash_surf = flash_surf.convert_alpha()
    r, g, b = color
    for i in range(3):
        for start, end, step in ((0, 255, 1), (255, 0, -1)):
            for alpha in range(start, end, animation_speed * step):
                # 先鋪一層新的界面,包含老界面所有內(nèi)容
                display.blit(orig_surf, (0, 0))
                # flash界面填充顏色,開(kāi)始很淡,越來(lái)越濃,然后越來(lái)越淡
                flash_surf.fill((r, g, b, alpha))
                # 把flash界面加載到display中
                display.blit(flash_surf, (0, 0))
                # draw_game_board(maze)
                # 刷新看效果
                pygame.display.update()
                fps_clock.tick(fps)

把動(dòng)畫(huà)放到程序中。即可欣賞結(jié)束動(dòng)畫(huà)。因?yàn)榻Y(jié)束動(dòng)畫(huà)使用alpha時(shí)用到了顏色的RGB三色,這里需要把while的定義改為三色(255, 255, 255),而不是’white’。

還可以加入得分系統(tǒng)。

def make_score():
    score = pygame.font.Font('Kaiti.ttc', 20)
    score_surf = score.render('得分: %d' % my_score, True, text_color, bg_color)
    score_rect = score_surf.get_rect()
    score_rect.topleft = (screen_width-100, y_margin/8)
    return score_surf, score_rect

這個(gè)Kaiti.ttc字體是我從蘋(píng)果系統(tǒng)字體里導(dǎo)出到工程里的,目前發(fā)現(xiàn)如果想要顯示中文,這樣比較方便,pygame自帶的字體中,不知道那些可以正常顯示。

在循環(huán)中加入

display.blit(score_display, score_rect)

然后運(yùn)行游戲

雖然簡(jiǎn)陋,但是難看的貪食蛇完成了。我們還可以進(jìn)一步增加難度,根據(jù)得分的增加,提高fps率,也就是提高了貪食蛇的移動(dòng)速度。這個(gè)就不提了。還可以增加開(kāi)始結(jié)束畫(huà)面,暫停功能,聲音,音效等等…

如果增加了這些,就不符合簡(jiǎn)陋的定義了,所以就不增加了,本身這些也太簡(jiǎn)單了…

到此這篇關(guān)于python貪吃蛇核心功能實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python貪吃蛇內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python HTMLTestRunner庫(kù)安裝過(guò)程解析

    Python HTMLTestRunner庫(kù)安裝過(guò)程解析

    這篇文章主要介紹了Python HTMLTestRunner庫(kù)安裝過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python基于httpx模塊實(shí)現(xiàn)發(fā)送請(qǐng)求

    Python基于httpx模塊實(shí)現(xiàn)發(fā)送請(qǐng)求

    這篇文章主要介紹了Python基于httpx模塊實(shí)現(xiàn)發(fā)送請(qǐng)求,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Python繪制雷達(dá)圖時(shí)遇到的坑的解決

    Python繪制雷達(dá)圖時(shí)遇到的坑的解決

    這篇文章主要介紹了Python繪制雷達(dá)圖時(shí)遇到的坑的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Pytorch實(shí)現(xiàn)基于CharRNN的文本分類與生成示例

    Pytorch實(shí)現(xiàn)基于CharRNN的文本分類與生成示例

    今天小編就為大家分享一篇Pytorch實(shí)現(xiàn)基于CharRNN的文本分類與生成示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python字符串編碼識(shí)別模塊chardet簡(jiǎn)單應(yīng)用

    python字符串編碼識(shí)別模塊chardet簡(jiǎn)單應(yīng)用

    有時(shí)候需要先檢測(cè)一個(gè)文件的編碼,然后將其轉(zhuǎn)化為另一種編碼。這時(shí)候就會(huì)用到chardet(chardet是python的一個(gè)第三方庫(kù),是非常優(yōu)秀的編碼識(shí)別模塊)
    2015-06-06
  • Python字符串格式化

    Python字符串格式化

    Python字符串格式化操作符(%)只適用于字符串類型,非常類似于C 語(yǔ)言里面的printf()函數(shù)的字符串格式化,甚至所用的符號(hào)都一樣,都用百分號(hào)(%),并且支持所有printf()式的格式化操作。
    2015-06-06
  • Python并行分布式框架Celery詳解

    Python并行分布式框架Celery詳解

    今天小編就為大家分享一篇關(guān)于Python并行分布式框架Celery詳解的文章,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • 基于Python自制一個(gè)文件解壓縮小工具

    基于Python自制一個(gè)文件解壓縮小工具

    經(jīng)常在辦公的過(guò)程中會(huì)遇到各種各樣的壓縮文件處理,但是呢每個(gè)壓縮軟件支持的格式又是不同的。本文就來(lái)用Python自制一個(gè)文件解壓縮小工具,可以支持7z/zip/rar三種格式,希望對(duì)大家有所幫助
    2023-02-02
  • Python詳細(xì)對(duì)比講解break和continue區(qū)別

    Python詳細(xì)對(duì)比講解break和continue區(qū)別

    這篇文章主要介紹了python循環(huán)控制語(yǔ)句 break 與 continue,break就像是終止按鍵,不管執(zhí)行到哪一步,只要遇到break,不管什么后續(xù)步驟,直接跳出當(dāng)前循環(huán)
    2022-06-06
  • 將Python代碼打包為jar軟件的簡(jiǎn)單方法

    將Python代碼打包為jar軟件的簡(jiǎn)單方法

    這篇文章主要介紹了將Python代碼打包為jar軟件的簡(jiǎn)單方法,一些情況下會(huì)有利于Python和Java項(xiàng)目之間的協(xié)作,需要的朋友可以參考下
    2015-08-08

最新評(píng)論