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与Redis的连接教程
Apr 22 Python
python编程开发之类型转换convert实例分析
Nov 13 Python
Python中内置的日志模块logging用法详解
Jul 12 Python
Python的IDEL增加清屏功能实例
Jun 19 Python
python中使用psutil查看内存占用的情况
Jun 11 Python
python远程连接服务器MySQL数据库
Jul 02 Python
python如何获取当前文件夹下所有文件名详解
Jan 25 Python
节日快乐! Python画一棵圣诞树送给你
Dec 24 Python
简单了解python shutil模块原理及使用方法
Apr 28 Python
Python3-异步进程回调函数(callback())介绍
May 02 Python
Python爬虫如何破解JS加密的Cookie
Nov 19 Python
pytorch实现线性回归以及多元回归
Apr 11 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中使用Oracle数据库(4)
2006/10/09 PHP
几种显示数据的方法的比较
2006/10/09 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
PHP+APACHE实现网址伪静态
2015/02/22 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
jQuery修改class属性和CSS样式整理
2015/01/30 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
Angular value与ngValue区别详解
2019/11/27 Javascript
vue实现购物车加减
2020/05/30 Javascript
Python开发编码规范
2006/09/08 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
最大K个数问题的Python版解法总结
2016/06/16 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
Python configparser模块操作代码实例
2020/06/08 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
企业授权委托书范本
2014/09/22 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS