python俄罗斯方块代码34行_少儿编程分享:码趣君教你用Python编写俄罗斯方块(四)...
接下来要进入操作部分了
坚持才能获得最后的成就感噢
用移动变量处理用户输入
216. elif (event.key == K_LEFT or event.key == K_a):
217. movingLeft = False
218. elif (event.key == K_RIGHT or event.key == K_d):
219. movingRight = False
220. elif (event.key == K_DOWN or event.key == K_s):
221. movingDown = False
按下一个方向键(或是WASD键)设置 movingLeft, movingRight, or movingDown 变量反馈为错误,表示玩家不再想沿着这条道路移动积木。代码稍后会根据Boolean值中的移动变量处理要做什么。请注意,向上箭头和W键用于旋转积木,而不是移动积木。 这就是为什么没有moveUp变量。
检验滑动或旋转是否是变量
223. elif event.type == KEYDOWN:
224. # moving the block sideways
225. if (event.key == K_LEFT or event.key == K_a) and isValidPosition(board, fallingPiece, adjX=-1):
226. fallingPiece['x'] -= 1
227. movingLeft = True
228. movingRight = False
229. lastMoveSidewaysTime = time.time()
当按下向左键(向左移动是一个变量,移动着积木,所以决定称为isValidPosition()),那么我们应该通过将dropsPiece ['x']的值减去1来将位置更改为左边的一个空格。isValidPosition()函数具有可选参数,称为adjX和adjY。但有时我们不想检查积木当前的位置,但是宁愿检查一些小空格的位置。
如果我们将-1赋值给adjX(“adjusted X”的缩写),那么就不会检查积木数据结构位置的有效性,而是会检查如果左边有一个空格,积木的位置将会放在那里。1赋值给adjX会检查右边的空间。还有adjY作为可选参数。-1赋值给 adjY 检查积木现在所处位置上面一格,将数值如3赋值给adjY会检查积木所处位置下面3格。
movingLeft变量设置为True,仅是确认掉落的积木既不会向左也不会向右移动,在228行的movingRight变量被设定为False。在229行的lastMoveSidewaysTime 变量会下载当前的时间。
这些变量的设置是为了玩家按下方向键使积木继续移动。如果movingLeft变量设置为 True,程序知道向左键(或A键)按下还未松开。如果时间被存入lastMoveSidewaysTime变量后的0.15秒(数据被存储在MOVESIDEWAYSFREQ中),就在这时程序会再次将积木移到左边。
231. elif (event.key == K_RIGHT or event.key == K_d) and isValidPosition(board, fallingPiece, adjX=1):
232. fallingPiece['x'] += 1
233. movingRight = True
234. movingLeft = False
235. lastMoveSidewaysTime = time.time()
线231至235上的代码几乎与第225至229行完全相同,只是当按下右箭头键(或D键)时,它处理向下移动下降的部分。
237. # rotating the block (if there is room to rotate)
238. elif (event.key == K_UP or event.key == K_w):
239. fallingPiece['rotation'] = (fallingPiece['rotation'] + 1) % len(SHAPES[fallingPiece['shape']])
向上键(或w键)可以多次翻转下落的积木。这里所有代码要做的是将fallingPiece的数据库中翻转键的值加1。然而,如果增加的翻转键的值比翻转总数大,然后通过“修改“形状可能旋转的总数(这就是len(SHAPES[fallingPiece['shape']]),则数值将会变为0,现在举一个J形状的例子,它拥有四种翻转方向组合:
>>> 0 % 4
0
>>> 1 % 4
1
>>> 2 % 4
2
>>> 3 % 4
3
>>> 5 % 4
1
>>> 6 % 4
2
>>> 7 % 4
3
>>> 8 % 4
0
>>>
240. if not isValidPosition(board, fallingPiece):
241. fallingPiece['rotation'] = (fallingPiece['rotation'] - 1) % len(SHAPES[fallingPiece['shape']])
如果新的旋转方向是无效的,那是因为它与底板上的一些方块重叠在一起,那么我们想通过从dropsPiece ['rotation']减去1来将其切换回原来的旋转。我们可以通过len(SHAPES[fallingPiece['shape']])来修改旋转方向,如果新的数值是-1,该修改将会更改为列表中的最后一个旋转。 以下是修改负数的示例:
>>> -1 % 4
3
242. elif (event.key == K_q): # rotate the other direction
243. fallingPiece['rotation'] = (fallingPiece['rotation'] - 1) % len(SHAPES[fallingPiece['shape']])
244. if not isValidPosition(board, fallingPiece):
245. fallingPiece['rotation'] = (fallingPiece['rotation'] + 1) % len(SHAPES[fallingPiece['shape']])
242行到245行与238行到241行做着相同的事,除了处理玩家按下控制相反方向翻转的积木的Q键的情况。在这种情况下,我们从dropsPiece ['rotation']中减去1(在第243行完成),而不是加1。
247. # making the block fall faster with the down key
248. elif (event.key == K_DOWN or event.key == K_s):
249. movingDown = True
250. if isValidPosition(board, fallingPiece, adjY=1):
251. fallingPiece['y'] += 1
252. lastMoveDownTime = time.time()
如果按向下键或S键,那么积木下降的速度比正常的要快。251行是在底板向下移动积木一格(仅仅是有效的空格)。movingDown变量设置为True, lastMoveDownTime重置当前时间。稍后将会检查这些变量,为了按下向下键或S键移动的积木将以更快的速度持续下降。
(未完待续)
python俄罗斯方块代码34行_少儿编程分享:码趣君教你用Python编写俄罗斯方块(四)...相关推荐
- python星星万花筒_少儿编程分享:码趣君教你用Python编写推星星游戏(完)
这是推星星游戏的最后一期了 希望每个学习了的同学都能制作出你自己的推星星游戏 记得巩固好知识噢~ Drawing the Map绘制地图 535. def drawMap(mapObj, gameSt ...
- 怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)
原标题:少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二) 检测和判断 无论我们制作的简单或者复杂的游戏 这都是最关键的两个部分 事件处理循环 61. while True: # 游戏主循环 62 ...
- python图形设计编程_少儿编程分享:手把手教你用Python制作艺术图片
原标题:少儿编程分享:手把手教你用Python制作艺术图片 在前面的几篇文章中,我们分享了一些用PyGame制作小游戏的教程.我们今天的分享使用的仍然是PyGame,只不过这次不是写游戏啦-我们要用P ...
- python 儿童 游戏_少儿编程分享:手把手教你用Python编写战斗机游戏(完)
原标题:少儿编程分享:手把手教你用Python编写战斗机游戏(完) 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑 .接下来,我们要把单调的白色矩形换成好看的图片. 在前面的代码中,我们用 ...
- 用python画小兔子_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)
原标题:少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一) 游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫 ...
- python俄罗斯方块代码34行_python turtle实现俄罗斯方块 基础版
本项目通过python自带库tkinter实现,无需安装第三方库 本项目基于python3版本开发(如果你的是python2.x,运行可能会有问题) 一.基础界面 1 搭建基础窗体 使用tkinter ...
- python俄罗斯方块编程思路_少儿编程分享:手把手教你用Python编写俄罗斯方块(十)...
www.codingmarch.com 游戏分享:手把手教你用 Python 编写 俄罗斯方块(十) 2017.12.28 这是俄罗斯方块的最后一章了 经历了这么多游戏 编写了这么多代码 你的心中是否 ...
- python菜根谭小猫_少儿编程国学动画经典案例_作者:李兴球
可爱的猫咪们在窗口中走来走去,还时不时地说出句鸡汤文,它们优雅地步伐会让你联想到它们是捉老鼠的家猫吗? """ 菜根谭小猫.py 本程序演示四只行走的小猫,碰 ...
- python兔子编程_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)
游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫自己的四个堡垒.这个游戏是和你们一样的同龄人制作的噢~为此我们也会更 ...
最新文章
- Spring Boot + GraphQL 才是 API 的未来!
- 第一部分:基础知识(第一章)屏幕部分续
- Linux 模拟网络丢包和延迟命令
- python36中文手册_python36中文手册_python_36_文件操作4
- vue中选项和url根据彼此的改变实现高亮显示
- layui表格——table.render(options)(转)
- 机器人建模中移动关节如何建立坐标系_机器人标准DH建模法
- 转岗测试工作三年经验总结(前端开发转测试)
- 分享一些Java常见的面试题,大厂都爱用
- 二进制 八进制 十进制 十六进制
- echarts实现数据可视化
- Adobe Dreamweaver CS6快捷键使用
- 易基因技术推介|m1A RNA甲基化测序(MeRIP-seq/m1A-seq)
- 线性回归;欠拟合和过拟合
- 趣拿口碑营销,打通线上线下才是真本事!
- 软件测试人员必知H5/小程序测试点
- 什么是OpCode?
- golang vendor介绍
- ^[A-Za-z\\d]*$ 正则表达式
- DAEMON Tools Ultra(虚拟光驱超级版)v5.5.0.1046免费版
热门文章
- 直播 | Circle Loss:从对相似性优化的统一视角进行深度特征学习
- 格“物”致知:多模态预训练再次入门
- CVPR 2019 | INIT:针对实例级的图像翻译
- 岗位推荐 | 微软小冰团队招聘数据挖掘/算法工程师实习生
- 多序列比对要多久时间_上海注册公司要多久时间?
- input输入框自动消除空格
- 机器人“铁手”可以保护工厂工人免受伤害
- 获取直播连接[.m3u8]
- Spring——Spring工具类
- 《Java程序设计》实验报告——Java的对象与类