Pygame实现俄罗斯方块游戏(基础篇2):碰撞检测和键盘控制
177 浏览量
更新于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 上传
2021-01-02 上传
点击了解资源详情
2021-03-15 上传
点击了解资源详情
点击了解资源详情
weixin_38529293
- 粉丝: 3
- 资源: 870
最新资源
- 探索AVL树算法:以Faculdade Senac Porto Alegre实践为例
- 小学语文教学新工具:创新黑板设计解析
- Minecraft服务器管理新插件ServerForms发布
- MATLAB基因网络模型代码实现及开源分享
- 全方位技术项目源码合集:***报名系统
- Phalcon框架实战案例分析
- MATLAB与Python结合实现短期电力负荷预测的DAT300项目解析
- 市场营销教学专用查询装置设计方案
- 随身WiFi高通210 MS8909设备的Root引导文件破解攻略
- 实现服务器端级联:modella与leveldb适配器的应用
- Oracle Linux安装必备依赖包清单与步骤
- Shyer项目:寻找喜欢的聊天伙伴
- MEAN堆栈入门项目: postings-app
- 在线WPS办公功能全接触及应用示例
- 新型带储订盒订书机设计文档
- VB多媒体教学演示系统源代码及技术项目资源大全