1.效果图

2.完整的代码

#第1步:导出模块
import pygame, sys, random
from pygame.locals import * # 第2步:定义颜色变量,在pygame中采用的color是三色原RGB的数值法
# 目标方块儿红颜色
redColor = pygame.Color(255, 0, 0)
# 背景颜色为黑色
pinkColor = pygame.Color(255, 192, 203)
#黑色:0,0,0
#粉红色=pink=(255, 192, 203)
# 蛇颜色为白色
whiteColor = pygame.Color(255, 255, 255) # 第3步:定义游戏结束
def gameOver():
pygame.quit()
sys.exit() # 第4步:定义main函数 定义入口函数
def main():
# 初始化pygame,很关键
pygame.init()
# 定义一个变量 控制速度
fpsClock = pygame.time.Clock()
# 创建一个窗口界面及大小
playSurface = pygame.display.set_mode((640, 480))
pygame.display.set_caption('<-自定义贪吃蛇->DIY') #游戏标题
# 初始化目标方块的位置
targetPosition = [300, 300]
# 目标方块标记 判断贪吃蛇是否吃掉目标方块:1为没吃掉 0为吃掉
targetFlag = 1
# 初始化贪吃蛇的位置 (100,100)为基准
# 初始化贪吃蛇长度 列表中有几个元素 就有几个身体
snake_head = [100, 100]
snake_body = [[80, 100], [60, 100]] #即初始化蛇2节,一节大小20
# 初始化方向 默认为右
direction = 'right'
# 定义一个认为控制的方向的变量
changedirection = direction
# pygame 所有事件全部放到一个实时循环中 while True:
# 从队列中获取事件
for event in pygame.event.get():
if event.type == QUIT: #定义退出
pygame.quit()
sys.exit()
elif event.type == KEYDOWN: #定义循环中其他时间上下左右
if event.key == K_RIGHT:
changedirection = 'right'
if event.key == K_LEFT:
changedirection = 'left'
if event.key == K_UP:
changedirection = 'up'
if event.key == K_DOWN:
changedirection = 'down'
if event.key == K_ESCAPE: #定义键盘ESC按键和quit=窗口的‘x’功能一样
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 # 根据方向移动蛇头,每前进一步是20,正好是一节蛇身
if direction == 'right':
snake_head[0] += 20
if direction == 'left':
snake_head[0] -= 20
if direction == 'up':
snake_head[1] -= 20
if direction == 'down':
snake_head[1] += 20 # 增加蛇的长度
snake_body.insert(0, list(snake_head))
# 如果贪吃蛇位置和目标方块位置重合
if snake_head[0] == targetPosition[0] and snake_head[1] == targetPosition[1]:
targetFlag = 0
else:
snake_body.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(pinkColor) for position in snake_body:
# rect函数内
# 第一个参数surface 指定一个surface编辑区
# 第二个参数color 指定颜色
# 第三个参数rect 返回一个矩形包含位置信息(x,y),(width,height)
# 第四个参数width 表示线条的粗细 width=0 实心 width=1 空心
# 画蛇
pygame.draw.rect(playSurface, whiteColor, Rect(position[0], position[1], 20, 20))
# 画目标方块儿
pygame.draw.rect(playSurface, redColor, Rect(targetPosition[0], targetPosition[1], 20, 20)) # 更新显示到屏幕
pygame.display.flip() # 判断游戏结束
# 注意这个判断数值依据窗口大小适当可以调整,但是一个方块大小是20×20,所以窗口长和宽-20的数值
# 比如640的长,则620;宽480,则460
if snake_head[0] > 620 or snake_head[0] < 0:
gameOver()
if snake_head[1] > 460 or snake_head[1] < 0:
gameOver()
# 控制游戏速度
fpsClock.tick(3) '''
#附加---背景音乐添加
# (1)初始化,记住pygame模块使用,初始化必须在导出模块之后
pygame.mixer.init()
# (2)路径
file=r'/home/xgj/xgjpython/python3/pygame/贪食蛇系列/wmbyy.mp3' #自定义mp3的路径
# (3)加载音乐文件
track = pygame.mixer.music.load(file)
# (4)开始播放音乐流
pygame.mixer.music.play() ''' # 启动入口 main函数
if __name__ == '__main__':
main()

