Python控制台输出俄罗斯方块移动和旋转功能


Posted in Python onApril 18, 2021

今天填一个坑,俄罗斯方块!!
俄罗斯方块的移动不难实现,但是旋转就不太容易实现,究其原因是因为Python中没有数组这种数据结构,所以不能用矩阵的公式。今天把旋转做出来了,刚好整理一下,把之前的都整合在一起

这两天浏览量有点离谱,说明一下,我没有使用pygame,只是在控制台可以打印、移动和旋转生成的俄罗斯方块星号图形

俄罗斯方块-打印

功能:输入字母,打印俄罗斯方块的*图形

# 尽可能吧俄罗斯方块放在中间
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和OpenCV库将URL转换为OpenCV格式的方法
Mar 27 Python
解读python如何实现决策树算法
Oct 11 Python
对Python中TKinter模块中的Label组件实例详解
Jun 14 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
Aug 08 Python
pytorch 获取tensor维度信息示例
Jan 03 Python
python批量处理txt文件的实例代码
Jan 13 Python
Python递归函数特点及原理解析
Mar 04 Python
对Keras中predict()方法和predict_classes()方法的区别说明
Jun 09 Python
Python实现LR1文法的完整实例代码
Oct 25 Python
python切割图片的示例
Nov 12 Python
python 基于PYMYSQL使用MYSQL数据库
Dec 24 Python
requests在python中发送请求的实例讲解
Feb 17 Python
深入理解python多线程编程
Apr 18 #Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 #Python
python批量更改目录名/文件名的方法
Apr 18 #Python
python解决12306登录验证码的实现
django注册用邮箱发送验证码的实现
Apr 18 #Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 #Python
python3 实现mysql数据库连接池的示例代码
You might like
PHP setTime 设置当前时间的代码
2012/08/27 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
php图片缩放实现方法
2014/02/20 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
js初始化验证实例详解
2016/11/26 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
微信小程序项目实践之九宫格实现及item跳转功能
2018/07/19 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
原生JS实现列表内容自动向上滚动效果
2019/05/22 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
Javascript原生ajax请求代码实例
2020/02/20 Javascript
python中threading超线程用法实例分析
2015/05/16 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
使用python切片实现二维数组复制示例
2019/11/26 Python
python 循环数据赋值实例
2019/12/02 Python
用python3读取python2的pickle数据方式
2019/12/25 Python
pytorch之添加BN的实现
2020/01/06 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
2020/01/17 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
C有"按引用传递"吗
2016/09/06 面试题
小学英语课后反思
2014/04/26 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
教师师德表现自我评价
2015/03/05 职场文书
nginx 配置指令之location使用详解
2022/05/25 Servers