欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識(shí)庫 > Python實(shí)現(xiàn)貪吃蛇小游戲(雙人模式)

Python實(shí)現(xiàn)貪吃蛇小游戲(雙人模式)

熱門標(biāo)簽:萊蕪電信外呼系統(tǒng) 銀川電話機(jī)器人電話 怎么辦理400客服電話 鶴壁手機(jī)自動(dòng)外呼系統(tǒng)違法嗎 沈陽防封電銷電話卡 高德地圖標(biāo)注收入咋樣 地圖標(biāo)注多個(gè) B52系統(tǒng)電梯外呼顯示E7 企業(yè)微信地圖標(biāo)注

簡(jiǎn)單用py寫了一個(gè)貪吃蛇游戲,有單人、雙人模式,比較簡(jiǎn)單,適合初學(xué)者練手。本上每行重要的語句都有注釋,做了什么事一目了然

這里介紹雙人模式

單人模式戳這里:Python簡(jiǎn)易貪吃蛇小游戲(單人模式)

一、游戲設(shè)計(jì)要點(diǎn)

1.游戲主體窗口(尺寸)、畫布(尺寸、位置)、按鈕(尺寸、位置)、文字(大小、顏色、位置)、圖像、背景音樂及相關(guān)響應(yīng)函數(shù)(主要是鼠標(biāo)移動(dòng)及點(diǎn)擊的響應(yīng))的設(shè)計(jì)與合理排布
2.蛇與食物的類的屬性設(shè)計(jì)
3.蛇位置的更新(根據(jù)鍵盤輸入)、吃到食物加分的判定、食物的更新
4.蛇死亡的判定條件設(shè)計(jì)

二、主要模塊

1.pygame
2.sys
3.random

三、用到的類

1.Snake類,定義蛇頭蛇身元素的位置
2.Food類,定義食物元素的位置及單個(gè)元素的顏色

四、主要函數(shù)

1.new_food(),功能:生成一個(gè)不與蛇頭位置重合的食物并返回該食物對(duì)象

def new_food(head):
    while True:
        # 循環(huán),不斷實(shí)例化new_food對(duì)象直到生成一個(gè)不與蛇頭重合的食物
        new_food = Food(randint(0, 45) * 20, randint(0, 28) * 20, (randint(10, 255), randint(10, 255), randint(10, 255)))
        # 若new_food和蛇頭重合則不創(chuàng)鍵
        if new_food.x != head.x and new_food.y != head.y:
            break
        else:
            continue
    return new_food

2.draw_snake()、draw_food()函數(shù),功能:繪制蛇與食物的圖像,傳入?yún)?shù)為顏色和對(duì)象:

# 在窗體中繪制貪吃蛇
# 形參:一個(gè)是顏色另一個(gè)是實(shí)例化對(duì)象
def draw_snake(color, object):
    pygame.draw.circle(window, color, (object.x, object.y), 10)
    
# 在窗體中繪制食物
# 形參:實(shí)例化對(duì)象
def draw_food(food):
    pygame.draw.circle(window, food.color, (food.x, food.y), 10)

3.show_end函數(shù),功能:顯示雙人模式結(jié)束時(shí)的得分界面:

def show_end():
    while True:
        window.blit(init_background, (0, 0))
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit_end()
        # 定義標(biāo)題
        pygame.display.set_caption("貪吃蛇大冒險(xiǎn)")
        # 定義提示文字
        font = pygame.font.SysFont("simHei", 40)
        fontsurf = font.render('游戲結(jié)束! 玩家1得分: %s 玩家2得分:%s' % (score1, score2), True, black)
        window.blit(fontsurf, (150, 100))
        button("返回主菜單", 370, 300, 200, 40, blue, brightred, into_game)
        button("退出游戲", 370, 470, 200, 40, red, brightred, exit_end)
        pygame.display.update()
        clock.tick(20)

4.exit_end()函數(shù),功能:在初始界面和游戲結(jié)束顯示得分界面點(diǎn)擊右上角的"×"時(shí),直接退出整個(gè)游戲:

# 初始界面和游戲中途點(diǎn)擊退出游戲時(shí)
def exit_end():
    pygame.quit()
    sys.exit()

5.start_game_double()函數(shù),功能:實(shí)現(xiàn)雙人正常模式:

