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下的subprocess模块的入门指引
Apr 16 Python
python制作爬虫爬取京东商品评论教程
Dec 16 Python
通过Python 获取Android设备信息的轻量级框架
Dec 18 Python
python的dataframe和matrix的互换方法
Apr 11 Python
Python实现的文本对比报告生成工具示例
May 22 Python
selenium+python 对输入框的输入处理方法
Oct 11 Python
python使用xlsxwriter实现有向无环图到Excel的转换
Dec 12 Python
对Python3使运行暂停的方法详解
Feb 18 Python
Pandas 缺失数据处理的实现
Nov 04 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
Oct 15 Python
python自动化调用百度api解决验证码
Apr 13 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
php SQL防注入代码集合
2008/04/25 PHP
PHP 常用函数库和一些实用小技巧
2009/01/01 PHP
PHP 转义使用详解
2013/07/15 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
php修改指定文件后缀的方法
2014/09/11 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
使用JQuery进行跨域请求
2010/01/25 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
2013/02/05 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
jQuery设置与获取HTML,文本和值的简单实例
2014/02/26 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
2019/06/17 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
python中hashlib模块用法示例
2017/10/30 Python
python基础练习之几个简单的游戏
2017/11/10 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
django 发送手机验证码的示例代码
2018/04/25 Python
Python全栈之列表数据类型详解
2019/10/01 Python
python创建n行m列数组示例
2019/12/02 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
武汉东之林科技有限公司机试
2013/09/17 面试题
创立科技Java面试题
2015/11/29 面试题
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
python实现简单区块链结构
2021/04/25 Python
MySQL查询学习之基础查询操作
2021/05/08 MySQL