最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python貪吃蛇核心功能實現(xiàn)上

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

本次做一個最簡單的貪食蛇雛形游戲,就是一個小蛇在畫面上移動,我們可以控制蛇的移動方向,但是不能吃東西,蛇不會長大。但是基礎的有了,完整版的貪食蛇還遠嗎?雙人貪食蛇不也就那么回事嗎?

先做一個簡單的,有機會再放出不那么簡單,但依舊簡陋的標準貪食蛇和雙人貪食蛇。

首先,pygam的各種配置參數(shù),直接使用之前的配置,多退少補。

import random
import time
import pygame
fps = 30
fps_clock = pygame.time.Clock()
screen_width = 640
screen_height = 480
display = pygame.display.set_mode((screen_width, screen_height), 0, 32)
pygame.display.set_caption('貪食蛇')
tile_size = 20
tile_width = 20
tile_height = 20
#橫縱間距
x_margin = 100
y_margin = 100
#列
columns = int((screen_width - 100) / 20)
#行
rows = int((screen_height - 100) / 20)
directions = ['up', 'down', 'left', 'right']
#配色RGB
white = 'white'
black = 'black'
bg_color = 'sky blue'
border_color = white
if __name__ == '__main__':
    while True:
        display.fill(bg_color)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
        pygame.display.update()
        fps_clock.tick(fps)

基本的配置函數(shù),棋盤類游戲常規(guī)操作。

運行游戲會得到一個天藍色的畫布,什么都沒有。

接下來,在畫布上畫出二維棋盤,也就是貪食蛇運動的場地。這里我們有幾種選擇,此處我選擇一種最簡單的方式,也就是整個棋盤不對應二維列表,只為貪食蛇本身創(chuàng)建一個列表,用來儲存貪食蛇的身體。

首先繪制一個大棋盤。

def draw_chest():
    for i in range(rows + 1):
        pygame.draw.line(display, border_color, (x_margin/2, y_margin/2 + i * tile_size),
                         (x_margin/2 + (columns * tile_size), y_margin/2 + i * tile_size), 2)
    for j in range(columns + 1):
        pygame.draw.line(display, border_color, (x_margin/2 + j * tile_size, y_margin/2),
                         (x_margin/2 + j * tile_size, y_margin/2 + (rows * tile_size)), 2)

然后主循環(huán)里調(diào)用,然后運行程序。

貪食蛇的運動空間已經(jīng)出現(xiàn)了。

創(chuàng)建一個列表,用來存放貪食蛇的身體。默認貪食蛇的長度為3。具體大小可以根據(jù)自己的喜歡修改,我就寫3了。

那么需要基于這兩個數(shù)值來生成蛇的身體的第一個位置。例如,我們生成的蛇的身體的第一個位置是[3][3],那么對應的在屏幕中[3][3]所對應的坐標位置,繪制一個小方塊,同時默認蛇的身體是往右延伸,那么蛇的身體參數(shù)則為[3][3],[3][4],[3][5]

考慮到讓蛇隨機出現(xiàn)在畫面中的某些地方,所以生成蛇的身體是照顧到各方,隨機數(shù)的范圍如下:

在主循壞外創(chuàng)建列表,添加身體,身體保持在畫面中央部分。

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

為繪制蛇的身體,編寫繪制函數(shù)。

def draw_snake_shape(shapes):
    for shape in shapes:
        left_position = shape[1] * tile_size + x_margin/2
        top_position = shape[0] * tile_size + y_margin/2
        # 畫出整個身體背景色
        pygame.draw.rect(display, body_color, (left_position, top_position, tile_size, tile_size))
        # 畫出內(nèi)部顏色
        pygame.draw.rect(display, inter_body_color, (left_position+4, top_position+4, tile_size-8, tile_size-8))

在主循環(huán)中調(diào)用,運行游戲,每次運行,蛇都在不同的位置,同時不會出現(xiàn)在邊緣。

接下來就是讓蛇動起來。

讓蛇動起來的核心思想就是,根據(jù)蛇當前的前進方向,增加和刪除snake_body中的坐標值。比如,下一步蛇的運動方向是up,那么確認當前up方向是合法的時候,即往上走一步不會走到邊界,或者當前正在往下走,那么,我們得出新的坐標點,加入到snake_body中,同時刪除列表最后一個數(shù)據(jù),因為當前沒有蘋果可以吃嘛。

先定義一個判斷下一個坐標點是否合法的函數(shù)。

def is_right_direction(body, x_location, y_location):
    valid_direction = False
    if 0 <= x_location <= rows-1 and 0 <= y_location <= columns - 1:
        valid_direction = True
    return valid_direction

在主循環(huán)中加入程序處理貪食蛇按照某個固定的方向移動時對于貪食蛇身體列表的操作。

首先在進入主循環(huán)前,獲取當前需要移動的方向

direction = directions[random.randint(0, 3)]
    while True:

在主循環(huán)內(nèi)部,增加代碼處理身體移動

#未按下按鍵時,默認的初識移動方向
        new_body_location = (None, None)
        match direction:
            case 'left':
                new_body_location = snake_body[0][0], snake_body[0][1] - 1
            case 'right':
                new_body_location = snake_body[0][0], snake_body[0][1] + 1
            case 'up':
                new_body_location = snake_body[0][0] - 1, snake_body[0][1]
            case 'down':
                new_body_location = snake_body[0][0] + 1, snake_body[0][1]
        snake_body.insert(0, new_body_location)
        del snake_body[-1]

