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 Tkinter GUI编程入门介绍
Mar 10 Python
把MySQL表结构映射为Python中的对象的教程
Apr 07 Python
在Python的Flask框架中实现全文搜索功能
Apr 20 Python
Python编程判断一个正整数是否为素数的方法
Apr 14 Python
django静态文件加载的方法
May 20 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
python中强大的format函数实例详解
Dec 05 Python
python输出电脑上所有的串口名的方法
Jul 02 Python
python flask搭建web应用教程
Nov 19 Python
pycharm快捷键汇总
Feb 14 Python
浅析python标准库中的glob
Mar 13 Python
Prometheus开发中间件Exporter过程详解
Nov 30 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
第十四节--命名空间
2006/11/16 PHP
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
php遍历CSV类实例
2015/04/14 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
js保存当前路径(cookies记录)
2010/12/14 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
实现web打印的各种方法介绍及实现代码
2013/01/09 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
2018/01/03 Javascript
layui弹出层按钮提交iframe表单的方法
2018/08/20 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
Element中Slider滑块的具体使用
2020/07/29 Javascript
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
Python随机读取文件实现实例
2017/05/25 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
python占位符输入方式实例
2019/05/27 Python
10款最好的Python开发编辑器
2019/07/03 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
数据库专业英语
2012/11/30 面试题
一道Delphi面试题
2016/10/28 面试题
煤矿安全生产标语
2014/06/06 职场文书
最美孝心少年事迹材料
2014/08/15 职场文书
邓小平理论心得体会
2014/09/09 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python