def start_game_double():
    # 播放音樂
    pygame.mixer.music.play(-1)
    # 定義存分?jǐn)?shù)的全局變量
    global score1
    global score2
    score1 = score2 = 0
    # 初始化存放玩家鍵盤輸入運(yùn)動(dòng)方向的變量
    run_direction1 = "right"
    run_direction2 = "up"
    # 初始化貪吃蛇運(yùn)動(dòng)方向的變量
    run1 = run_direction1
    run2 = run_direction2
    # 實(shí)例化貪吃蛇和食物對(duì)象
    head1 = Snake(randint(0, 30) * 20, randint(0, 20) * 20)
    head2 = Snake(randint(0, 30) * 20, randint(0, 20) * 20)
    # 實(shí)例化蛇身長(zhǎng)度為2個(gè)單位
    snake_body1 = [Snake(head1.x, head1.y + 20), Snake(head1.x, head1.y + 40)]
    snake_body2 = [Snake(head2.x, head2.y + 20), Snake(head2.x, head2.y + 40)]
    # 實(shí)例化食物列表,列表隨著其中食物被吃掉應(yīng)該不斷縮短
    food_list = [Food(randint(0, 45) * 20, randint(0, 28) * 20, (randint(10, 255), randint(10, 255), randint(10, 255)))]
    for i in range(1,24):
        food_list.append(Food(randint(0, 45) * 20, randint(0, 28) * 20, (randint(10, 255), randint(10, 255), randint(10, 255))))
    # 實(shí)例化單個(gè)食物,方便循環(huán)內(nèi)生成單個(gè)新食物
    food = Food(randint(0, 45) * 20, randint(0, 28) * 20, (randint(10, 255), randint(10, 255), randint(10, 255)))
    while True:
        window.blit(background, (0,0))
        # 監(jiān)聽玩家鍵盤輸入的運(yùn)動(dòng)方向值,并根據(jù)輸入轉(zhuǎn)為up、down、right或left,方便程序中調(diào)用
        # pygame.event.get()返回一個(gè)列表,存放本次game執(zhí)行中程序遇到的一連串事件(按時(shí)間順序依次存放)
        for event in pygame.event.get():
            # pygame.QUIT事件是指用戶點(diǎn)擊窗口右上角的"×"
            if event.type == pygame.QUIT:
                # 顯示結(jié)果界面
                show_end()
            # 若事件類型是按下鍵盤,分↑ ↓ ← →四種情況討論
            elif event.type == pygame.KEYDOWN:
                # 若事件類型是按下鍵盤↑
                # key是鍵值,表示按下去的鍵值是什么
                if event.key == pygame.K_UP:
                    run_direction2 = "up"
                # 若事件類型是按下鍵盤↓
                if event.key == pygame.K_DOWN:
                    run_direction2 = "down"
                # 若事件類型是按下鍵盤←
                if event.key == pygame.K_LEFT:
                    run_direction2 = "left"
                # 若事件類型是按下鍵盤→
                if event.key == pygame.K_RIGHT:
                    run_direction2 = "right"
                # 若事件類型是按下鍵盤↑
                if event.key == ord('w'):
                    run_direction1 = "up"
                # 若事件類型是按下鍵盤↓
                if event.key == ord('s'):
                    run_direction1 = "down"
                # 若事件類型是按下鍵盤←
                if event.key == ord('a'):
                    run_direction1 = "left"
                # 若事件類型是按下鍵盤→
                if event.key == ord('d'):
                    run_direction1 = "right"
        # 繪制初始化的25個(gè)食物圖像(24+1=25)
        # 隨著該列表中的食物被吃掉,列表應(yīng)該不斷pop以清除已經(jīng)被吃的事物
        for item in food_list:
            draw_food(item)
        # 繪制被貪吃蛇吃掉后新增的食物圖像
        draw_food(food)
        # 繪制蛇頭圖像
        # 在繪制蛇頭之前先檢查是不是已經(jīng)死亡,如果已死亡,則不繪制
        # !!不能通過die_flag判斷是否死亡因?yàn)槊看窝h(huán)一開頭die_flag都初始化為False
        # 因此最好的方法是通過snake_body是否為空判斷
        if len(snake_body1) != 0:
            draw_snake(black, head1)
        if len(snake_body2) != 0:
            draw_snake(black, head2)
        # 繪制蛇身圖像
        for item in snake_body1:
            draw_snake(blue, item)
        for item in snake_body2:
            draw_snake(green, item)
        # 若蛇未死亡,則插入蛇頭位置到蛇身列表中
        # 即:若蛇已死亡,則保持snake_body為空不變
        if len(snake_body1) != 0:
            snake_body1.insert(0, Snake(head1.x, head1.y))
        if len(snake_body2) != 0:
            snake_body2.insert(0, Snake(head2.x, head2.y))
        # 判斷貪吃蛇原運(yùn)動(dòng)方向(run)與玩家鍵盤輸入的運(yùn)動(dòng)方向(run_direction)是否違反正常運(yùn)動(dòng)情況
        if run1 == "up" and not run_direction1 == "down":
            run1 = run_direction1
        if run1 == "down" and not run_direction1 == "up":
            run1 = run_direction1
        if run1 == "left" and not run_direction1 == "right":
            run1 = run_direction1
        if run1 == "right" and not run_direction1 == "left":
            run1 = run_direction1
        if run2 == "up" and not run_direction2 == "down":
            run2 = run_direction2
        if run2 == "down" and not run_direction2 == "up":
            run2 = run_direction2
        if run2 == "left" and not run_direction2 == "right":
            run2 = run_direction2
        if run2 == "right" and not run_direction2 == "left":
            run2 = run_direction2
        # 根據(jù)玩家鍵入方向進(jìn)行蛇頭坐標(biāo)的更新
        if run1 == "up":
            head1.y -= 20
        if run1 == "down":
            head1.y += 20
        if run1 == "left":
            head1.x -= 20
        if run1 == "right":
            head1.x += 20
        if run2 == "up":
            head2.y -= 20
        if run2 == "down":
            head2.y += 20
        if run2 == "left":
            head2.x -= 20
        if run2 == "right":
            head2.x += 20
        # 判斷兩條蛇是否死亡
        # 初始化四個(gè)死亡標(biāo)志為False
        die_flag1 = die_flag2 = False
        # 此時(shí)snake_body1,2中均已包含蛇頭
        # snake_body1,2第一個(gè)元素是蛇頭,故不能從0號(hào)元素開始比較
        # 因?yàn)樵撋呱哳^必然和自己重合
        # 這里snake_body1,2均從1號(hào)元素開始
        # 所以snake_body1[1:]+snake_body2[1:]是純粹存儲(chǔ)蛇身的列表
        for body in snake_body1[1:]+snake_body2[1:]:
            if head1.x == body.x and head1.y == body.y:
                die_flag1 = True
            if head2.x == body.x and head2.y == body.y:
                die_flag2 = True
        if die_flag1 == True or head1.x  0 or head1.x > 960 or head1.y  0 or head1.y > 600:
            # 注意:這邊雖然蛇身列表清空,但head1對(duì)象仍存在
            # 故必須要在上面的繪制蛇頭代碼前面加上if先判斷蛇是否死亡
            snake_body1.clear()
        if die_flag2 == True or head2.x  0 or head2.x > 960 or head2.y  0 or head2.y > 600:
            die_flag2 = True
            # 注意:這邊雖然蛇身列表清空,但head1對(duì)象仍存在
            # 故必須要在上面的繪制蛇頭代碼前面加上if先判斷蛇是否死亡
            snake_body2.clear()
        # 若兩條蛇都死亡
        # 同樣地,只能通過snake_body是否為空判斷蛇是否死亡
        if len(snake_body1) == 0 and len(snake_body2) == 0:
            show_end()
        # 判斷蛇頭和食物坐標(biāo),若相等,則加分,并生成新的食物
        # 定義標(biāo)志,表明是否找到和蛇頭相等的食物
        global flag1
        global flag2
        flag1 = flag2 = 0
        # 如果蛇頭和食物重合
        for item in food_list:
            # 在蛇1沒死且蛇頭1和某一食物坐標(biāo)相等的條件下
            if len(snake_body1) != 0 and (head1.x == item.x and head1.y == item.y or head1.x == food.x and head1.y == food.y):
                flag1 = 1
                score1 += 1
                # 彈出被吃掉的這個(gè)食物
                food_list.pop(food_list.index(item))
                # 再產(chǎn)生一個(gè)食物
                food = new_food(head1)
                # 把新食物插入food_list,下一次循環(huán)中會(huì)更新繪制食物全體
                food_list.append(food)
                break
            # 在蛇2沒死的且蛇頭2和某一食物坐標(biāo)相等的條件下
            elif len(snake_body2) != 0 and head2.x == item.x and head2.y == item.y or head2.x == food.x and head2.y == food.y:
                flag2 = 1
                score2 += 1
                # 彈出被吃掉的這個(gè)食物
                food_list.pop(food_list.index(item))
                # 再產(chǎn)生一個(gè)食物
                food = new_food(head2)
                # 把新食物插入food_list,下一次循環(huán)中會(huì)更新繪制食物全體
                food_list.append(food)
                break
        # 蛇1必須沒死,否則pop會(huì)引發(fā)異常
        if len(snake_body1) != 0 and flag1 == 0:
            snake_body1.pop()
        # 蛇2必須沒死,否則pop會(huì)引發(fā)異常
        if len(snake_body2) != 0 and flag2 == 0:
            snake_body2.pop ()
        font = pygame.font.SysFont("simHei", 25)
        mode_title1 = mode_title2 = font.render('正常模式', False, grey)
        socre_title1 = font.render('得分: %s' % score1, False, grey)
        socre_title2 = font.render('得分: %s' % score2, False, grey)
        window.blit(mode_title1, (50, 30))
        window.blit(socre_title1, (50, 65))
        window.blit(mode_title2, (800, 30))
        window.blit(socre_title2, (800, 65))
        # 更新蛇頭蛇身和食物的數(shù)據(jù)
        pygame.display.update()
        # 通過幀率設(shè)置貪吃蛇速度
        clock.tick(8)

