python实现贪吃蛇小游戏


Posted in Python onMarch 21, 2020

关于编写游戏,是博主非常向往的东西(博主喜爱游戏),编写游戏得一步一步的走!今天我简单的编写一下非常经典的游戏贪吃蛇!!!!

效果图:

python实现贪吃蛇小游戏

首先引入pygame模块

pip install pygame

关于编写贪吃蛇有如下几个步骤!依次思考

1、设置背景大小,即游戏框大小,---像素(px)

2、设置颜色,蛇的颜色,背景颜色,豆子的颜色

#pygame游戏库,sys操控python运行的环境
import pygame,sys,random
#这个模块包含所有pygame所使用的常亮
from pygame.locals import *
#1,定义颜色变量
#0-255 0黑色 255白色
redColor = pygame.Color(255,0,0)
#背景为黑色
blackColor = pygame.Color(0,0,0)
#贪吃蛇为白色
whiteColor = pygame.Color(255,255,255)

3、设置蛇的初始位置和长度,豆子的初始位置及被吃后随机出现的位置(如下),及蛇的速度

4、设置按键,控制蛇的上下左右

5、设置蛇通过与豆子的位置重合判断是否吃了豆子,此时蛇长度加一,豆子消失同时随机出现

6、设置开始函数(1,,3,4,5都可以设置在开始函数里),结束函数,并判断死亡方式,及游戏结束方式(直接退出,或者游戏结束)

def main():
 #初始化pygame
 pygame.init()
 #定义一个变量来控制速度
 fpsClock=pygame.time.Clock()
 #创建pygame显示层,创建一个界面
 playsurface=pygame.display.set_mode((640,480))
 pygame.display.set_caption('贪吃蛇')
 #初始化变量
 #贪吃蛇初始坐标位置 (先以100,100为基准)
 snakePosition = [100,100]
 #初始化贪吃蛇的长度列表中有个元素就代表有几段身体
 snakeBody = [[100,100],[80,100],[60,100]]
 #初始化目标方向额位置
 targetPosition = [300,300]
 #目标方块的标记 目的:判断是否吃掉了这个目标方块1 就是没有吃 0就是吃掉
 targetflag = 1
 #初始化方向 --》往右
 direction = 'right'
 #定义一个方向变量(人为控制 按键)
 changeDirection = direction
def gameover(): #游戏结束
 pygame.quit()
 sys.exit()

关于游戏运行可以当做一个时间,通过不断地循环是蛇不断地前进(设置按键,凭个人喜好按键)

while True:
 
  for event in pygame.event.get(): #从队列中获取事件
   if event.type == QUIT:
    pygame.quit()
    sys.exit()
   elif event.type == KEYDOWN:
    if event.key == K_d:
     changeDirection = 'right'
    if event.key == K_a:
     changeDirection = 'left'
    if event.key ==K_w:
     changeDirection = 'up'
    if event.key ==K_s:
     changeDirection = 'down'
     #对应键盘上的esc文件
    if event.key == K_ESCAPE:
     pygame.event.post(pygame.event.Event(QUIT))

确定方向!当蛇在运行时不可掉头!不可前后,左后!

#确定方向
  if changeDirection =='left' and not direction =='right':
   direction = changeDirection
  if changeDirection =='right' and not direction =='left':
   direction = changeDirection
  if changeDirection =='up' and not direction =='down':
   direction = changeDirection
  if changeDirection =='down' and not direction =='up':
   direction = changeDirection

这里通过像素的加减确定蛇头的移动向上或向下加减20px相当于向上下移动一步

