日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

基于pygame的贪吃蛇游戏

發布時間:2024/9/20 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于pygame的贪吃蛇游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

14/100保存草稿發布文章 博文管理我的博客退出加粗 斜體 標題 刪除線 無序 有序 待辦 引用 代碼塊 BashCC++C#CLikeCSSGoHandlebarsJavaJavaScriptKotlinMarkupObjective-CPerlPHPShellPythonRubySQLSwiftVB.NetYAML圖片 視頻 表格 超鏈接 摘要 添加摘要 導入 導出 保存 填寫標題才可自動保存 撤銷 重做 目錄 幫助?1.引言
項目選擇了做小游戲,然后去網上查找了一些相關資料,覺得貪吃蛇的制作過程對初學者而言相對要簡單,所以便用pygame這個模塊來進行制作。這個游戲研究的意義就是為了熟悉pygame開發游戲的流程,這個游戲的功能有控制鍵盤能夠操縱蛇的運行。
2.系統結構
2.1.系統總體設計

模塊-功能對照表
|模塊名稱| 程序功能|
|–Pygame模塊|-curses庫為基于文本的終端提供獨立于終端的屏幕繪制和鍵盤處理設施,顯示字符界面,以及數據庫操作-|
| random模塊 | 產生隨機數,以及隨機選擇。 |
2.2邏輯實現設計
此游戲設計和一般游戲設計流程一樣,有游戲初始化init,游戲中game,游戲結束gameove,吃到食物增加蛇身長度,游戲繼續,退出游戲可按Esc鍵。

2.3實現原理
將整個游戲區域劃分成一個個的小格子,由一組連在一起的小格子組成“蛇”,我們可以用不同的顏色來表示。用坐標來表示每一個小方格,X 軸和 Y 軸的范圍都是可以設定好的。用一個列表來存放“蛇身”的坐標,那么一條“蛇”就出來了,最后只要顯示的時候以不同的顏色表示即可。蛇的移動則是將下一格的坐標添加到列表開頭,并移除列表的最后一個元素,就相當于蛇向前移動了一格。蛇移動超出了游戲區的范圍則判斷游戲結束。
2.4邏輯圖

3.實現代碼

先安裝pygame框架:pip install pygame下一步就是導入模塊:`#!/usr/bin/env

python import pygame,sys,time,random from pygame.locals import *` *
  • 1
  • 2
  • 3

定義顏色變量*
由于我們需要用到一些顏色,而Python是不自帶的。所以我們需要定義幾個顏色。

redColour = pygame.Color(255,0,0) blackColour = pygame.Color(0,0,0) whiteColour = pygame.Color(255,255,255) greyColour = pygame.Color(150,150,150) lightColor = pygame.Color(220, 220, 220)`
  • 1
  • 2
  • 3
  • 4

定義gameover函數
所有游戲最重要的部分是循環。而GameOver函數就是跳出這個循環的條件。這里給出當蛇碰到邊界時顯示的界面。

def gameOver(playSurface):gameOverFont = pygame.font.Font('arial.ttf',72)gameOverSurf = gameOverFont.render('Game Over', True, greyColour)gameOverRect = gameOverSurf.get_rect()gameOverRect.midtop = (320, 10)playSurface.blit(gameOverSurf, gameOverRect)pygame.display.flip()time.sleep(5)pygame.quit()sys.exit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

初始設置
我們通過這幾行代碼來初始化pygame,定義窗口(邊界)的大小,窗口的標題和圖標。

`def main():# 初始化pygamepygame.init()fpsClock = pygame.time.Clock()# 創建pygame顯示層playSurface = pygame.display.set_mode((640,480))pygame.display.set_caption('Raspberry Snake')`
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

定義初始位置
我們將整個界面看成許多20*20的小方塊,每個方塊代表一個單位,蛇的長度就可以用幾個單位表示啦。這里蛇的身體用列表的形式存儲,方便之后的刪減。

snakePosition = [100,100]snakeSegments = [[100,100],[80,100],[60,100]]raspberryPosition = [300,300]raspberrySpawned = 1direction = 'right'changeDirection = direction
  • 1
  • 2
  • 3
  • 4
  • 5

鍵盤輸入判斷蛇的運動
我們需要通過鍵盤輸入的上下左右鍵或WASD來控制蛇類運動,同時加入按下Esc就退出游戲的功能。

