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. Selenium chromeDriver启动时报错:session not created: This version of ChromeDriver only supports Chrome

    解决方案: 这是因为ChromeDriver与本地chrome浏览器的版本不一致导致 ChromeDriver下载地址:http://npm.taobao.org/mirrors/chromedriv ...

  2. unrecognized import path "golang.org/x/*"的解决办法

    由于国内网络原因,因此访问https://golang.org/网站会被限制.所以在go get下载其他第三方包的时候,如果这个第三方包又引用了https://golang.org/x/下的包,通常会 ...

  3. arm9特点

    ARM9主要特点 ARM 处理器凭借它的低功耗.高性能等特点,被广泛应用于个人通信等嵌入式领域,而ARM7 也曾在中低端手持设备中占据了一席之地.然而,ARM7 的处理性能逐渐无法满足人们日益增长的高 ...

  4. flask入门(四)

    数据库 flask在数据库这一块有一个扩展应用叫做flask-sqlalchemy,去虚拟环境里pip install一下,如下 我这边用的是mysql,指定的url是这个mysql://userna ...

  5. AntDesign(React)学习-12 使用Table

    AntDesign(Vue)版的Table中使用图片https://www.cnblogs.com/zhaogaojian/p/11119762.html 之前在使用VUE版Table时,使用大图片时 ...

  6. 用C#调用外部DLL

    1.有时候需要用C#调用外部的dll,例如c++写的dll,首先需要保证dll的编译环境与本项目的环境是相同的,例如都是x86位或者x64位 2.调用声明和dll内的声明一致: function Te ...

  7. TP-网页静态化

    首先放上一张某手册中的一段代码: 我们要想在TP框架中执行网页静态化,在这段代码的基础上稍加添加就可以了: 在TP5框架中,为了方便寻找模板文件与生成的静态文件,我们将模板文件以及生成的静态文件放在p ...

  8. 问题解决:局域网内,为啥别人ping不到我的IP

    试着在本地搭建一个测试环境,成功后却发现同一局域网的同事根本访问不了,他们ping不到我的IP,这可咋整! 询问度娘后,我的问题得到了,以下是我的总结,如果解决不了你的问题,还请继续百度. 方法一:关 ...

  9. pytest学习4-fixtures

    源码注释: def fixture(scope="function", params=None, autouse=False, ids=None, name=None): &quo ...

  10. [CCPC2019秦皇岛] E. Escape

    [CCPC2019秦皇岛E] Escape Link https://codeforces.com/gym/102361/problem/E Solution 观察到性质若干然后建图跑最大流即可. 我 ...