亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

手把手教你用322行Python代碼編寫(xiě)貪吃蛇游戲

 更新時(shí)間:2023年02月04日 10:06:16   作者:AlexHu2022  
最近在學(xué)Python,想做點(diǎn)什么來(lái)練練手,命令行的貪吃蛇一般是C的練手項(xiàng)目,但是一時(shí)之間找不到別的,就先做個(gè)貪吃蛇來(lái)練練簡(jiǎn)單的語(yǔ)法,下面這篇文章主要給大家介紹了關(guān)于如何用322行Python代碼編寫(xiě)貪吃蛇游戲的相關(guān)資料,需要的朋友可以參考下

效果圖

貪吃蛇是一個(gè)很常見(jiàn)的小游戲,我們?nèi)绾斡肞ython去實(shí)現(xiàn)呢。

安裝和導(dǎo)入 

pip install pygame
pip install keyboard
pip install pickledb

通過(guò)命令提示符安裝所需模塊。(以上非Python代碼)

#導(dǎo)入
import pygame, keyboard, random, threading, time, pickledb

這個(gè)程序用到了pygame作為顯示模塊,keyboard捕獲鍵盤(pán)操,pickledb記錄最高紀(jì)錄。

規(guī)則

#顯示規(guī)則
print()
print('方向鍵控制方向')
print('\'esc\'退出')
print('\'alt\'暫停')
print('\'space\'繼續(xù)')
print('每吃掉一個(gè)莓果,蛇身長(zhǎng)長(zhǎng)一格')
print('撞到蛇身或窗口邊緣即為死亡')
print('死亡后\'esc\'退出,\'enter\'再來(lái)一局')

初始化

#初始化
pygame.init()
 
#設(shè)定窗口
screen = pygame.display.set_mode((500, 500))
pygame.display.set_caption('Greedy Snake')

 執(zhí)行以上代碼就設(shè)定好了貪吃蛇的窗口。

設(shè)定Surface,變量和顯示數(shù)字的坐標(biāo) 

#設(shè)定蛇身
body = pygame.Surface((20, 20))
body.fill('yellow')
 
#設(shè)定莓果
berries = pygame.Surface((20, 20))
berries.fill('red')
 
#設(shè)定數(shù)字方塊(用于顯示數(shù)字)
block = pygame.Surface((4, 4))
#設(shè)定變量
T = 0
db = pickledb.load('Mark.db', False)
HI = db.get('HiMark')
B = False

函數(shù)

def keyname(key) :
    #鍵盤(pán)捕獲
    global KEY
    KEY = key.name
keyboard.on_press(keyname)

用on_press綁定了keyname后,當(dāng)鍵盤(pán)按下時(shí)會(huì)執(zhí)行keyname函數(shù)。(key.name是按鍵的名稱(chēng))

def snake() :
    #顯示蛇身
    global path
    for xy in path :
        screen.blit(body, xy)
 
def food() :
    #顯示食物
    global fx, fy
    screen.blit(berries, (fx, fy))
 
def eat() :
    #檢測(cè)是否吃掉食物
    if (x, y) == (fx, fy) :
        return True
    else :
        return False
 
def crash() :
    #檢測(cè)是否碰撞
    if path.count((x, y)) != 0 :
        return True
    elif x < 0 or x > 480 or y < 0 or y > 480 :
        return True
    else :
        return False
 
def count() :
    #計(jì)時(shí)線程函數(shù)
    global T
    while True :
        if B :
            time.sleep(1)
            T += 1
 
def timer() :
    #顯示時(shí)間
    global T, number
    a = T // 100
    b = T % 100 // 10
    c = T % 10
    a = number[a]
    b = number[b]
    c = number[c]
    X, Y = 6, 10
    block.fill('white')
    for n in (a, b, c) :
        for xy in n :
            x = X + xy[0] * 4
            y = Y + xy[1] * 4
            screen.blit(block, (x, y))
        X += 32
 