while True:# 檢測例如按鍵等pygame事件 for event in pygame.event.get(): if event.type == QUIT:pygame.quit()sys.exit()elif event.type == KEYDOWN:# 判斷鍵盤事件 if event.key == K_RIGHT or event.key == ord('d'):changeDirection = 'right' if event.key == K_LEFT or event.key == ord('a'):changeDirection = 'left' if event.key == K_UP or event.key == ord('w'):changeDirection = 'up' if event.key == K_DOWN or event.key == ord('s'):changeDirection = 'down' if event.key == K_ESCAPE:pygame.event.post(pygame.event.Event(QUIT))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

貪吃蛇運動有一個特點:不能反方向運動

if changeDirection == 'right' and not direction == 'left':direction = changeDirection if changeDirection == 'left' and not direction == 'right':direction = changeDirection if changeDirection == 'up' and not direction == 'down':direction = changeDirection if changeDirection == 'down' and not direction == 'up':
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

接下來就是將蛇頭按照鍵盤的輸入進行轉彎操作,并將蛇頭當前的位置加入到蛇身的列表中,即吃完樹莓后蛇身增長

# 根據方向移動蛇頭的坐標 if direction == 'right':snakePosition[0] += 20 if direction == 'left':snakePosition[0] -= 20 if direction == 'up':snakePosition[1] -= 20 if direction == 'down':snakePosition[1] += 20# 增加蛇的長度snakeSegments.insert(0,list(snakePosition))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

判斷是否吃到樹莓
如果蛇頭與樹莓的方塊重合,則判定吃到樹莓,將樹莓數量清零;而沒吃到樹莓的話,蛇身就會跟著蛇頭運動,蛇身的最后一節將被踢出列表。

# 判斷是否吃掉了樹莓 if snakePosition[0] == raspberryPosition[0] and snakePosition[1] == raspberryPosition[1]:raspberrySpawned = 0 else:snakeSegments.pop()
  • 1
  • 2
  • 3
  • 4

重新生成樹莓
當樹莓數量為0時,重新生成樹。

# 如果吃掉樹莓,則重新生成樹莓 if raspberrySpawned == 0:x = random.randrange(1,32)y = random.randrange(1,24)raspberryPosition = [int(x*20),int(y*20)]raspberrySpawned = 1代碼片
  • 1
  • 2
  • 3
  • 4
  • 5

刷新顯示層
每次蛇與樹莓的運動,都會進行刷新顯示層的操作來顯示。

# 繪制pygame顯示層playSurface.fill(blackColour)for position in snakeSegments:pygame.draw.rect(playSurface,whiteColour,Rect(position[0],position[1],20,20))pygame.draw.rect(playSurface, lightColor, Rect(snakePosition[0], snakePosition[1], 20, 20))pygame.draw.rect(playSurface,redColour,Rect(raspberryPosition[0], raspberryPosition[1],20,20))pygame.display.flip()# 刷新pygame顯示層pygame.display.flip()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

判斷是否死亡
當蛇頭超出邊界時,蛇死亡,調用GameOver。

# 判斷是否死亡if snakePosition[0] > 620 or snakePosition[0] < 0:gameOver(playSurface)if snakePosition[1] > 460 or snakePosition[1] < 0:for snakeBody in snakeSegments[1:]:if snakePosition[0] == snakeBody[0] and snakePosition[1] == snakeBody[1]:gameOver(playSurface)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

控制游戲速度
為了增加難度,我們設置蛇身越長速度越快,直到達到一個上限

# 控制游戲速度if len(snakeSegments) < 40:speed = 6 * len(snakeSegments) // 4else:speed = 16fpsClock.tick(speed)
  • 1
  • 2
  • 3
  • 4
  • 5

4.實驗
用方向盤控制蛇的移動,然后通過吃掉食物來增長自身


若是觸碰到游戲邊界則游戲結束

5.總結和展望
通過這個游戲我對python簡潔編程有了更深的印象了,同樣的功能不同編程語言的代碼量不同,而python是最少的,而且簡單易用,也是第一次使用pygame進行編程,pygame相對來說比較簡單。不足的地方是剛開始學習pygame所做出來的這個貪吃蛇小游戲功能不夠完善,存在許多問題,比如蛇死亡條件之實現了一種,還有一種是蛇與自身重合時也會死亡的條件沒有實現出來,并且沒有通過吃事物增加分數的功能,還有一些背景音樂等等這些設置其實都沒有,只是做了一個簡單的貪吃蛇小游戲。所以我想以后學號pygame之后可以完善許多我這個貪吃蛇沒有做到的東西。
參考文獻:[1] 《Python編程:從入門到實踐》,本書作者Eric Matthes,譯者袁國忠,由人民郵電出版社于2016年7月出版。[2] CSDN博客

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的基于pygame的贪吃蛇游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。