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中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
Python做文本按行去重的实现方法
Oct 19 Python
Python爬虫包BeautifulSoup实例(三)
Jun 17 Python
浅谈关于Python3中venv虚拟环境
Aug 01 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
python opencv读mp4视频的实例
Dec 07 Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
Python编写nmap扫描工具
Jul 21 Python
聊聊Python String型列表求最值的问题
Jan 18 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
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
yii通过小物件生成view的方法
2016/10/08 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
用javascript动态调整iframe高度的方法
2007/03/06 Javascript
Gird事件机制初级读本
2007/03/10 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
Python编写打字训练小程序
2019/09/26 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
2013届毕业生求职信范文
2013/11/20 职场文书
酒后驾驶检讨书
2014/01/27 职场文书
酒店保安领班职务说明书
2014/03/04 职场文书
专题组织生活会方案
2014/06/15 职场文书
顶岗实习计划书
2015/01/16 职场文书
金秋助学感谢信
2015/01/21 职场文书
推广普通话主题班会
2015/08/17 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android