#根据方向移动蛇头
  if direction =='right':
   snakePosition[0] +=20
  if direction =='left':
   snakePosition[0] -=20
  if direction =='up':
   snakePosition[1] -=20
  if direction =='down':
   snakePosition[1] +=20
  #增加蛇的长度
  snakeBody.insert(0,list(snakePosition))
  #如果贪吃蛇和目标方块的位置重合
  if snakePosition[0] == targetPosition[0] and snakePosition[1] ==targetPosition[1]:
   targetflag= 0
  else:
   snakeBody.pop()
  if targetflag ==0:
   x = random.randrange(1,32)
   y = random.randrange(1,24)
   targetPosition = [int(x*20),int(y*20)]
   targetflag =1
  #填充背景颜色
  playsurface.fill(blackColor)

设置蛇与豆子的颜色长宽

for position in snakeBody:
   #第一个参数serface指定一个serface编辑区,在这个区域内绘制
   #第二个参数color:颜色
   #第三个参数:rect:返回一个矩形(xy),(width,height)
   #第四个参数:width:表示线条的粗细 width0填充 实心
   #化蛇
   pygame.draw.rect(playsurface,redColor,Rect(position[0],position[1],20,20))
   pygame.draw.rect(playsurface, whiteColor, Rect(targetPosition[0], targetPosition[1], 20, 20))

将上面的所作为显示到桌面,通过下面的方法实现

pygame.display.flip()

判断游戏结束

if snakePosition[0] > 620 or snakePosition[0] < 0:
   gameover()
  elif snakePosition[1] >460 or snakePosition[1] <0:
   gameover()
  #控制游戏速度
  fpsClock.tick(2)

基本的贪吃蛇步骤如上,如果要是添加得分或者开始和结束界面都凭自身能力了,大佬们肯定是洒洒水了

以下是完整代码

#pygame游戏库,sys操控python运行的环境
import pygame,sys,random
#这个模块包含所有pygame所使用的常亮
from pygame.locals import *
#1,定义颜色变量
#0-255 0黑色 255白色
redColor = pygame.Color(255,0,0)
#背景为黑色
blackColor = pygame.Color(0,0,0)
#贪吃蛇为白色
whiteColor = pygame.Color(255,255,255)
 
 
#定义游戏结束的函数
def gameover():
 pygame.quit()
 sys.exit()
#定义main函数--》定义我们的入口函数
def main():
 #初始化pygame
 pygame.init()
 #定义一个变量来控制速度
 fpsClock=pygame.time.Clock()
 #创建pygame显示层,创建一个界面
 playsurface=pygame.display.set_mode((640,480))
 pygame.display.set_caption('贪吃蛇')
 #初始化变量
 #贪吃蛇初始坐标位置 (先以100,100为基准)
 snakePosition = [100,100]
 #初始化贪吃蛇的长度列表中有个元素就代表有几段身体
 snakeBody = [[100,100],[80,100],[60,100]]
 #初始化目标方向额位置
 targetPosition = [300,300]
 #目标方块的标记 目的:判断是否吃掉了这个目标方块1 就是没有吃 0就是吃掉
 targetflag = 1
 #初始化方向 --》往右
 direction = 'right'
 #定义一个方向变量(人为控制 按键)
 changeDirection = direction
 while True:
 
  for event in pygame.event.get(): #从队列中获取事件
   if event.type == QUIT:
    pygame.quit()
    sys.exit()
   elif event.type == KEYDOWN:
    if event.key == K_d:
     changeDirection = 'right'
    if event.key == K_a:
     changeDirection = 'left'
    if event.key ==K_w:
     changeDirection = 'up'
    if event.key ==K_s:
     changeDirection = 'down'
     #对应键盘上的esc文件
    if event.key == K_ESCAPE:
     pygame.event.post(pygame.event.Event(QUIT))
 
  #确定方向
  if changeDirection =='left' and not direction =='right':
   direction = changeDirection
  if changeDirection =='right' and not direction =='left':
   direction = changeDirection
  if changeDirection =='up' and not direction =='down':
   direction = changeDirection
  if changeDirection =='down' and not direction =='up':
   direction = changeDirection
 
  #根据方向移动蛇头
  if direction =='right':
   snakePosition[0] +=20
  if direction =='left':
   snakePosition[0] -=20
  if direction =='up':
   snakePosition[1] -=20
  if direction =='down':
   snakePosition[1] +=20
  #增加蛇的长度
  snakeBody.insert(0,list(snakePosition))
  #如果贪吃蛇和目标方块的位置重合
  if snakePosition[0] == targetPosition[0] and snakePosition[1] ==targetPosition[1]:
   targetflag= 0
  else:
   snakeBody.pop()
  if targetflag ==0:
   x = random.randrange(1,32)
   y = random.randrange(1,24)
   targetPosition = [int(x*20),int(y*20)]
   targetflag =1
  #填充背景颜色
  playsurface.fill(blackColor)
  for position in snakeBody:
   #第一个参数serface指定一个serface编辑区,在这个区域内绘制
   #第二个参数color:颜色
   #第三个参数:rect:返回一个矩形(xy),(width,height)
   #第四个参数:width:表示线条的粗细 width0填充 实心
   #化蛇
   pygame.draw.rect(playsurface,redColor,Rect(position[0],position[1],20,20))
   pygame.draw.rect(playsurface, whiteColor, Rect(targetPosition[0], targetPosition[1], 20, 20))
 
  #更新显示到屏幕表面
  pygame.display.flip()
  #判断是否游戏结束
  if snakePosition[0] > 620 or snakePosition[0] < 0:
   gameover()
  elif snakePosition[1] >460 or snakePosition[1] <0:
   gameover()
  #控制游戏速度
  fpsClock.tick(2)