def mark() :
    #顯示分?jǐn)?shù)
    global M, number
    a = M // 100
    b = M % 100 // 10
    c = M % 10
    a = number[a]
    b = number[b]
    c = number[c]
    X, Y = 395, 10
    block.fill('white')
    for n in (a, b, c) :
        for xy in n :
            x = X + xy[0] * 4
            y = Y + xy[1] * 4
            screen.blit(block, (x, y))
        X += 32
 
def hi() :
    #顯示最高紀(jì)錄
    global HI, number
    a = HI // 100
    b = HI % 100 // 10
    c = HI % 10
    a = number[a]
    b = number[b]
    c = number[c]
    X, Y = 263, 10
    block.fill('grey')
    for n in (a, b, c) :
        for xy in n :
            x = X + xy[0] * 4
            y = Y + xy[1] * 4
            screen.blit(block, (x, y))
        X += 32

線程 

#啟動(dòng)計(jì)時(shí)線程
time_count_thread = threading.Thread(target = count)
time_count_thread.start()

 線程可以在主線程的運(yùn)行過(guò)程中運(yùn)行,起到計(jì)時(shí)的作用。

主要部分

以下就是程序的主要部分,實(shí)現(xiàn)了對(duì)按鍵名稱(chēng)進(jìn)行判斷、蛇的移動(dòng)、蛇吃掉食物后的生長(zhǎng)和判斷死亡。

while True :
    #變量初始化
    KEY = 'up'
    lKEY = KEY
    x, y = 240, 240
    path = []
    path.append((x, y))
    fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20)
    while path.count((fx, fy)) != 0 :
        fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20)
    T = 0
    M = 0
    B = True
 
    while True :
        time.sleep(0.1)
 
        #檢測(cè)是否按下退出按鈕
        for event in pygame.event.get() :
            if event.type == pygame.QUIT :
                pygame.quit()
                exit()
        
        #檢測(cè)鍵盤(pán)按鍵
        if (KEY == 'up' and lKEY != 'down') or (KEY == 'w' and lKEY != 's') :
            y -= 20
            lKEY = KEY
        elif (KEY == 'down' and lKEY != 'up') or (KEY == 's' and lKEY != 'w')  :
            y += 20
            lKEY = KEY
        elif (KEY == 'left' and lKEY != 'right') or (KEY == 'a' and lKEY != 'd')  :
            x -= 20
            lKEY = KEY
        elif (KEY == 'right' and lKEY != 'left') or (KEY == 'd' and lKEY != 'a')  :
            x += 20
            lKEY = KEY
        elif KEY == 'alt' or KEY == 'right alt' :
            B = False
            while True :
                pygame.event.wait()
                if KEY == 'space' :
                    KEY = lKEY
                    B = True
                    break
                elif KEY == 'esc' :
                    pygame.quit()
                    if M > HI :
                        HI = M
                        db.set('HiMark', HI)
                        db.dump()
                    exit()
            continue
        elif KEY == 'esc' :
            pygame.quit()
            if M > HI :
                HI = M
                db.set('HiMark', HI)
                db.dump()
            exit()
        else :
            KEY = lKEY
            continue
 
        #檢測(cè)是否碰撞或吃掉食物
        if crash() :
            break
        if eat() :
            M += 1
            fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20)
            while path.count((fx, fy)) != 0 :
                fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20)
        else :
            del path[0]
        
        #更新屏幕內(nèi)容
        path.append((x, y))
        screen.fill('black')
        snake()
        food()
        timer()
        mark()
        hi()
        pygame.display.flip()
 
    #保存最高紀(jì)錄
    if M > HI :
        HI = M
        db.set('HiMark', HI)
        db.dump()
    
    B = False
 
    #檢測(cè)是否退出或再來(lái)一局
    while True :
        event = pygame.event.wait()
        if event.type == pygame.QUIT :
            pygame.quit()
            exit()
        elif KEY == 'esc' :
            pygame.quit()
            exit()
        elif KEY == 'return' or KEY == 'enter' :
            break

總結(jié)

如果你將以上所有的代碼按順序編寫(xiě)在一些,就可以運(yùn)行完整的貪吃蛇了。這些代碼都很簡(jiǎn)單,適合初學(xué)者學(xué)習(xí)。

源碼下載 

GitHub源碼

到此這篇關(guān)于用322行Python代碼編寫(xiě)貪吃蛇游戲的文章就介紹到這了,更多相關(guān)Python編寫(xiě)貪吃蛇內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python模擬登錄之滑塊驗(yàn)證碼的破解(實(shí)例代碼)

    Python模擬登錄之滑塊驗(yàn)證碼的破解(實(shí)例代碼)

    這篇文章主要介紹了Python模擬登錄之滑塊驗(yàn)證碼的破解(實(shí)例代碼),代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python圖像運(yùn)算之圖像銳化和邊緣檢測(cè)

    Python圖像運(yùn)算之圖像銳化和邊緣檢測(cè)

    這篇文章主要和大家講解一下常見(jiàn)的圖像銳化和邊緣檢測(cè)方法,即Roberts算子和Prewitt算子。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-12-12
  • 使用OpenCV去除面積較小的連通域

    使用OpenCV去除面積較小的連通域

    這篇文章主要介紹了使用OpenCV去除面積較小的連通域,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • pycharm中django框架連接mysql數(shù)據(jù)庫(kù)的方法

    pycharm中django框架連接mysql數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了pycharm中django框架連接mysql數(shù)據(jù)庫(kù)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Python利用sqlacodegen自動(dòng)生成ORM實(shí)體類(lèi)示例

    Python利用sqlacodegen自動(dòng)生成ORM實(shí)體類(lèi)示例

    這篇文章主要介紹了Python利用sqlacodegen自動(dòng)生成ORM實(shí)體類(lèi),結(jié)合實(shí)例形式分析了Python sqlacodegen安裝技巧ORM實(shí)體類(lèi)相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-06-06
  • Python的迭代器和生成器

    Python的迭代器和生成器

    由于在看一個(gè)python項(xiàng)目,遇到了迭代器和生成器的使用,正好之前自己也沒(méi)有細(xì)看這部分,今天就稍微梳理一下吧!
    2015-07-07
  • 將本地Python項(xiàng)目打包成docker鏡像上傳到服務(wù)器并在docker中運(yùn)行

    將本地Python項(xiàng)目打包成docker鏡像上傳到服務(wù)器并在docker中運(yùn)行

    Docker是一個(gè)開(kāi)源項(xiàng)目,為開(kāi)發(fā)人員和系統(tǒng)管理員提供了一個(gè)開(kāi)放平臺(tái),可以將應(yīng)用程序構(gòu)建、打包為一個(gè)輕量級(jí)容器,并在任何地方運(yùn)行,這篇文章主要給大家介紹了關(guān)于將本地Python項(xiàng)目打包成docker鏡像上傳到服務(wù)器并在docker中運(yùn)行的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • 在Python中處理日期和時(shí)間的基本知識(shí)點(diǎn)整理匯總

    在Python中處理日期和時(shí)間的基本知識(shí)點(diǎn)整理匯總

    這篇文章主要介紹了在Python中處理日期和時(shí)間的基本知識(shí)點(diǎn)整理匯總,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Pycharm 2to3配置,python2轉(zhuǎn)python3方式

    Pycharm 2to3配置,python2轉(zhuǎn)python3方式

    這篇文章主要介紹了Pycharm 2to3配置,python2轉(zhuǎn)python3方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python3 中文亂碼與默認(rèn)編碼格式設(shè)定方法

    python3 中文亂碼與默認(rèn)編碼格式設(shè)定方法

    今天小編就為大家分享一篇python3 中文亂碼與默認(rèn)編碼格式設(shè)定方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10

最新評(píng)論