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

作者:to_upper 时间:2023-08-09 16:32:19 

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

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

来源:https://blog.csdn.net/to_upper/article/details/115750393

标签:python,控制台,俄罗斯方块
0
投稿

猜你喜欢

  • SQL Server Parameter Sniffing及其改进方法

    2024-01-28 02:56:30
  • 用header 发送cookie的php代码

    2023-07-11 11:15:06
  • python实现得到一个给定类的虚函数

    2022-03-27 19:31:11
  • 基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解

    2022-11-20 07:59:16
  • 程序员的八种境界,你在哪一境?

    2022-07-19 11:22:19
  • python 3利用Dlib 19.7实现摄像头人脸检测特征点标定

    2022-07-31 05:54:21
  • IDEA 2020 设置项目集成git 及svn和git之间的切换问题

    2022-11-23 20:02:14
  • MongoDB与MySQL常用操作语句对照

    2024-01-13 12:08:17
  • jQuery自适应轮播图插件Swiper用法示例

    2024-04-19 10:18:38
  • PyQT5 QTableView显示绑定数据的实例详解

    2023-09-09 19:40:40
  • 在Django框架中设置语言偏好的教程

    2022-01-18 22:47:35
  • python学习之面向对象【入门初级篇】

    2023-11-19 19:59:44
  • Python 实现引用其他.py文件中的类和类的方法

    2023-08-02 10:38:01
  • python操作xml文件详细介绍

    2022-02-02 23:11:57
  • MySQL OOM(内存溢出)的解决思路

    2024-01-26 08:38:26
  • Node.js(安装,启动,测试)

    2024-05-13 09:29:28
  • 详解Python字典的运算

    2021-02-15 16:28:19
  • 输入法下keyup失效的解决方案

    2007-11-01 12:57:00
  • asp使用shotgraph组件生成数字和字母验证码

    2007-09-26 12:26:00
  • python中把嵌套的列表合并成一个列表方法总结

    2022-06-07 04:11:22
  • asp之家 网络编程 m.aspxhome.com