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使用mysql数据库示例代码
May 21 Python
关于python的list相关知识(推荐)
Aug 30 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
python3 写一个WAV音频文件播放器的代码
Sep 27 Python
Python 线程池用法简单示例
Oct 02 Python
python实现广度优先搜索过程解析
Oct 19 Python
python实现通过队列完成进程间的多任务功能示例
Oct 28 Python
Python常用模块logging——日志输出功能(示例代码)
Nov 20 Python
解决numpy数组互换两行及赋值的问题
Apr 17 Python
教你使用一行Python代码玩遍童年的小游戏
Aug 23 Python
C3 线性化算法与 MRO之Python中的多继承
Oct 05 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
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
js实现控制文件拖拽并获取拖拽内容功能
2018/02/17 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
JavaScript实现网页跨年倒计时
2020/12/02 Javascript
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
Python实现字符串匹配算法代码示例
2017/12/05 Python
python模拟事件触发机制详解
2018/01/19 Python
python中的&&及||的实现示例
2019/08/07 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
sort命令的作用和用法
2013/08/25 面试题
传播学专业毕业生自荐信
2013/11/04 职场文书
七年级英语教学反思
2014/01/15 职场文书
节约粮食标语
2014/06/18 职场文书
干部个人考察材料
2014/12/24 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
JavaScript原型链详解
2021/11/07 Javascript
ICOM R71E和R72E图文对比解说
2022/04/07 无线电
JS实现九宫格拼图游戏
2022/06/28 Javascript