6.start_kgame_double()函數(shù),功能:實(shí)現(xiàn)雙人穿墻模式:

def start_kgame_double():
    # 播放音樂
    pygame.mixer.music.play(-1)
    # 定義存分?jǐn)?shù)的全局變量
    global score1
    global score2
    score1 = score2 = 0
    # 初始化存放玩家鍵盤輸入運(yùn)動(dòng)方向的變量
    run_direction1 = "right"
    run_direction2 = "up"
    # 初始化貪吃蛇運(yùn)動(dòng)方向的變量
    run1 = run_direction1
    run2 = run_direction2
    # 實(shí)例化貪吃蛇和食物對(duì)象
    head1 = Snake(randint(0, 30) * 20, randint(0, 20) * 20)
    head2 = Snake(randint(0, 30) * 20, randint(0, 20) * 20)
    # 實(shí)例化蛇身長(zhǎng)度為2個(gè)單位
    snake_body1 = [Snake(head1.x, head1.y + 20), Snake(head1.x, head1.y + 40)]
    snake_body2 = [Snake(head2.x, head2.y + 20), Snake(head2.x, head2.y + 40)]
    # 實(shí)例化食物列表,列表隨著其中食物被吃掉應(yīng)該不斷縮短
    food_list = [Food(randint(0, 45) * 20, randint(0, 28) * 20, (randint(10, 255), randint(10, 255), randint(10, 255)))]
    for i in range(1,24):
        food_list.append(Food(randint(0, 45) * 20, randint(0, 28) * 20, (randint(10, 255), randint(10, 255), randint(10, 255))))
    # 實(shí)例化單個(gè)食物,方便循環(huán)內(nèi)生成單個(gè)新食物
    food = Food(randint(0, 45) * 20, randint(0, 28) * 20, (randint(10, 255), randint(10, 255), randint(10, 255)))
    while True:
        window.blit(background, (0,0))
        # 監(jiān)聽玩家鍵盤輸入的運(yùn)動(dòng)方向值,并根據(jù)輸入轉(zhuǎn)為up、down、right或left,方便程序中調(diào)用
        # pygame.event.get()返回一個(gè)列表,存放本次game執(zhí)行中程序遇到的一連串事件(按時(shí)間順序依次存放)
        for event in pygame.event.get():
            # pygame.QUIT事件是指用戶點(diǎn)擊窗口右上角的"×"
            if event.type == pygame.QUIT:
                # 顯示結(jié)果界面
                show_end()
            # 若事件類型是按下鍵盤,分↑ ↓ ← →四種情況討論
            elif event.type == pygame.KEYDOWN:
                # 若事件類型是按下鍵盤↑
                # key是鍵值,表示按下去的鍵值是什么
                if event.key == pygame.K_UP:
                    run_direction2 = "up"
                # 若事件類型是按下鍵盤↓
                if event.key == pygame.K_DOWN:
                    run_direction2 = "down"
                # 若事件類型是按下鍵盤←
                if event.key == pygame.K_LEFT:
                    run_direction2 = "left"
                # 若事件類型是按下鍵盤→
                if event.key == pygame.K_RIGHT:
                    run_direction2 = "right"
                # 若事件類型是按下鍵盤↑
                if event.key == ord('w'):
                    run_direction1 = "up"
                # 若事件類型是按下鍵盤↓
                if event.key == ord('s'):
                    run_direction1 = "down"
                # 若事件類型是按下鍵盤←
                if event.key == ord('a'):
                    run_direction1 = "left"
                # 若事件類型是按下鍵盤→
                if event.key == ord('d'):
                    run_direction1 = "right"
        # 繪制初始化的25個(gè)食物圖像(24+1=25)
        # 隨著該列表中的食物被吃掉,列表應(yīng)該不斷pop以清除已經(jīng)被吃的事物
        for item in food_list:
            draw_food(item)
        # 繪制被貪吃蛇吃掉后新增的食物圖像
        draw_food(food)
        # 繪制蛇頭圖像
        # 在繪制蛇頭之前先檢查是不是已經(jīng)死亡,如果已死亡,則不繪制
        if len(snake_body1) != 0:
            draw_snake(black, head1)
        if len(snake_body2) != 0:
            draw_snake(black, head2)
        # 繪制蛇身圖像
        for item in snake_body1:
            draw_snake(blue, item)
        for item in snake_body2:
            draw_snake(green, item)
        # 插入蛇頭位置到蛇身列表中
        if len(snake_body1) != 0:
            snake_body1.insert(0, Snake(head1.x, head1.y))
        if len(snake_body2) != 0:
            snake_body2.insert(0, Snake(head2.x, head2.y))
        # 判斷貪吃蛇原運(yùn)動(dòng)方向(run)與玩家鍵盤輸入的運(yùn)動(dòng)方向(run_direction)是否違反正常運(yùn)動(dòng)情況
        if run1 == "up" and not run_direction1 == "down":
            run1 = run_direction1
        if run1 == "down" and not run_direction1 == "up":
            run1 = run_direction1
        if run1 == "left" and not run_direction1 == "right":
            run1 = run_direction1
        if run1 == "right" and not run_direction1 == "left":
            run1 = run_direction1
        if run2 == "up" and not run_direction2 == "down":
            run2 = run_direction2
        if run2 == "down" and not run_direction2 == "up":
            run2 = run_direction2
        if run2 == "left" and not run_direction2 == "right":
            run2 = run_direction2
        if run2 == "right" and not run_direction2 == "left":
            run2 = run_direction2
        # 根據(jù)玩家鍵入方向進(jìn)行蛇頭坐標(biāo)的更新
        if run1 == "up":
            head1.y -= 20
        if run1 == "down":
            head1.y += 20
        if run1 == "left":
            head1.x -= 20
        if run1 == "right":
            head1.x += 20
        if run2 == "up":
            head2.y -= 20
        if run2 == "down":
            head2.y += 20
        if run2 == "left":
            head2.x -= 20
        if run2 == "right":
            head2.x += 20
        # 實(shí)現(xiàn)穿墻
        # 蛇頭穿出窗體共有8種情況
        if head1.x  0:
            head1.x = 960
        if head1.x > 960:
            head1.x = 0
        if head1.y  0:
            head1.y = 600
        if head1.y > 600:
            head1.y = 0
        if head2.x  0:
            head2.x = 960
        if head2.x > 960:
            head2.x = 0
        if head2.y  0:
            head2.y = 600
        if head2.y > 600:
            head2.y = 0
        # 定義死亡標(biāo)志位
        die_flag1 = die_flag2 = False
        for body in snake_body1[1:]+snake_body2[1:]:
            if head1.x == body.x and head1.y == body.y:
                die_flag1 = True
            if head2.x == body.x and head2.y == body.y:
                die_flag2 = True
        if die_flag1 == True:
            snake_body1.clear()
        if die_flag2 == True:
            snake_body2.clear()
        # 若兩條蛇都死亡
        if len(snake_body1) == 0 and len(snake_body2) == 0:
            show_end()
        # 判斷蛇頭和食物坐標(biāo),若相等,則加分,并生成新的食物
        # 定義標(biāo)志,表明是否找到和蛇頭相等的食物
        global flag1
        global flag2
        flag1 = flag2 = 0
        # 如果蛇頭和食物重合
        for item in food_list:
            # 在蛇1沒死且蛇頭1和某一食物坐標(biāo)相等的條件下
            if len(snake_body1) != 0 and (head1.x == item.x and head1.y == item.y or head1.x == food.x and head1.y == food.y):
                flag1 = 1
                score1 += 1
                # 彈出被吃掉的這個(gè)食物
                food_list.pop(food_list.index(item))
                # 再產(chǎn)生一個(gè)食物
                food = new_food(head1)
                # 把新食物插入food_list,下一次循環(huán)中會(huì)更新繪制食物全體
                food_list.append(food)
                break
            # 在蛇2沒死的且蛇頭2和某一食物坐標(biāo)相等的條件下
            elif len(snake_body2) != 0 and head2.x == item.x and head2.y == item.y or head2.x == food.x and head2.y == food.y:
                flag2 = 1
                score2 += 1
                # 彈出被吃掉的這個(gè)食物
                food_list.pop(food_list.index(item))
                # 再產(chǎn)生一個(gè)食物
                food = new_food(head2)
                # 把新食物插入food_list,下一次循環(huán)中會(huì)更新繪制食物全體
                food_list.append(food)
                break
        # 蛇1必須沒死,否則pop會(huì)引發(fā)異常
        if len(snake_body1) != 0 and flag1 == 0:
            snake_body1.pop()
        # 蛇2必須沒死,否則pop會(huì)引發(fā)異常
        if len(snake_body2) != 0 and flag2 == 0:
            snake_body2.pop ()
        font = pygame.font.SysFont("simHei", 25)
        mode_title1 = mode_title2 = font.render('穿墻模式', False, grey)
        socre_title1 = font.render('得分: %s' % score1, False, grey)
        socre_title2 = font.render('得分: %s' % score2, False, grey)
        window.blit(mode_title1, (50, 30))
        window.blit(socre_title1, (50, 65))
        window.blit(mode_title2, (800, 30))
        window.blit(socre_title2, (800, 65))
        # 更新蛇頭蛇身和食物的數(shù)據(jù)
        pygame.display.update()
        # 通過幀率設(shè)置貪吃蛇速度
        clock.tick(8)

