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 相关文章推荐
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
Python中集合的内建函数和内建方法学习教程
Aug 19 Python
Python基础教程之利用期物处理并发
Mar 29 Python
numpy matrix和array的乘和加实例
Jun 28 Python
设置python3为默认python的方法
Oct 31 Python
Python中一些深不见底的“坑”
Jun 12 Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 Python
基于Python2、Python3中reload()的不同用法介绍
Aug 12 Python
检测tensorflow是否使用gpu进行计算的方式
Feb 03 Python
python实现扫雷小游戏
Apr 24 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 Python
利用Python如何画一颗心、小人发射爱心
Feb 21 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静态文件生成类实例分析
2015/01/03 PHP
php读取csc文件并输出
2015/05/21 PHP
使用XHProf查找PHP性能瓶颈的实例
2017/12/13 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
node.js实现为PDF添加水印的示例代码
2018/12/05 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
vue实现简单图片上传
2020/06/30 Javascript
vue prop传值类型检验方式
2020/07/30 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
[00:27]DOTA2次级职业联赛 - Lilith战队宣传片
2014/12/01 DOTA
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
python学习之编写查询ip程序
2016/02/27 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
python实现抠图给证件照换背景源码
2019/08/20 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
广告学专业毕业生自荐信
2013/09/24 职场文书
影视制作岗位职责
2013/12/04 职场文书
学校安全工作汇报材料
2014/08/16 职场文书
教师个人年度总结
2015/02/11 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
优秀员工演讲稿
2019/06/21 职场文书
CocosCreator ScrollView优化系列之分帧加载
2021/04/14 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python