教你如何用python和pygame制作一个简单的贪食蛇游戏,可自定义的更多相关文章

  1. 使用pygame制作一个简单的游戏

    翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novice to Professional&g ...

  2. TensorFlow练习13: 制作一个简单的聊天机器人

    现在很多卖货公司都使用聊天机器人充当客服人员,许多科技巨头也纷纷推出各自的聊天助手,如苹果Siri.Google Now.Amazon Alexa.微软小冰等等.前不久有一个视频比较了Google N ...

  3. 如何制作一个类似Tiny Wings的游戏(2) Cocos2d-x 2.1.4

    在第二篇<如何制作一个类似Tiny Wings的游戏>基础上,增加添加主角,并且使用Box2D来模拟主角移动,原文<How To Create A Game Like Tiny Wi ...

  4. 怎样制作一个相似Tiny Wings的游戏 Cocos2d-x 2.1.4

    在第一篇<怎样使用CCRenderTexture创建动态纹理>基础上,添加�创建动态山丘,原文<How To Create A Game Like Tiny Wings with C ...

  5. 实例学习SSIS(一)--制作一个简单的ETL包

    原文:实例学习SSIS(一)--制作一个简单的ETL包 导读: 实例学习SSIS(一)--制作一个简单的ETL包 实例学习SSIS(二)--使用迭代 实例学习SSIS(三)--使用包配置 实例学习SS ...

  6. 如何制作一个类似Tiny Wings的游戏 Cocos2d-x 2.1.4

    在第一篇<如何使用CCRenderTexture创建动态纹理>基础上,增加创建动态山丘,原文<How To Create A Game Like Tiny Wings with Co ...

  7. 手把手制作一个简单的IDEA插件(环境搭建Demo篇)

    新建IDEA插件File --> new --> Project--> Intellij PlatForm Plugin-->Next-->填好项目名OK 编写插件新建工 ...

  8. PureMVC和Unity3D的UGUI制作一个简单的员工管理系统实例

    前言: 1.关于PureMVC: MVC框架在很多项目当中拥有广泛的应用,很多时候做项目前人开坑开了一半就消失了,后人为了填补各种的坑就遭殃的不得了.嘛,程序猿大家都不喜欢像文案策划一样组织文字写东西 ...

  9. 如何使用AEditor制作一个简单的H5交互页demo

    转载自:http://www.alloyteam.com/2015/06/h5-jiao-hu-ye-bian-ji-qi-aeditor-jie-shao/ 本教程演示如何使用AEditor制作一个 ...

随机推荐

  1. 多项式对数函数 - NTT

    #include <bits/stdc++.h> using namespace std; #define int long long const int N=4000005; // 4 ...

  2. Python里的Flask开发环境的搭建

    在已经安装好了Python后,我这里用的是Python3.5,准备进一步学习Flask框架,下面记录搭建Flask环境 这里使用了虚拟环境,在虚拟环境里,最小化的安装Flask. 参考步骤: 1.首先 ...

  3. AntDesign(React)学习-7 Menu添加事件

    今天花了大半天时间从老家回到工作地,路上因为肺炎封堵挺厉害,希望国家挺过这个难关,要不大家都失业可就惨了,上一篇做了一个展示数据的demo,这一篇研究antd Menu item点击事件 1.还是先看 ...

  4. jQuery图片剪裁插件Cropper.js的使用

    插件下载地址及文档说明 1.引入必要的js和css核心文件 <link rel="stylesheet" href="../css/cropper.css" ...

  5. java多线程技术

    如何实现线程 首先实现线程的两个方法:1.继承thread:2.实现接口Runnable类: 这边我就说一下第二种,因此第二种在开发中使用的比较多一些,能避免继承还是少避免继承. RunnableDe ...

  6. CentOS7.5下基于FTP服务的局域网yum源搭建

    实验环境 yum源服务器和yum客户端都处于同一局域网之中 yum源服务器 hostname:zabbix OS版本:CentOS 7.5 IP:192.168.101.201 yum客户端 host ...

  7. js -- 车牌号对应的归属地js文件

    /*车牌号对应的归属地*/ let cardCallerloc = new Map(); // 北京市(京) cardCallerloc.set("京A", "北京市&q ...

  8. django初步了解(一)

    安装django pip3 install django==版本号 创建一个djangp项目 django-admin startproject 项目名 目录介绍: 运行django项目: pytho ...

  9. Mysql主键外键操作

    外键: ·一对多 ·多对多 ·一对一 ·修改表 ·复制表   主键:   rimary key auto_increment(primary key是主键通常和auto_increment自动增加混合 ...

  10. spring(六):事务

    事务特性ACID 原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做: 一致性(Consistency):在事务执行前数据库的数据处于正确的状态,而事务执行 ...