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实现爬取知乎神回复简单爬虫代码分享
Jan 04 Python
Python基于递归实现电话号码映射功能示例
Apr 13 Python
django 修改server端口号的方法
May 14 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
pygame实现雷电游戏雏形开发
Nov 20 Python
Python字典循环添加一键多值的用法实例
Jan 20 Python
Ubuntu下Anaconda和Pycharm配置方法详解
Jun 14 Python
python Kmeans算法原理深入解析
Aug 23 Python
python kafka 多线程消费者&手动提交实例
Dec 21 Python
Python3打包exe代码2种方法实例解析
Feb 17 Python
Python使用20行代码实现微信聊天机器人
Jun 05 Python
Pycharm新手使用教程(图文详解)
Sep 17 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实时显示输出
2008/10/02 PHP
php 日期时间处理函数小结
2009/12/18 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
js实现的网页颜色代码表全集
2007/07/17 Javascript
javascript 闭包疑问
2010/12/30 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
Bootstrap Table使用整理(一)
2017/06/09 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
10个经典的网页鼠标特效代码
2018/01/09 Javascript
详解如何实现一个简单的 vuex
2018/02/10 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python中除法使用的注意事项
2014/08/21 Python
mac安装pytorch及系统的numpy更新方法
2018/07/26 Python
python实现随机梯度下降法
2020/03/24 Python
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
比利时香水网上商店:NOTINO
2018/03/28 全球购物
中科前程Java笔试题
2016/11/20 面试题
电脑租赁公司创业计划书
2014/01/08 职场文书
贫困证明怎么写
2015/06/16 职场文书
员工担保书范本
2015/09/22 职场文书
乡镇团代会开幕词
2016/03/04 职场文书
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL