<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
目前基本上軟測會用到的工具或者第三方庫都已經被寫完,本著不要逮著一隻羊進行薅羊毛原則,換個賽道,這次就使用pygame庫寫個簡單的貪吃蛇吧,當做熟悉python練手也是不錯的。
使用pip install pygame進入安裝,安裝成功後匯入所需模組:
import pygame,sys,random from pygame.locals import *
其中sys為要在後續中使用它的退出程式機制所以在這裡需要匯入。
#初始化pygame庫 pygame.init()
在用pygame時,初始化庫是必須的,對應後面的退出程式碼,這兩個是一對的。
#初始化一個遊戲介面 DISPLAY=pygame.display.set_mode((800,800)) #設定遊戲視窗標題 pygame.display.set_caption('貪吃蛇')
在寫完以上程式碼後,點選執行是會有一閃而過的介面,這是正常的,因為沒有任何東西在執行。
#定義一個變數控制遊戲速度 FPSCLOCK=pygame.time.Clock() #定義顏色 BLACK=pygame.Color(0,0,0) WHITE=pygame.Color(255,255,255) RED=pygame.Color(255,0,0) # 定義蛇頭初始位置 snake_Head=[100,100] # 定義一個蛇初始長度,因為介面都是20*20所以長度都是減20 snake_Body=[[80,100], [60,100]] # # 蛇初始方向 direction="right" # 定義改變方向的變數,按鍵 changeDirection = direction #定義初始食物位置 food_Postion = [300,300] # 定義食物狀態,0表示被吃,1表示沒有被吃 food_Total = 1
以上都是在定義後續會用到的引數。
#繪製貪吃蛇 def drawSnake(snake_Body): for i in snake_Body: pygame.draw.rect(DISPLAY,WHITE,Rect(i[0],i[1],20,20)) #繪製食物位置 def drawFood(food_Postion): pygame.draw.rect(DISPLAY,RED,Rect(food_Postion[0],food_Postion[1],20,20))
上面的pygame.draw.rect(DISPLAY,RED,Rect(food_Postion[0],food_Postion[1],20,20)) draw是pygame的繪製模組,rect中DISPLAY是在我們設定的遊戲介面上繪製顏色、所繪製矩形的區域、矩形的寬度和高度。
def gameover(): #退出pygame pygame.quit() #退出程式 sys.exit()
這裡設定的退出與上文中的pygame.init() 對應。
game_flag=True while game_flag: #渲染底色 DISPLAY.fill(BLACK) #畫出貪吃蛇 drawSnake(snake_Body) #畫出食物位置 drawFood(food_Postion)
這裡將背景設定成了黑色,與定義顏色中的設定對應,將蛇與食物的位置也與上文中對應 。
#增加遊戲速度 game_speed=1+len(snake_Body)//3 #重新整理顯示層,貪吃蛇與食物每次移動,都會重新整理顯示層 pygame.display.flip() FPSCLOCK.tick(game_speed) for event in pygame.event.get(): if event.type==QUIT: pygame.quit() sys.exit()
這裡規定了遊戲的速度,與後續吃到食物後的移速增加。
elif event.type == KEYDOWN: # 如果是右箭頭或者是d,蛇向右移動 if event.key == K_RIGHT or event.key == K_d: changeDirection = 'right' # 如果是做箭頭或者是a,蛇向左移動 if event.key == K_LEFT or event.key == K_a: changeDirection = 'left' if event.key == K_UP or event.key == K_w: changeDirection = 'up' if event.key == K_DOWN or event.key == K_s: changeDirection = 'down' # 點選esc,退出 if event.key == KSCAN_ESCAPE: pygame.event.post(pygame.event.Event(QUIT)) # 確認方向,判斷是否輸入了反方向 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': direction = changeDirection #根據方向移動蛇頭 if direction=='right': snake_Head[0]+=20 if direction=='left': snake_Head[0]-=20 if direction=='up': snake_Head[1]-=20 if direction=='down': snake_Head[1]+=20
注意這裡引號裡面的單詞要與蛇初始方向的單詞一致,不然在執行時會出問題 if changeDirection == 'right' and not direction == 'left': 意思是可以使用“→”或者“D”進行右的移動,下面也是 if changeDirection == 'right' and not direction == 'left':意思是如果在右行走的時候按“A”或者“←”是沒有效果的,下面也是 if direction=='right':snake_Head[0]+=20 意思是點選“→”或者“D”向右移動一格,因為格子是20*20的所以一格是20
#增加蛇的長度 snake_Body.insert(0,list(snake_Head)) #判斷是否吃到食物 if snake_Head[0] == food_Postion[0] and snake_Head[1] == food_Postion[1]: food_Total = 0 else: snake_Body.pop()
snake_Body.pop()意思是如果沒有吃到就不再新增加食物,如果沒有這句程式碼,會導致蛇沒有吃到食物也在增加長度。
if food_Total == 0: x = random.randrange(1, 32) y = random.randrange(1, 24) food_Postion = [int(x * 20), int(y * 20)] food_Total = 1
這裡的意思為如果食物被吃了,狀態為0的話,就隨機地點生成一個。
if snake_Head[0] > 800 or snake_Head[0] < 0: gameover() elif snake_Head[0] > 800 or snake_Head[0] < 0: gameover() # 如果碰到自己 for body in snake_Body[1:]: if snake_Head[0] == body[0] and snake_Head[1] == body[1]: gameover()
if snake_Head[0] > 800 or snake_Head[0] < 0:意思為碰到邊界遊戲退出,800是全面設定的介面大小
import pygame,sys,random from pygame.locals import * #初始化pygame庫 pygame.init() #初始化一個遊戲介面 DISPLAY=pygame.display.set_mode((800,800)) #設定遊戲視窗標題 pygame.display.set_caption('貪吃蛇') #定義一個變數控制遊戲速度 FPSCLOCK=pygame.time.Clock() #定義顏色 BLACK=pygame.Color(0,0,0) WHITE=pygame.Color(255,255,255) RED=pygame.Color(255,0,0) # 定義蛇頭初始位置 snake_Head=[100,100] # 定義一個蛇初始長度,因為介面都是20*20所以長度都是減20 snake_Body=[[80,100], [60,100],[40,100]] # # 蛇初始方向 direction="right" # 定義改變方向的變數,按鍵 changeDirection = direction #定義初始食物位置 food_Postion = [300,300] # 定義食物狀態,0表示被吃,1表示沒有被吃 food_Total = 1 #繪製貪吃蛇 def drawSnake(snake_Body): for i in snake_Body: pygame.draw.rect(DISPLAY,WHITE,Rect(i[0],i[1],20,20)) #繪製食物位置 def drawFood(food_Postion): pygame.draw.rect(DISPLAY,RED,Rect(food_Postion[0],food_Postion[1],20,20)) def gameover(): #退出pygame pygame.quit() #退出程式 sys.exit() game_flag=True while game_flag: #渲染底色 DISPLAY.fill(BLACK) #畫出貪吃蛇 drawSnake(snake_Body) #畫出食物位置 drawFood(food_Postion) #增加遊戲速度 game_speed=1+len(snake_Body)//3 #重新整理顯示層,貪吃蛇與食物每次移動,都會重新整理顯示層 pygame.display.flip() FPSCLOCK.tick(game_speed) for event in pygame.event.get(): if event.type==QUIT: pygame.quit() sys.exit() elif event.type == KEYDOWN: # 如果是右箭頭或者是d,蛇向右移動 if event.key == K_RIGHT or event.key == K_d: changeDirection = 'right' # 如果是做箭頭或者是a,蛇向左移動 if event.key == K_LEFT or event.key == K_a: changeDirection = 'left' if event.key == K_UP or event.key == K_w: changeDirection = 'up' if event.key == K_DOWN or event.key == K_s: changeDirection = 'down' # 點選esc,退出 if event.key == KSCAN_ESCAPE: pygame.event.post(pygame.event.Event(QUIT)) # 確認方向,判斷是否輸入了反方向 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': direction = changeDirection #根據方向移動蛇頭 if direction=='right': snake_Head[0]+=20 if direction=='left': snake_Head[0]-=20 if direction=='up': snake_Head[1]-=20 if direction=='down': snake_Head[1]+=20 #增加蛇的長度 snake_Body.insert(0,list(snake_Head)) #判斷是否吃到食物 if snake_Head[0] == food_Postion[0] and snake_Head[1] == food_Postion[1]: food_Total = 0 else: snake_Body.pop() if food_Total == 0: x = random.randrange(1, 32) y = random.randrange(1, 24) food_Postion = [int(x * 20), int(y * 20)] food_Total = 1 if snake_Head[0] > 800 or snake_Head[0] < 0: gameover() elif snake_Head[0] > 800 or snake_Head[0] < 0: gameover() # 如果碰到自己 for body in snake_Body[1:]: if snake_Head[0] == body[0] and snake_Head[1] == body[1]: gameover()
到此這篇關於教你用Pygame製作簡單的貪吃蛇遊戲的文章就介紹到這了,更多相關Pygame貪吃蛇遊戲內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45