7.button()函數(shù),功能:實(shí)現(xiàn)按鈕樣式設(shè)計(jì)和響應(yīng)鼠標(biāo)操作:

def button(msg, x, y, w, h, ic, ac, action=None):
    # 獲取鼠標(biāo)位置
    mouse = pygame.mouse.get_pos()
    # 獲取鼠標(biāo)點(diǎn)擊情況
    click = pygame.mouse.get_pressed()
    if x + w > mouse[0] > x and y + h > mouse[1] > y:
        pygame.draw.rect(window, ac, (x, y, w, h))
        if click[0] == 1 and action != None:
            action()
    else:
        pygame.draw.rect(window, ic, (x, y, w, h))
    # 設(shè)置按鈕中的文字樣式和居中對(duì)齊
    font = pygame.font.SysFont('simHei', 20)
    smallfont = font.render(msg, True, white)
    smallrect = smallfont.get_rect()
    smallrect.center = ((x + (w / 2)), (y + (h / 2)))
    window.blit(smallfont, smallrect)

8.into_game()函數(shù),功能:實(shí)現(xiàn)游戲初始界面,選擇模式:

def into_game():
    while True:
        window.blit(init_background, (0, 0))
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit_end()
        # 設(shè)置字體
        font = pygame.font.SysFont("simHei", 50)
        # 初始界面顯示文字
        fontsurf = font.render('歡迎來到貪吃蛇大冒險(xiǎn)!', True, black)  # 文字
        fontrect = fontsurf.get_rect()
        fontrect.center = ((480), 200)
        window.blit(fontsurf, fontrect)
        button("正常模式", 370, 370, 200, 40, blue, brightred, start_game_double)
        button("可穿墻模式", 370, 420, 200, 40, violte, brightred, start_kgame_double)
        button("退出游戲", 370, 470, 200, 40, red, brightred, exit_end)
        pygame.display.update()
        clock.tick(20)

9.主函數(shù),功能:初始化參數(shù)設(shè)定,進(jìn)入游戲:

if __name__ == '__main__':
    # 定義需要用到的顏色
    white = (255, 255, 255)
    red = (200, 0, 0)
    green = (0, 128, 0)
    blue = (0, 202, 254)
    violte = (194, 8, 234)
    brightred = (255, 0, 0)
    brightgreen = (0, 255, 0)
    black = (0, 0, 0)
    grey = (129, 131, 129)
    # 設(shè)計(jì)窗口
    window = pygame.display.set_mode((960, 600))
    # 定義標(biāo)題
    pygame.display.set_caption("貪吃蛇大冒險(xiǎn)")
    # 定義背景圖片
    init_background = pygame.image.load("image/init_bgimg.jpg")
    background = pygame.image.load("image/bgimg.jpg")
    # 背景音樂
    pygame.mixer.init()
    pygame.mixer.music.load("background.mp3")
    # 創(chuàng)建時(shí)鐘
    clock = pygame.time.Clock()
    # 初始化,自檢所有模塊是否完整
    pygame.init()
    # 初始界面
    into_game()

注:其中的圖片、背景音樂需要自己找合適(尺寸要與窗口大小相適應(yīng))的,也可以參考我上傳的資源貪吃蛇雙人版源碼+圖片+音樂。