此時運行程序,貪食蛇會像閃電一般快速移動到屏幕邊緣。

根本來不及截圖,因為我們的刷新率是30幀每秒,所以太快了,此時有多種解決方案,最簡單的一種是修改刷新率,比如修改為2,那么就會看到蛇緩慢移動了。非常簡單啦。也可以考慮在移動部分做定時,或者做累加延遲等等。這里我修改了fps=2。

接下來增加控制部分,這部分很簡單。

在按鍵部分設定上下左右按鍵控制方向,同時要注意,貪食蛇不能直接掉頭走。

#鍵盤控制改變貪食蛇的方向
            elif event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT and direction != 'right':
                    direction = 'left'
                elif event.key == pygame.K_RIGHT and direction != 'left':
                    direction = 'right'
                elif event.key == pygame.K_UP and direction != 'down':
                    direction = 'up'
                elif event.key == pygame.K_DOWN and direction != 'up':
                    direction = 'down'

游戲結束機制,也就是蛇碰到邊界游戲結束。

        if is_right_direction(snake_body, new_body_location[0], new_body_location[1]):
            snake_body.insert(0, new_body_location)
            del snake_body[-1]
        else:
            snake_body = []
            snake_x = random.randint(5, columns - 5)
            snake_y = random.randint(5, rows - 5)
            snake_body.append([snake_x, snake_y])
            snake_body.append([snake_x, snake_y + 1])
            snake_body.append([snake_x, snake_y + 2])

框架級別的貪食蛇制作完成了,如果再加入一個小蘋果,增加一個增加身體條件就有一個完整的貪食蛇了。再追加一個追尾機制,和一條新的蛇就可以雙人對戰(zhàn)了。

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

相關文章

  • python使用mitmproxy抓取瀏覽器請求的方法

    python使用mitmproxy抓取瀏覽器請求的方法

    今天小編就為大家分享一篇python使用mitmproxy抓取瀏覽器請求的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python函數(shù)調(diào)用,循環(huán),列表復制實例

    python函數(shù)調(diào)用,循環(huán),列表復制實例

    這篇文章主要介紹了python函數(shù)調(diào)用,循環(huán),列表復制實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 詳解Python里使用正則表達式的ASCII模式

    詳解Python里使用正則表達式的ASCII模式

    ASCII(American Standard Code for Information Interchange),是一種單字節(jié)的編碼。這篇文章主要介紹了Python里使用正則表達式的ASCII模式,需要的朋友可以參考下
    2017-11-11
  • python數(shù)據(jù)結構之棧、隊列及雙端隊列

    python數(shù)據(jù)結構之棧、隊列及雙端隊列

    在上一章的學習中,我們主要學習了怎么去衡量一個算法的好壞,比較常見的方式是使用大O記法,就是所謂的時間復雜度,這一章節(jié)我來學習基本的數(shù)據(jù)結構,如棧、隊列和雙端隊列等等。感興趣的小伙伴可以參考一下
    2021-12-12
  • Python使用pyexecjs代碼案例解析

    Python使用pyexecjs代碼案例解析

    這篇文章主要介紹了Python使用pyexecjs代碼實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • 基于python連接oracle導并出數(shù)據(jù)文件

    基于python連接oracle導并出數(shù)據(jù)文件

    這篇文章主要介紹了基于python連接oracle導并出數(shù)據(jù)文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • pytorch使用-tensor的基本操作解讀

    pytorch使用-tensor的基本操作解讀

    這篇文章主要介紹了pytorch使用-tensor的基本操作解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python爬蟲進階之Beautiful Soup庫詳解

    Python爬蟲進階之Beautiful Soup庫詳解

    這篇文章主要介紹了Python爬蟲進階之Beautiful Soup庫詳解,文中有非常詳細的代碼示例,對正在學習python爬蟲的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python matplotlib安裝和使用的完整教程

    Python matplotlib安裝和使用的完整教程

    Python Matplotlib是一個強大的數(shù)據(jù)可視化庫,它允許用戶創(chuàng)建各種類型的靜態(tài)、動態(tài)圖表和圖形,Matplotlib基于NumPy和Pandas等科學計算庫,提供了豐富的繪圖選項,本文介紹了Python matplotlib安裝和使用的完整教程,需要的朋友可以參考下
    2024-07-07
  • Python中pyCirclize包的使用教程詳解

    Python中pyCirclize包的使用教程詳解

    pyCirclize 是一個 Python 包,用于繪制環(huán)形圖,這篇文章將將提供更豐富的示例代碼,以更全面地展示 pyCirclize 包的功能和用法,感興趣的小伙伴可以了解一下
    2023-11-11

最新評論

沿河| 吴江市| 盘锦市| 林州市| 太仆寺旗| 洮南市| 丰都县| 古交市| 金溪县| 密山市| 莆田市| 长乐市| 望谟县| 巴彦县| 广宁县| 白玉县| 广安市| 红原县| 上饶县| 长汀县| 东乌珠穆沁旗| 平阴县| 阳新县| 黄山市| 天气| 云南省| 壤塘县| 凌源市| 龙门县| 文安县| 宜城市| 乌兰县| 太康县| 乐东| 宁化县| 册亨县| 香港 | 徐水县| 乌鲁木齐县| 邯郸县| 青田县|