python双人格斗游戏代码_Python:游戏:贪吃蛇
一、游戏介绍
贪吃蛇是个非常简单的游戏,适合练手。先来看一下我的游戏截图:
玩法介绍:
回车键:开始游戏
空格键:暂停 / 继续
↑↓←→方向键 或 WSAD 键:控制移动方向。
食物分红、绿、蓝三种,分别对应 10 分、20 分、30 分,每吃一个食物增加对应分值,每增加 100 分速度加快一级,没有设置关卡,我玩到 1100 分,速度太快了,然后就 GAME OVER 了。
二、游戏分析
贪吃蛇这个游戏很简单,屏幕上随机出现一个点,表示“食物”,上下左右控制“蛇”的移动,吃到“食物”以后“蛇”的身体加长,“蛇”碰到边框或自己的身体,则游戏结束。
我们先来分析一下,要写出这个游戏来需要注意哪些点。
1、蛇怎么表示
我们可以将整个游戏区域划分成一个个的小格子,由一组连在一起的小格子组成“蛇”,我们可以用不同的颜色来表示,如上图中,我以深色表示背景,浅色表示“蛇”。
我们可以用坐标来表示每一个小方格,X 轴和 Y 轴的范围都是可以设定好的。用一个列表来存放“蛇身”的坐标,那么一条“蛇”就出来了,最后只要显示的时候以不同的颜色表示即可。
2、蛇怎么移动?
第一反应就是像蚯蚓蠕动一样,每一个小方块向前移动一格,但这样实现起来很麻烦。一开始就是被这里卡住了。
想象一下我们玩过的贪吃蛇,每次“蛇”的移动感觉上是整体往前移动了一格,排除掉脑子中“蛇”的“动作”,细想移动前和移动后“蛇”的位置变化,其实除了头尾,其他部分根本就没有变。那就简单了,将下一格的坐标添加到列表开头,并移除列表的最后一个元素,就相当于蛇向前移动了一格。
3、如何判定游戏结束?
“蛇”移动超出了游戏区的范围或者碰到了自己就算输了,轴坐标的范围是事先定好的,超出范围很容易判断。那么如何判断碰到自己呢?
如果脑子里想的是“蛇”动的画面,那真的比较难了,但是放到代码中,我们的“蛇”是一个列表,那么只要判断下一格的坐标是否已经包含在“蛇”的列表中岂不就可以了?
理清了这些问题,我们就可以开始编码了。
三、代码展示
由于程序中要频繁的对“蛇”进行头尾的添加和删除操作,为了性能更好那么一点,我们用 deque 代替列表。
首先需要初始化“蛇”,“蛇”的初始长度为 3,位置位于左上角。
# 游戏区域的坐标范围
SCOPE_X = (0, SCREEN_WIDTH // SIZE - 1)
SCOPE_Y = (2, SCREEN_HEIGHT // SIZE - 1)
snake = deque()
def _init_snake():
snake.clear()
snake.append((2, scope_y[0]))
snake.append((1, scope_y[0]))
snake.append((0, scope_y[0]))
创建“食物”,在屏幕内随机选取一个点作为“食物”,但是要保证“食物”不在“蛇”身上。
def create_food(snake):
food_x = random.randint(SCOPE_X[0], SCOPE_X[1])
food_y = random.randint(SCOPE_Y[0], SCOPE_Y[1])
while (food_x, food_y) in snake:
# 如果食物出现在蛇身上,则重来
food_x = random.randint(SCOPE_X[0], SCOPE_X[1])
food_y = random.randint(SCOPE_Y[0], SCOPE_Y[1])
return food_x, food_y
“蛇”的移动可以有 4 个方向,用一个元组来表示移动的方向,每次按下方向键,给赋对应的值
# 方向
pos = (1, 0)
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
elif event.type == KEYDOWN:
if event.key in (K_w, K_UP):
# 这个判断是为了防止蛇向上移时按了向下键,导致直接 GAME OVER
if pos[1]:
pos = (0, -1)
elif event.key in (K_s, K_DOWN):
if pos[1]:
pos = (0, 1)
elif event.key in (K_a, K_LEFT):
if pos[0]:
pos = (-1, 0)
elif event.key in (K_d, K_RIGHT):
if pos[0]:
pos = (1, 0)
而“蛇”的移动就可以表示为:
next_s = (snake[0][0] + pos[0], snake[0][1] + pos[1])
if next_s == food:
# 吃到了食物
snake.appendleft(next_s)
food = create_food(snake)
else:
if SCOPE_X[0] <= next_s[0] <= SCOPE_X[1] and SCOPE_Y[0] <= next_s[1] <= SCOPE_Y[1] and next_s not in snake:
snake.appendleft(next_s)
snake.pop()
else:
game_over = True
扫码关注我的个人公众号,后台回复【贪吃蛇】,获取源码。
扫码关注我的个人公众号
python双人格斗游戏代码_Python:游戏:贪吃蛇相关推荐
- java小游戏代码压缩包_java 贪吃蛇小游戏 源码下载
[实例简介] 使用java程序设计语言制作的一个贪吃蛇小游戏.游戏的控制模块应该做到易懂.易操作,以给玩家一个很好的游戏环境.在这个游戏的设计中,牵涉到图形界面的显示与更新.数据的收集与更新,还要应用 ...
- flash游戏代码html5,Flash贪吃蛇游戏AS代码翻译
Flash贪吃蛇游戏AS代码翻译 互联网 发布时间:2008-10-06 01:25:13 作者:佚名 我要评论 今天翻译了一段经典的贪吃蛇代码,译后感觉还有很多地方不太妥当,很多不妥的地 ...
- 贪吃蛇小游戏代码html,自制贪吃蛇小游戏代码
package game; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Game_St ...
- python外星人入侵游戏代码_Python游戏:外星人入侵游戏编程完整版!内附代码
importsysimportpygamefrom bullet importBulletfrom alien importAlienfrom time importsleepdefcheck_eve ...
- python50行小游戏_50行python代码实现的贪吃蛇小游戏
50行python代码实现的贪吃蛇小游戏 发布于 2014-09-01 21:26:24 | 1337 次阅读 | 评论: 1 | 来源: 网友投递 Python编程语言Python 是一种面向对象. ...
- 用python自带的tkinter做游戏(一)—— 贪吃蛇 篇
用python自带的tkinter做游戏(一)-- 贪吃蛇 篇 本人新手,刚自学python满半年,现分享下心得,希望各位老手能指点一二,也希望和我一样的新手能共勉,谢谢~ 大家都知道用python做 ...
- python 250行代码开发一个贪吃蛇
python 250行代码开发一个贪吃蛇 1. 前提工作准备 2. 全局变量的定义与包的导入 3. 游戏开始界面初始化 4. 游戏界面的设置 4.1 游戏界面,使用一个Point类进行划分 4.2 预 ...
- JAVA基于J2ME的手机游戏开发和实现——贪吃蛇
随着通信技术的发展和手机的普及,手机游戏的开发技术越来越为人们所关注.以J2ME为开发平台,利用Java提供强大工具,不但可以在手机上实现静态HTML技术所无法实现的计算处理.数据存储.与服务器的通信 ...
- c/c++游戏编程之控制台贪吃蛇(一)
c/c++游戏编程之控制台贪吃蛇(一) c/c++游戏编程之控制台贪吃蛇(二) 欢迎你开启了c++的游戏编程世界之旅 如果你还未学过c++基本语法,请先学习基本语法再来学习游戏编程噢~. 对这样的&q ...
- c/c++游戏编程之控制台贪吃蛇(二)
c/c++游戏编程之控制台贪吃蛇(一) c/c++游戏编程之控制台贪吃蛇(二) 为了解决"闪屏"问题,我们不再使用system("cls")进行清屏,而是直接用 ...
最新文章
- 如何在Mac上加入adb服务
- Hadoop运行模式 之 伪分布式运行模式
- 面试常问Handler 的问题合集
- python3精要(1)-python特点
- SVN Error:请求的名称有效并且在数据库中找到,但是它没有相关的正确的数据来被解析...
- 安全数据分析理念的变化
- nsfocus 十周年了 时间过得好快啊... 恭喜下...
- angelica类似_亲爱的当归(Angelica)是第一个让我哭泣的VR体验
- 大一C语言和线性代数,有谁学过线性代数和C语言啊?
- 时间序列趋势判断(二)——Cox-Staut趋势检验
- 事务复制5: Transaction and Command
- 003::每天五分钟入门TCP/IP协议栈::IP协议之TOS字段说明
- 用for循环打印出大写字母的ASCII码对照表
- 配好lsd_slam后的使用PTAM工具标定相机
- php 判断是否是拼音,php汉字转拼音的示例
- 机器学习在网络中的实际应用
- python-django前端传递数据的三种格式_CBV源码分析_django模板语法
- python爬虫requests库的使用及python正则表达式的使用
- php class中public,private,protected的区别以及实例分析
- freesurfer运行完recon-all怎么快速查看有没有报错?——核心命令tail重定向
热门文章
- HDU3047 Zjnu Stadium
- 光大银行外包软件测试,文思海辉蝉联光大银行人力外包测试领域优秀服务商
- Zsh 入门(安装及使用)
- Android App 瘦身总结
- centos升级openssh之后,连接报错Add correct host key in /root/.ssh/known_hosts to get rid of this message
- python抢票用哪个库_手把手教你使用python抢票回家玩
- 树莓派设置静态ip2
- 甲骨文全球大会揭示Oracle Solaris 11
- ASP如何开发验证码短信接口API
- Fuse文件系统优化方案