接下来要进入操作部分了

坚持才能获得最后的成就感噢

用移动变量处理用户输入

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编写俄罗斯方块(四)...相关推荐

  1. python星星万花筒_少儿编程分享:码趣君教你用Python编写推星星游戏(完)

    这是推星星游戏的最后一期了 希望每个学习了的同学都能制作出你自己的推星星游戏 记得巩固好知识噢~ Drawing the Map绘制地图 535. def drawMap(mapObj, gameSt ...

  2. 怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)

    原标题:少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二) 检测和判断 无论我们制作的简单或者复杂的游戏 这都是最关键的两个部分 事件处理循环 61. while True: # 游戏主循环 62 ...

  3. python图形设计编程_少儿编程分享:手把手教你用Python制作艺术图片

    原标题:少儿编程分享:手把手教你用Python制作艺术图片 在前面的几篇文章中,我们分享了一些用PyGame制作小游戏的教程.我们今天的分享使用的仍然是PyGame,只不过这次不是写游戏啦-我们要用P ...

  4. python 儿童 游戏_少儿编程分享:手把手教你用Python编写战斗机游戏(完)

    原标题:少儿编程分享:手把手教你用Python编写战斗机游戏(完) 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑 .接下来,我们要把单调的白色矩形换成好看的图片. 在前面的代码中,我们用 ...

  5. 用python画小兔子_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)

    原标题:少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一) 游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫 ...

  6. python俄罗斯方块代码34行_python turtle实现俄罗斯方块 基础版

    本项目通过python自带库tkinter实现,无需安装第三方库 本项目基于python3版本开发(如果你的是python2.x,运行可能会有问题) 一.基础界面 1 搭建基础窗体 使用tkinter ...

  7. python俄罗斯方块编程思路_少儿编程分享:手把手教你用Python编写俄罗斯方块(十)...

    www.codingmarch.com 游戏分享:手把手教你用 Python 编写 俄罗斯方块(十) 2017.12.28 这是俄罗斯方块的最后一章了 经历了这么多游戏 编写了这么多代码 你的心中是否 ...

  8. python菜根谭小猫_少儿编程国学动画经典案例_作者:李兴球

    可爱的猫咪们在窗口中走来走去,还时不时地说出句鸡汤文,它们优雅地步伐会让你联想到它们是捉老鼠的家猫吗? """    菜根谭小猫.py    本程序演示四只行走的小猫,碰 ...

  9. python兔子编程_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)

    游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫自己的四个堡垒.这个游戏是和你们一样的同龄人制作的噢~为此我们也会更 ...

最新文章

  1. Spring Boot + GraphQL 才是 API 的未来!
  2. 第一部分:基础知识(第一章)屏幕部分续
  3. Linux 模拟网络丢包和延迟命令
  4. python36中文手册_python36中文手册_python_36_文件操作4
  5. vue中选项和url根据彼此的改变实现高亮显示
  6. layui表格——table.render(options)(转)
  7. 机器人建模中移动关节如何建立坐标系_机器人标准DH建模法
  8. 转岗测试工作三年经验总结(前端开发转测试)
  9. 分享一些Java常见的面试题,大厂都爱用
  10. 二进制 八进制 十进制 十六进制
  11. echarts实现数据可视化
  12. Adobe Dreamweaver CS6快捷键使用
  13. 易基因技术推介|m1A RNA甲基化测序(MeRIP-seq/m1A-seq)
  14. 线性回归;欠拟合和过拟合
  15. 趣拿口碑营销,打通线上线下才是真本事!
  16. 软件测试人员必知H5/小程序测试点
  17. 什么是OpCode?
  18. golang vendor介绍
  19. ^[A-Za-z\\d]*$ 正则表达式
  20. DAEMON Tools Ultra(虚拟光驱超级版)v5.5.0.1046免费版

热门文章

  1. 直播 | Circle Loss:从对相似性优化的统一视角进行深度特征学习
  2. 格“物”致知:多模态预训练再次入门
  3. CVPR 2019 | INIT:针对实例级的图像翻译
  4. 岗位推荐 | 微软小冰团队招聘数据挖掘/算法工程师实习生
  5. 多序列比对要多久时间_上海注册公司要多久时间?
  6. input输入框自动消除空格
  7. 机器人“铁手”可以保护工厂工人免受伤害
  8. 获取直播连接[.m3u8]
  9. Spring——Spring工具类
  10. 《Java程序设计》实验报告——Java的对象与类