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()
#蛇节点队列
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)

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

  1. 趣学python3(26)-pygame-蛇身运动

    import sys, pygame import random from collections import deque pygame.init() #code:刘兴 size = width, ...

  2. 趣学python3(21)-pygame-surface位置及角色移动

    import sys, pygameimport random#code:刘兴pygame.init()size = width, height = 320, 240black = 0, 0, 0sn ...

  3. 趣学python3(10)-函数注释方法

    函数注释方法(Python3.5中引入). def add(x1:str,x2:str)->str:return x1 + x2 print(add(15,32)) print(add('abc ...

  4. 趣学python3(45)--调用C库-加解密

    cryptography库既包括高级规则,也包括普通密码算法(如对称密码.消息摘要和关键派生函数)的低级接口. $ pip install cryptography 例如,用密码学的高层对称加密方式加 ...

  5. 趣学python3(40)--TCP服务器和客户端(socketserver类)

    #!/usr/bin/env python3import socket import sysHOST="localhost" PORT=21200 ADDR=(HOST,PORT) ...

  6. 趣学python3(35)-Newton迭代法解一元方程

    牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法. 正割法避 ...

  7. 趣学python3(32)-enumerate,zip

    返回枚举对象.iterable必须是序列.迭代器或其他支持迭代的对象.enumerate()返回的迭代器的 next() 方法返回一个元组,该元组包含一个计数(从开始时默认为0)和在iterable上 ...

  8. 趣学python3(30)-字典

    s1={"名字":"张三","年龄":"25","特长":["绘画"," ...

  9. 趣学python3(29)-集合set

    mysets=set([]) mynums=[11,12,13,11,12,13] y=set([11,13,18]) for num in mynums:mysets.add(num) print( ...

最新文章

  1. 微信卡券 - 微信公众平台 整理笔记
  2. ubuntu设置静态ip
  3. 面试精讲之面试考点及大厂真题 - 分布式专栏 13项目中为什么要使用消息队列
  4. webpack静态资源地址注入html,Webpack4+ 多入口程序构建
  5. [Go] 通过 17 个简短代码片段,切底弄懂 channel 基础
  6. 电脑故障检测软件_硬核科普—常用电脑检测软件手把手教学!
  7. 2018北邮计算机考研分数线,2018年北京邮电大学软件学院考研复试分数线
  8. 文字在div中的垂直居中问题 div在页面中的水平垂直居中问题 vertical-align ??????
  9. mysql数据库中修改错别字_MySQL 8.0.23 更新分享-爱可生
  10. fatal error: openssl/sha.h: No such file or directory
  11. 状态压缩dp(状压dp)
  12. 越南无线网dns服务器设置,越南dns 服务器地址
  13. 旧版微信支付文档链接
  14. java网络爬虫模拟登录案例教学2
  15. matlab 相位解旋绕,相位解缠绕方法-南京航空航天大学学报.PDF
  16. PS进阶篇——如何PS软件给图片部分位置打马赛克(四)
  17. Ubuntu安装Source Insight导入Android源码并设置仿IDEA主题Darcula
  18. 世界上第一个bug的发现者——被誉为“COBOL 之母”的葛丽丝 · 霍普。
  19. 危机公关中有哪些经典的失败案例?
  20. 2018年网易实习生笔试题集合之安置路灯

热门文章

  1. 【代码笔记】iOS-removeFromSuper
  2. js流程控制题——如何实现一个LazyMan
  3. LINUX ORACLE 启动与关闭
  4. (转)Virtual PC 2007虚拟网络设置
  5. Android测试(二)——drozer使用
  6. POJ2142-The Balance【扩欧】
  7. Node.js HTTPS
  8. JavaScript对象和数组
  9. Js获取地址栏参数值
  10. ubuntu安装SSH2