# 启动入口函数
if __name__ =='__main__':
 main()

运行结果:

python实现贪吃蛇小游戏

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用python实现扫描端口示例
Mar 29 Python
Python随机读取文件实现实例
May 25 Python
python的变量与赋值详细分析
Nov 08 Python
python pycurl验证basic和digest认证的方法
May 02 Python
python 高效去重复 支持GB级别大文件的示例代码
Nov 08 Python
django 实现编写控制登录和访问权限控制的中间件方法
Jan 15 Python
python集合是否可变总结
Jun 20 Python
Python 实现敏感目录扫描的示例代码
May 21 Python
Python中内建模块collections如何使用
May 27 Python
python怎么判断模块安装完成
Jun 19 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
Feb 23 Python
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
May 28 Python
将python图片转为二进制文本的实例
Jan 24 #Python
python实现五子棋小游戏
Mar 25 #Python
PyQt5实现五子棋游戏(人机对弈)
Mar 24 #Python
Python制作exe文件简单流程
Jan 24 #Python
PyQt5实现类似别踩白块游戏
Jan 24 #Python
实例讲解Python脚本成为Windows中运行的exe文件
Jan 24 #Python
python随机在一张图像上截取任意大小图片的方法
Jan 24 #Python
You might like
外媒评选出10支2020年最受欢迎的Dota2战队
2021/03/05 DOTA
1.PHP简介
2006/10/09 PHP
php从数组中随机抽取一些元素的代码
2012/11/05 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
分享最受欢迎的5款PHP框架
2014/11/27 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
PHP7 其他修改
2021/03/09 PHP
js资料toString 方法
2007/03/13 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
bootstrap导航栏、下拉菜单、表单的简单应用实例解析
2017/01/06 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
Mint UI 基于 Vue.js 移动端组件库
2017/11/07 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
vuex 多模块时 模块内部的mutation和action的调用方式
2020/07/24 Javascript
解读python如何实现决策树算法
2018/10/11 Python
python实现名片管理系统项目
2019/04/26 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
在线服装零售商:SheIn
2016/07/22 全球购物
Annoushka英国官网:英国奢侈珠宝品牌
2018/10/20 全球购物
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
客服主管岗位职责
2013/12/13 职场文书
2014年自我评价
2014/01/04 职场文书
介绍信如何写
2015/01/31 职场文书
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers