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基础教程之tcp socket编程详解及简单实例
Feb 23 Python
对pandas中时间窗函数rolling的使用详解
Nov 28 Python
python存储16bit和32bit图像的实例
Dec 05 Python
Python matplotlib的使用并自定义colormap的方法
Dec 13 Python
Python 编程速成(推荐)
Apr 15 Python
python和c语言的主要区别总结
Jul 07 Python
python tkinter控件布局项目实例
Nov 04 Python
使用Python的datetime库处理时间(RPA流程)
Nov 24 Python
解决Pytorch 加载训练好的模型 遇到的error问题
Jan 10 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
May 16 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 Python
使用OpenCV实现人脸图像卡通化的示例代码
Jan 15 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制作新闻系统的思路
2006/10/09 PHP
php 用sock技术发送邮件的函数
2007/07/21 PHP
php error_log 函数的使用
2009/04/13 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
一个简单的javascript类定义例子
2009/09/12 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
js通过location.search来获取页面传来的参数
2014/09/11 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
js实现录音上传功能
2019/11/22 Javascript
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
Python设计模式之单例模式实例
2014/04/26 Python
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
在Python3中初学者应会的一些基本的提升效率的小技巧
2015/03/31 Python
Django框架中方法的访问和查找
2015/07/15 Python
Python用for循环实现九九乘法表
2018/05/31 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
python基于Selenium的web自动化框架
2019/07/14 Python
python3跳出一个循环的实例操作
2020/08/18 Python
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
超市营业员求职简历的自我评价
2013/10/17 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书
Python实现学生管理系统(面向对象版)
2021/06/24 Python
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis
Oracle中DBLink的详细介绍
2022/04/29 Oracle