附:貪吃蛇 單人+雙人整合版源碼

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Python實(shí)現(xiàn)貪吃蛇小游戲(單人模式)
  • python貪吃蛇游戲代碼
  • Python寫的貪吃蛇游戲例子
  • 使用Python寫一個(gè)貪吃蛇游戲?qū)嵗a
  • Python 實(shí)現(xiàn) 貪吃蛇大作戰(zhàn) 代碼分享
  • Python貪吃蛇游戲編寫代碼
  • 利用python實(shí)現(xiàn)簡(jiǎn)易版的貪吃蛇游戲(面向python小白)
  • 教你一步步利用python實(shí)現(xiàn)貪吃蛇游戲
  • python實(shí)現(xiàn)貪吃蛇游戲
  • 保姆級(jí)python教程寫個(gè)貪吃蛇大冒險(xiǎn)

標(biāo)簽:銀川 三亞 呼倫貝爾 呼倫貝爾 葫蘆島 湘西 烏魯木齊 安慶

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python實(shí)現(xiàn)貪吃蛇小游戲(雙人模式)》,本文關(guān)鍵詞  Python,實(shí)現(xiàn),貪吃,蛇,小游戲,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python實(shí)現(xiàn)貪吃蛇小游戲(雙人模式)》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python實(shí)現(xiàn)貪吃蛇小游戲(雙人模式)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    精品国产伦一区二区三区观看体验| 亚洲一区视频在线| 中文字幕av一区 二区| 欧美高清一级片在线观看| 美女视频黄频大全不卡视频在线播放| 韩国v欧美v亚洲v日本v| 波多野结衣视频一区| 午夜福利三级理论电影| 一区二区三区在线观看免费视频| 免费看一级大片| 三上悠亚在线观看视频| 欧美视频精品在线| 久久在线免费观看| 一区二区三区精品在线观看| 蜜桃视频在线观看一区二区| 欧美成人三级伦在线观看| 波多野结衣喷潮| 国产欧美1区2区3区| 午夜精品爽啪视频| 精品一区二区三区久久久| 波多野吉衣在线视频| 日韩av片在线| 国产婷婷色一区二区三区 | 麻豆91精品视频| 182在线视频| 日韩欧美精品在线| 亚洲欧美日韩在线不卡| 麻豆视频一区二区| 女人黄色一级片| 国产精品麻豆网站| 老司机午夜精品| 亚洲欧美日韩偷拍| 美国黄色小视频| 国产欧美日韩精品a在线观看| 国产精品一区免费在线观看| 黄色性视频网站| 91国偷自产一区二区三区观看| 久久蜜臀精品av| 日本少妇一区二区| 国产精品熟妇一区二区三区四区| 欧美精品精品一区| 一区二区三区久久久| 黄色av网址在线观看| 亚洲精品一区二区三区精华液| 国产精品亚洲人在线观看| 国产在线一卡二卡| 亚洲一区二区偷拍精品| 国产精品三级在线观看无码| 欧美日韩国产首页| 一区二区高清免费观看影视大全| 日本在线不卡一区二区| 久久午夜国产精品| 99视频精品全部免费在线| 欧美性猛交xxxx乱大交少妇| 久久只精品国产| 成人精品国产一区二区4080| 内射一区二区三区| 亚洲国产美女搞黄色| 少妇丰满尤物大尺度写真| 国产一二三区精品| 亚洲成人av免费| 国产精品99精品无码视亚| 欧美成人r级一区二区三区| 日韩成人一级片| 在线观看免费黄色网址| 久久综合999| 91蝌蚪国产九色| 欧美日韩精品福利| 美女高潮久久久| 色婷婷av一区二区三区大白胸| 国产精品成人免费在线| 北条麻妃国产九九精品视频| 日韩一区二区不卡| 日本三级韩国三级欧美三级| 成年人二级毛片| 五月综合激情婷婷六月色窝| 欧美肥妇bbwbbw| 日日夜夜精品免费视频| a级大片在线观看| 国产午夜亚洲精品羞羞网站| 日韩大尺度视频| 国产人成亚洲第一网站在线播放 | 欧美mv日韩mv| 97aⅴ精品视频一二三区| 欧美性一二三区| 国产一区欧美二区| 亚洲伦理一区二区三区| 奇米精品一区二区三区在线观看| 人妻精品久久久久中文| 国产欧美一区二区精品忘忧草| 亚洲免费观看在线| 中文字幕亚洲区| 激情小说欧美色图| 日本一区二区三区在线不卡 | 亚洲欧美激情视频在线观看一区二区三区| 亚洲综合网在线观看| 亚洲综合色区另类av| 国产免费一区二区三区四区| 美日韩一区二区| 欧美日韩国产一级片| 99久久99精品久久久久久| 久久久影视传媒| 精品人妻一区二区免费视频| 亚洲欧美日韩中文字幕一区二区三区| 久久精品色妇熟妇丰满人妻| 美女看a上一区| 91精品免费在线观看| 国产一区二区三区久久久| 欧美精品aⅴ在线视频| av不卡在线观看| 国产精品乱人伦中文| 91视频免费在观看| 免费看欧美女人艹b| 欧美精品乱码久久久久久按摩| 99精品视频在线免费观看| 国产精品美女www爽爽爽| 蜜桃av免费在线观看| 极品销魂美女一区二区三区| 欧美成人官网二区| 我和岳m愉情xxxⅹ视频| 午夜精品福利视频网站| 欧美三日本三级三级在线播放| 青草av.久久免费一区| 4438x成人网最大色成网站| 特黄特色免费视频| 亚洲一区二区av在线| 精品视频在线看| 中文字幕在线观看91| 樱桃国产成人精品视频| 性欧美一区二区| 久久电影网站中文字幕| 久久综合丝袜日本网| 三级网站在线免费观看| 麻豆国产欧美一区二区三区| 日韩欧美一级二级三级| 丝袜美腿中文字幕| 精品一区二区在线免费观看| 久久综合九色综合97_久久久| www.av天天| 天天操天天干天天综合网| 欧美一区二区三区在| 91视视频在线观看入口直接观看www| 亚洲视频香蕉人妖| 日韩精品电影一区二区三区| 国产在线视视频有精品| 欧美国产成人精品| 91久久精品一区二区三区| 日韩精品xxx| 视频一区二区不卡| 精品国产a毛片| 污污视频网站在线免费观看| 成人永久aaa| 一区二区三区在线影院| 欧美二区在线观看| 亚洲最大的黄色网| 亚洲大片精品永久免费| 91精品蜜臀在线一区尤物| 久久久久久久久免费看无码 | 欧美精品自拍偷拍| 在线免费观看黄色小视频| 黄网站免费久久| 1024亚洲合集| 91精品国产综合久久久久久漫画 | 人人妻人人澡人人爽人人精品| 精品一区二区av| 亚洲视频图片小说| 91精品国产综合久久精品麻豆 | 色综合久久久久综合99| 国产精品91av| 美女脱光内衣内裤视频久久影院| xnxx国产精品| 色8久久精品久久久久久蜜| 国产+高潮+白浆+无码| 精品一区二区三区免费毛片爱| 亚洲天堂中文字幕| 91精品国产综合久久福利软件 | 色网综合在线观看| 艳妇乳肉亭妇荡乳av| 国产一区二区三区四| 亚洲欧美国产77777| 日韩一级免费观看| 爱爱视频免费在线观看| 怡红院一区二区| 国产69精品久久777的优势| 亚洲国产成人私人影院tom| 欧美性猛交xxxx乱大交退制版 | 亚洲午夜免费福利视频| 精品国产三级a在线观看| 日本黄色小说视频| 国产精品一区二区入口九绯色| 高清在线观看日韩| 丝袜美腿一区二区三区| 国产精品免费视频一区| 6080日韩午夜伦伦午夜伦| www.com.av| 欧美bbbbb性bbbbb视频| jiyouzz国产精品久久| 麻豆91精品视频| 亚洲国产成人精品视频| 欧美经典三级视频一区二区三区|