基于Python如何实现输出和控制俄罗斯方块的效果
Admin 2022-07-08 群英技术资讯 838 次浏览
在实际应用中,我们有时候会遇到“基于Python如何实现输出和控制俄罗斯方块的效果”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“基于Python如何实现输出和控制俄罗斯方块的效果”文章能帮助大家解决问题。俄罗斯方块的移动不难实现,但是旋转就不太容易实现,究其原因是因为Python中没有数组这种数据结构,所以不能用矩阵的公式。今天把旋转做出来了,刚好整理一下,把之前的都整合在一起
功能:输入字母,打印俄罗斯方块的*图形
# 尽可能吧俄罗斯方块放在中间
Tetris = {'L': [[1, 1], [1, 2], [1, 3], [2, 3]],
'O': [[1, 1], [2, 1], [1, 2], [2, 2]],
'J': [[2, 1], [2, 2], [1, 3], [2, 3]],
'Z': [[1, 1], [2, 1], [2, 2], [3, 2]],
'S': [[1, 1], [1, 2], [2, 2], [2, 3]],
'I': [[1, 1], [1, 2], [1, 3], [1, 4]],
'T': [[1, 1], [2, 1], [2, 2], [3, 1]]}
print(Tetris)
while True:
figure = input("请输入俄罗斯方块的形状")
flag = 0
for i in range(0, 5):
for j in range(0, 4):
for li in range(0, len(Tetris[figure])): # Tetris['L']
if j == Tetris[figure][li][0] and i == Tetris[figure][li][1]:
flag = 1
if flag == 1:
print("*", end='')
else:
print(" ", end='')
flag = 0
print()
这一版使用了函数+字典
功能:输入字母,打印俄罗斯方块的*图形,输入468可以移动
# 文件名称:Model-Tetris.PY
# 开发工具:PyCharm
Tetris = {'L': [[1, 1], [1, 2], [1, 3], [2, 3]],
'O': [[1, 1], [2, 1], [1, 2], [2, 2]],
'J': [[2, 1], [2, 2], [1, 3], [2, 3]],
'Z': [[1, 1], [2, 1], [2, 2], [3, 2]],
'S': [[1, 1], [1, 2], [2, 2], [2, 3]],
'I': [[1, 1], [1, 2], [1, 3], [1, 4]],
'T': [[1, 1], [2, 1], [2, 2], [3, 1]]}
def L_char(char):
flag = 0
for i in range(0, 7):
for j in range(0, 7):
for li in range(0, len(Tetris[char])): # Tetris['L']
if j == Tetris[char][li][0] and i == Tetris[char][li][1]:
flag = 1
if flag == 1:
print("*", end='')
else:
print(" ", end='')
flag = 0
print()
def move(char, num):
if num == 2:
for li in range(0, len(Tetris[char])):
Tetris[char][li][1] += 1
if num == 4:
for li in range(0, len(Tetris[char])):
Tetris[char][li][0] -= 1
if num == 6:
for li in range(0, len(Tetris[char])):
Tetris[char][li][0] += 1
if num == 8:
for li in range(0, len(Tetris[char])):
Tetris[char][li][1] -= 1
# 文件名称:Test-Tetris.PY
# 开发工具:PyCharm
from Day05 import Model_Tetris
if __name__ == '__main__':
char = input("请输入图形:")
Model_Tetris.L_char(char)
while True:
num = int(input("请输入移动代码2/4/6/8:"))
if num == 8 or num == 2 or num == 4 or num == 6:
Model_Tetris.move(char, num)
Model_Tetris.L_char(char)
else:
break
主要思想:预定义4X4的坐标转换,旋转式查找字典中的转换坐标,进行相应的替换
功能:输入字母,打印俄罗斯方块的*图形,输入468可以移动,输入5可以旋转
废话不多说,直接给出代码:
#!/usr/bin/python
# _*_coding:utf-8_*_
# 开发人员:zys
# 开发时间:2021/4/16 16:50
# 文件名称:Test-Tetris.PY
# 开发工具:PyCharm
import random
from Day06.test1 import Model_Tetris
if __name__ == '__main__':
# 随机生成方法
# Character = "LOJSZIT"
# char = random.choice(Character)
char = "L"
Model_Tetris.L_char(char)
while True:
num = int(input("请输入移动代码4/5/6/8:")) # 5是旋转
if num == 8 or num == 4 or num == 6:
Model_Tetris.move(char, num)
Model_Tetris.L_char(char)
elif num == 5:
Model_Tetris.revolve(char)
Model_Tetris.L_char(char)
else:
break
#!/usr/bin/python
# _*_coding:utf-8_*_
# 开发人员:zys
# 开发时间:2021/4/16 16:36
# 文件名称:Model-Tetris.PY
# 开发工具:PyCharm
Tetris = {'L': [[1, 1], [1, 2], [1, 3], [2, 3]],
'O': [[1, 1], [1, 2], [2, 1], [2, 2]],
'J': [[1, 2], [2, 2], [3, 1], [3, 2]],
'Z': [[1, 1], [1, 2], [2, 2], [2, 3]],
'S': [[1, 1], [2, 1], [2, 2], [3, 2]],
'I': [[1, 1], [2, 1], [3, 1], [4, 1]],
'T': [[1, 1], [1, 2], [2, 2], [1, 3]]}
# 4*4旋转
'''这里补充一个知识点:
字典中的key是不可变的,所以不能用list作为字典的key,
因为list可以修改,这里采用了元组作为key,指明不可改变,
后面地址查值的时候需要进行类型转换。'''
rotateDict = {(1, 1): [4, 1], (1, 2): [3, 1], (1, 3): [2, 1], (1, 4): [1, 1],
(2, 1): [4, 2], (3, 1): [4, 3], (4, 1): [4, 4], (4, 2): [3, 4],
(4, 3): [2, 4], (4, 4): [1, 4], (3, 4): [1, 3], (2, 4): [1, 2],
(2, 2): [3, 2], (3, 2): [3, 3], (3, 3): [2, 3], (2, 3): [2, 2]}
def L_char(char):
flag = 0
for i in range(0, 5):
for j in range(0, 5):
for li in range(0, len(Tetris[char])): # Tetris['L']
if j == Tetris[char][li][0] and i == Tetris[char][li][1]:
flag = 1
if flag == 1:
print("*", end='')
else:
print(" ", end='')
flag = 0
print()
def move(char, num):
if num == 2:
for li in range(0, len(Tetris[char])):
Tetris[char][li][1] += 1
if num == 4:
for li in range(0, len(Tetris[char])):
Tetris[char][li][0] -= 1
if num == 6:
for li in range(0, len(Tetris[char])):
Tetris[char][li][0] += 1
if num == 8:
for li in range(0, len(Tetris[char])):
Tetris[char][li][1] -= 1
def revolve(char):
newTetris = [] # 新的list
for i in range(len(Tetris[char])):
newTetris.append(rotateDict[tuple(Tetris[char][i])]) # 对应坐标添加到新的坐标
Tetris[char] = newTetris
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家介绍了python神经网络Keras搭建RFBnet目标检测平台,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
这篇文章主要介绍了Python format()格式化输出方法, Python 2.6以后,Python 中的就提供了字符串类型(str)提供了 format() 方法对字符串进行格式化,夏敏我们就来了解这个方法吧,需要的小伙伴也可以参考一下</P><P>
Python的urllib库可以做什么?对于python爬虫应用urllib库起着重要作用,有一些朋友对于urllib库使用不是很了解,对此这篇就给大家来介绍一下urllib库的使用,文中的介绍很详细,感兴趣的朋友就跟随小编一起来学习一下吧。
近期在整理相册的时候,发现相册中有许多重复图片,人工一张张筛查删除太枯燥,便写下这个python脚本,用于删除文件夹下重复的图片
这篇文章主要为大家介绍了python编程中Flask框架简单使用教程,有需要的朋友可以借鉴参考下希望能够有所帮助,祝大家多多进步早日升职加薪
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008