Pygame实现俄罗斯方块游戏(基础篇2):碰撞检测和键盘控制
127 浏览量
更新于2024-08-30
收藏 154KB PDF 举报
Pygame实现俄罗斯方块游戏(基础篇2)
在上一篇文章《Pygame实现俄罗斯方块游戏(基础篇1)》的基础上,我们继续编写俄罗斯方块游戏。在本篇文章中,我们将实现俄罗斯方块游戏的基础功能,包括计算方块之间的碰撞、键盘控制左右移动等。
一、计算方块之间的碰撞
在Pygame中,我们可以使用矩形碰撞检测来实现方块之间的碰撞。在Panel类中,我们添加了一个名为check_overlap的函数,该函数用于检测方块之间的碰撞。该函数的实现代码如下所示:
```
def check_overlap(self, diffx, diffy):
for x, y in self.moving_block.get_rect_arr():
for rx, ry in self.rect_arr:
if x + diffx == rx and y + diffy == ry:
return True
return False
```
在上面的代码中,我们使用了两个循环来遍历方块的矩形数组和Panel类的矩形数组。如果两个矩形数组中的元素相等,那么我们就认为方块之间发生了碰撞。
二、修改move_block函数
在实现了check_overlap函数后,我们需要修改move_block函数,以便在方块移动时检测碰撞。修改后的move_block函数代码如下所示:
```
def move_block(self):
if self.moving_block is None:
create_move_block()
if self.moving_block.can_move(0, 1) and not self.check_overlap(0, 1):
self.moving_block.move(0, 1)
else:
self.add_block(self.moving_block)
self.create_move_block()
```
在上面的代码中,我们首先判断方块是否可以移动,如果可以移动,那么我们就移动方块;否则,我们就将方块添加到Panel类中,并创建一个新的方块。
三、键盘控制左右移动
在Pygame中,我们可以使用键盘事件来控制方块的移动。在Panel类中,我们添加了一个名为control_block的函数,该函数用于控制方块的移动。该函数的实现代码如下所示:
```
def control_block(self, diffx, diffy):
if self.moving_block.can_move(diffx, diffy) and not self.check_overlap(diffx, diffy):
self.moving_block.move(diffx, diffy)
```
在上面的代码中,我们使用了can_move函数来判断方块是否可以移动,如果可以移动,那么我们就移动方块。
四、键盘事件监听
在Pygame中,我们可以使用键盘事件来监听键盘输入。在主循环中,我们可以使用以下代码来监听键盘事件:
```
if event.type == KEYDOWN:
if event.key == K_LEFT:
main_panel.control_block(-1, 0)
elif event.key == K_RIGHT:
main_panel.control_block(1, 0)
elif event.key == K_UP:
pass # 变形过会实现
elif event.key == K_DOWN:
main_panel.control_block(0, 1)
```
在上面的代码中,我们使用了KEYDOWN事件来监听键盘输入,并使用control_block函数来控制方块的移动。
在本篇文章中,我们实现了俄罗斯方块游戏的基础功能,包括计算方块之间的碰撞和键盘控制左右移动等。在下一篇文章中,我们将继续实现俄罗斯方块游戏的其他功能。
2019-05-02 上传
点击了解资源详情
2020-09-18 上传
2020-09-18 上传
点击了解资源详情
2021-03-15 上传
点击了解资源详情
点击了解资源详情
weixin_38529293
- 粉丝: 3
- 资源: 870
最新资源
- 电视查询
- redux-delete-codealong-sea01-seng-ft-060120
- GFN:用于融合图像去模糊和超分辨率的门控融合网络(BMVC 2018口腔)
- OP协议,OP协议测试工具,Open Interface,电动扳手OP测试,纯程序
- Solo_Project_Frontend
- poirot:一个展示私有仓库部署的简单仓库
- go-repo
- 致敬:向Alain deMonéys致敬。 Freecodecamp致敬页面练习
- ASP.NET动态渐变处理程序
- 华为简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习
- php sg11扩展 linux-64版本
- YourLife:http
- SuperfundSitesbyCollege:靠近学生PIRG和超级基金站点的校园(未经事实检查,未经作者许可不得重复使用或引用)
- GroupDocs.Merger-for-Java:GroupDocs.Merger for Java示例,插件以及展示项目和网站
- rent-receipt-generator
- pi:我的树莓派的项目代码