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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

趣学python3(28)-pygame-蛇身随机运动(可gameover )

發(fā)布時間:2025/3/12 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 趣学python3(28)-pygame-蛇身随机运动(可gameover ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
import sys, pygame import random from collections import deque import numpy as np import copydef getPositionFromMap(mapPos):return (mapPos[0]*snakeNodeW,mapPos[1]*snakeNodeH)pygame.init() #code:劉興 snakeLen=6 size = width, height = 500, 500 black = 0, 0, 0gameMapSize=(50,50) #gamemap gameMap=np.zeros(gameMapSize,dtype=np.int16) screen = pygame.display.set_mode(size) #snake1node: snakeNodeW=int(width/gameMapSize[0]) snakeNodeH=int(height/gameMapSize[1]) snakeNodeSize=(snakeNodeW,snakeNodeH) snakeNodeImage = pygame.image.load("snake1.png") snakeNode = pygame.transform.scale(snakeNodeImage,snakeNodeSize) snakeNodeRect = snakeNode.get_rect() #蛇節(jié)點隊列 snakeNodeDeque=deque([]) fpsClock = pygame.time.Clock() #mappos nowNodeMapPos=[gameMapSize[0]//2,gameMapSize[1]//2] #nowsnakenode nowSnakeNode=snakeNode nowSnakeNodeRect=copy.deepcopy(snakeNodeRect) nowNodePos=getPositionFromMap(nowNodeMapPos) nowSnakeNodeRect.x=nowNodePos[0] nowSnakeNodeRect.y=nowNodePos[1] gameMap[tuple(nowNodeMapPos)]=1 #snakedeque snakeNodeDeque.append((nowSnakeNode,nowSnakeNodeRect,nowNodeMapPos))print(nowNodeMapPos)while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()runDirection=random.randint(1,4)#left,right,up,downisContiune=TruenewNodeMapPos=copy.deepcopy(nowNodeMapPos)for i in range(5): if runDirection==1:oldNodeMapPos=copy.deepcopy(nowNodeMapPos)newNodeMapPos[0]=nowNodeMapPos[0]-1if newNodeMapPos[0]<0:isContiune=TruenewNodeMapPos=oldNodeMapPoselif gameMap[tuple(newNodeMapPos)]==0:isContiune=Falseelif runDirection==2 :oldNodeMapPos=copy.deepcopy(nowNodeMapPos)newNodeMapPos[0]=nowNodeMapPos[0]+1if newNodeMapPos[0]>=gameMapSize[0]:isContiune=TruenewNodeMapPos=oldNodeMapPoselif gameMap[tuple(newNodeMapPos)]==0:isContiune=False elif runDirection==3 :oldNodeMapPos=copy.deepcopy(nowNodeMapPos)newNodeMapPos[1]=nowNodeMapPos[1]-1if newNodeMapPos[1]<0 :isContiune=TruenewNodeMapPos=oldNodeMapPoselif gameMap[tuple(newNodeMapPos)]==0:isContiune=False elif runDirection==4 :oldNodeMapPos=copy.deepcopy(nowNodeMapPos)newNodeMapPos[1]=nowNodeMapPos[1]+1 if newNodeMapPos[1]>=gameMapSize[1]:isContiune=TruenewNodeMapPos=oldNodeMapPoselif gameMap[tuple(newNodeMapPos)]==0:isContiune=False if not isContiune:print("===")print(nowNodeMapPos)print(newNodeMapPos)print("===") breakelse:print(f"前方受阻,第{i}次嘗試改變方向...")runDirection=i if isContiune: print("game over")pygame.quit()sys.exit()snakeNodeHeadNewRect= copy.deepcopy(nowSnakeNodeRect) newNodePos=getPositionFromMap(newNodeMapPos)snakeNodeHeadNewRect.x=newNodePos[0]snakeNodeHeadNewRect.y=newNodePos[1]snakeNodeHeadNew =nowSnakeNodesnakeNodeDeque.append((snakeNodeHeadNew,snakeNodeHeadNewRect,newNodeMapPos))gameMap[tuple(newNodeMapPos)]=1 nowNodeMapPos=copy.deepcopy(newNodeMapPos)nowSnakeLen=len(snakeNodeDeque) if nowSnakeLen>snakeLen: snakeNodeAbandon=snakeNodeDeque.popleft()snakeNodeAbandonPos=snakeNodeAbandon[2]print(f"---{snakeNodeAbandonPos}")print(snakeNodeDeque)gameMap[tuple(snakeNodeAbandonPos)]=0del snakeNodeAbandonelse:print(f"@@@{nowSnakeLen}@@@")screen.fill(black) for snakeNodeData in snakeNodeDeque:screen.blit(snakeNodeData[0],snakeNodeData[1])pygame.display.update()fpsClock.tick(5)

總結(jié)

以上是生活随笔為你收集整理的趣学python3(28)-pygame-蛇身随机运动(可gameover )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。