Python控制台输出俄罗斯方块的方法实例


Posted in Python onApril 17, 2021

今天填一个坑,俄罗斯方块!!

俄罗斯方块的移动不难实现,但是旋转就不太容易实现,究其原因是因为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

总结

到此这篇关于Python控制台输出俄罗斯方块的文章就介绍到这了,更多相关Python输出俄罗斯方块内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python自动化测试实例解析
Sep 28 Python
Python中定时任务框架APScheduler的快速入门指南
Jul 06 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
Oct 01 Python
Python最火、R极具潜力 2017机器学习调查报告
Dec 11 Python
Python实现读取及写入csv文件的方法示例
Jan 12 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
python pycharm的安装及其使用
Oct 11 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
Apr 07 Python
python ETL工具 pyetl
Jun 07 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 Python
浅谈Python数学建模之固定费用问题
Jun 23 Python
python3 实现mysql数据库连接池的示例代码
Python如何利用正则表达式爬取网页信息及图片
Apr 17 #Python
python中sys模块的介绍与实例
Apr 17 #Python
Python中os模块的简单使用及重命名操作
Apr 17 #Python
Python利器openpyxl之操作excel表格
Pytest实现setup和teardown的详细使用详解
pytest配置文件pytest.ini的详细使用
Apr 17 #Python
You might like
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
img onload事件绑定各浏览器均可执行
2012/12/19 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
js中document.write的那点事
2014/12/12 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
javascript模块化简单解析
2016/04/07 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
jQuery插件ajaxFileUpload使用实例解析
2016/10/19 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
Python聊天室实例程序分享
2016/01/05 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
python中自带的三个装饰器的实现
2019/11/08 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
python线性插值解析
2020/07/05 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
英国时尚优质的女装:Hope Fashion
2018/08/14 全球购物
工程部主管岗位职责
2013/11/17 职场文书
违反课堂纪律检讨书
2014/01/19 职场文书
护士节活动总结
2014/08/29 职场文书
会计试用期自我评价
2014/09/19 职场文书
农业生产宣传标语
2014/10/08 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
React Hook用法示例详解(6个常见hook)
2021/04/28 Javascript