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. npm命令笔记-----转自网络,仅供自己查看使用

    npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准.有了npm,可以很快的找到特定服务要使用的包,进行下载.安装以及管理已经安装 的包. npm常用指令 1.npm ...

  2. [P5555] 秩序魔咒 - 回文自动机,DFS

    #include <bits/stdc++.h> #define Sigma 30 #define MAXN 500010 #define int long long using name ...

  3. [P3935] Calculating - 整除分块

    容易发现题目要求的 \(f(x)\) 就是 \(x\) 的不同因子个数 现在考虑如何求 \(\sum_{i=1}^n f(i)\),可以考虑去算每个数作为因子出现了多少次,很容易发现是 \([n/i] ...

  4. HCTF2018-admin[条件竞争]

    附上网上师傅的wp  学习链接: https://www.jianshu.com/p/f92311564ad0 按照师傅的wp复现一下: 源代码审计,去看路由里的login函数和change函数都在没 ...

  5. django orm查询和后端缓存的使用

    django orm 查询 1 字段后(db_column='age') (null=True)#表示数据库里面的该字段数据可以为空 (blank=True)#表示前端表单提交的时候可以为空 (db_ ...

  6. Vue组件中的Data为什么是函数。

    简单点说,组件是要复用的,在很多地方都会调用.   如果data不是函数,而是属性,就又可能会发生多个地方的相同组件操作同一个Data属性,导致数据混乱. 而如果是函数,因为组件data函数的返回值是 ...

  7. 【Unity|C#】基础篇(5)——分部类与分部函数(partial)

    [学习资料] <C#图解教程>(第6章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu.c ...

  8. 831. KMP字符串(模板)

    给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字. 模板串P在模式串S中多次作为子串出现. 求出模板串P在模式串S中所有出现的位置的起始下标. 输入格式 第一行输入整 ...

  9. vue 项目初始化

    初始化 vue init webpack-simple myproject 安裝 npm install 运行 npm run dev 访问地址 http://localhost:8080/ 安装we ...

  10. Codeforces 524C.The Art of Dealing with ATM(暴力)

    我先采用了智障解法(n * n枚举...刚开始把n看成1000了还以为能过) 理所当然的t了,不过我怀疑优化一下能过?(感觉数据不太行的亚子 然后就是O(n * k * k)的解法,看到好多人快乐二分 ...