教你如何用python和pygame制作一个简单的贪食蛇游戏,可自定义
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制作一个简单的贪食蛇游戏,可自定义的更多相关文章
- 使用pygame制作一个简单的游戏
翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novice to Professional&g ...
- TensorFlow练习13: 制作一个简单的聊天机器人
现在很多卖货公司都使用聊天机器人充当客服人员,许多科技巨头也纷纷推出各自的聊天助手,如苹果Siri.Google Now.Amazon Alexa.微软小冰等等.前不久有一个视频比较了Google N ...
- 如何制作一个类似Tiny Wings的游戏(2) Cocos2d-x 2.1.4
在第二篇<如何制作一个类似Tiny Wings的游戏>基础上,增加添加主角,并且使用Box2D来模拟主角移动,原文<How To Create A Game Like Tiny Wi ...
- 怎样制作一个相似Tiny Wings的游戏 Cocos2d-x 2.1.4
在第一篇<怎样使用CCRenderTexture创建动态纹理>基础上,添加�创建动态山丘,原文<How To Create A Game Like Tiny Wings with C ...
- 实例学习SSIS(一)--制作一个简单的ETL包
原文:实例学习SSIS(一)--制作一个简单的ETL包 导读: 实例学习SSIS(一)--制作一个简单的ETL包 实例学习SSIS(二)--使用迭代 实例学习SSIS(三)--使用包配置 实例学习SS ...
- 如何制作一个类似Tiny Wings的游戏 Cocos2d-x 2.1.4
在第一篇<如何使用CCRenderTexture创建动态纹理>基础上,增加创建动态山丘,原文<How To Create A Game Like Tiny Wings with Co ...
- 手把手制作一个简单的IDEA插件(环境搭建Demo篇)
新建IDEA插件File --> new --> Project--> Intellij PlatForm Plugin-->Next-->填好项目名OK 编写插件新建工 ...
- PureMVC和Unity3D的UGUI制作一个简单的员工管理系统实例
前言: 1.关于PureMVC: MVC框架在很多项目当中拥有广泛的应用,很多时候做项目前人开坑开了一半就消失了,后人为了填补各种的坑就遭殃的不得了.嘛,程序猿大家都不喜欢像文案策划一样组织文字写东西 ...
- 如何使用AEditor制作一个简单的H5交互页demo
转载自:http://www.alloyteam.com/2015/06/h5-jiao-hu-ye-bian-ji-qi-aeditor-jie-shao/ 本教程演示如何使用AEditor制作一个 ...
随机推荐
- Coxeter积分计算
\begin{align*}&\int_0^{\frac{\pi}{3}}{\arccos \left( \frac{1-\cos x}{\text{2}\cos x} \right) dx} ...
- HashMap,ConcurrentHashMap原理。Collection(list,set,map集合区别)。和CAS
collection里面有什么子类?(list和set是实现了collection接口的.) List: 1.可以允许重复的对象(可重复,有序集合).2.可以插入多个null元素.3.常用的实现类有 ...
- python算术
''' 1.对每个数进行平方, 2.求和 ''' print(sum(x ** 2 for x in range(4)))
- Execl导入系统
文件导入功能 前台代码: Content\JS\jquery.ajaxfileupload.js<script src="~/Content/JS/jquery.ajaxfileupl ...
- 题解【AcWing177】噩梦
题面 考虑双向广搜. 我们需要记录男孩和女孩的当前位置,并且每次都进行扩展. 记录一个数组 \(st[i][j]\) . 如果 \(st[i][j]=0\) ,说明 \((i,j)\) 还没有被男孩和 ...
- 2019牛客多校第七场E Find the median 离散化+线段树维护区间段
Find the median 题意 刚开始集合为空,有n次操作,每次操作往集合里面插入[L[i],R[i]]的值,问每次操作后中位数是多少 分析 由于n比较大,并且数可以达到1e9,我们无法通过权值 ...
- linq和匿名方法、委托、匿名委托、lambda
委托相当于JavaScript中的闭包,c++中的函数指针. c#为了引进这个函数指针,将其进行包装成“委托”,同时将非托管的变成托管的. 1.最初的委托该怎么用 弊端:写的代码量过多,还要写一个显示 ...
- java-Timestamp
java获取取得Timestamp类型的当前系统时间格式:2010-11-04 16:19:42 方法1: Timestampd = new Timestamp(System.currentTimeM ...
- APP开发工具如何选?
随着技术的发展,在当前开发一款APP已经非常的简单和快速.特别是近些年,利用HTML5技术将APP的开发门槛进一步降低.各种开发工具和框架层出不穷,令人眼花缭乱.这么多的工具摆在眼前应该如何进行选择呢 ...
- C#中获取时间戳
{ 注意:下面是以毫秒为单位的13位 UTC 时间戳(非正规) }//先取得当前的UTC时间,然后转换成计算用的周期数(简称计时周期数),每个周期为100纳钞(ns)=0.1微秒(us)=0.00 ...