python实现贪吃蛇游戏源码


Posted in Python onMarch 21, 2020

本文实例为大家分享了python实现贪吃蛇的具体代码,供大家参考,具体内容如下

import pygame
import sys
import random
 
SCREEN_X=600
SCREEN_Y=600
 
class Snake(object):
 def __init__(self):
 self.direction=pygame.K_RIGHT
 self.body = []
 for i in range(5):
  self.addnode()
 
 def addnode(self):
 left, top = (0, 0)
 if self.body:
  left, top = (self.body[0].left,self.body[0].top)
 node = pygame.Rect(left,top,25,25)
 if self.direction == pygame.K_RIGHT:
  node.left += 25
 elif self.direction == pygame.K_LEFT:
  node.left -= 25
 elif self.direction == pygame.K_UP:
  node.top -= 25
 elif self.direction == pygame.K_DOWN:
  node.top += 25
 self.body.insert(0,node)
 
 def delnode(self):
 self.body.pop()
 
 def isdead(self):
 if self.body[0].x not in range(SCREEN_X):
  return True
 if self.body[0].y not in range(SCREEN_Y):
  return True
 if self.body[0] in self.body[1:]:
  print('in body')
  return True
 return False
 
 def move(self):
 self.addnode()
 self.delnode()
 
 def changeddirection(self,curkey):
 LR = [pygame.K_LEFT,pygame.K_RIGHT]
 UD = [pygame.K_DOWN,pygame.K_UP]
 if curkey in LR+UD:
  if (curkey in LR) and (self.direction in LR):
  return
  if (curkey in UD) and (self.direction in UD):
  return
  self.direction = curkey
 
class Food(object):
 def __init__(self):
 self.rect = pygame.Rect(-25, 0, 25, 25)
 
 def remove(self):
 self.rect.x = -25
 
 def set(self):
 if self.rect.x == -25:
  allpos = []
  for pos in range(25,SCREEN_X-25,25):
  allpos.append(pos)
  self.rect.left = random.choice(allpos)
  self.rect.top = random.choice(allpos)
  print(self.rect)
 
def show_text(screen,pos,text,color,font_bold = False,font_size = 60,font_italic = False):
 cur_font=pygame.font.SysFont('宋体',font_size)
 cur_font.set_bold(font_bold)
 cur_font.set_italic(font_italic)
 text_fmt = cur_font.render(text,1,color)
 screen.blit(text_fmt,pos)
 
def main():
 pygame.init()
 screen_size = (SCREEN_X,SCREEN_Y)
 screen = pygame.display.set_mode(screen_size)
 pygame.display.set_caption('Snake')
 clock=pygame.time.Clock()
 scores=0
 isdead=False
 
 snake=Snake()
 food=Food()
 
 while True:
 for event in pygame.event.get():
 
  if event.type == pygame.QUIT:
  sys.exit()
  if event.type == pygame.KEYDOWN:
  #print(event)
  #pressed_keys = pygame.key.get_pressed()
  #if pressed_keys.count(1)>1:
   # continue
  print(event.key)
  snake.changeddirection(event.key)
  if event.key == pygame.K_SPACE and isdead:
   return main()
 screen.fill((255,255,255))
 if not isdead:
  scores +=1
  snake.move()
 for rect in snake.body:
  pygame.draw.rect(screen,(20,220,39),rect,0)
 isdead=snake.isdead()
 if isdead:
  show_text(screen,(100,200),'you dead!',(227,29,18),False,100)
  show_text(screen,(150,260),'press space to try again...',(0,0,22),False,30)
 
 if food.rect == snake.body[0]:
  scores +=50
  food.remove()
  snake.addnode()
 
 food.set()
 pygame.draw.rect(screen,(136,0,21),food.rect,0)
 show_text(screen,(50,500),'Scores:'+str(scores),(223,223,223))
 pygame.display.update()
 clock.tick(5)
 
if __name__ == "__main__":
 main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
初学python的操作难点总结(新手必看篇)
Aug 03 Python
python 3.6.5 安装配置方法图文教程
Sep 18 Python
详解Python字典小结
Oct 20 Python
PyCharm+PySpark远程调试的环境配置的方法
Nov 29 Python
详解python tkinter教程-事件绑定
Mar 28 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
python3.5 cv2 获取视频特定帧生成jpg图片
Aug 28 Python
Django 解决开发自定义抛出异常的问题
May 21 Python
Python2手动安装更新pip过程实例解析
Jul 16 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 Python
python实现微信打飞机游戏
Mar 24 #Python
Python类的动态绑定实现原理
Mar 21 #Python
Python类和实例的属性机制原理详解
Mar 21 #Python
Python生成器常见问题及解决方案
Mar 21 #Python
Python作用域与名字空间原理详解
Mar 21 #Python
Python小整数对象池和字符串intern实例解析
Mar 21 #Python
Python描述符descriptor使用原理解析
Mar 21 #Python
You might like
跟我学Laravel之路由
2014/10/15 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
常见浏览器多长时间会提示“脚本运行时间过长”总结
2014/04/29 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
js实现继承的5种方式
2015/12/01 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
vue+axios全局添加请求头和参数操作
2020/07/24 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
python中requests模块的使用方法
2015/04/08 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
django中间键重定向实例方法
2019/11/10 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
法学院方阵解说词
2014/01/29 职场文书
行政人事经理职位说明书
2014/03/05 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
工作失误检讨书范文
2015/01/26 职场文书
北京故宫的导游词
2015/01/31 职场文书