当然可以!使用Python可以很容易地编写俄罗斯方块游戏。以下是一个简单的示例:

import pygame
import random

# 初始化pygame
pygame.init()

# 游戏窗口大小
WINDOW_WIDTH = 400
WINDOW_HEIGHT = 600

# 方块大小
BLOCK_SIZE = 20

# 方块的颜色
COLORS = [(0, 0, 0), (255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0)]

# 游戏窗口
game_window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))

# 游戏标题
pygame.display.set_caption("Tetris")

# 创建方块形状
T_SHAPE = [[1, 1, 1], [0, 1, 0]]
O_SHAPE = [[1, 1], [1, 1]]
L_SHAPE = [[1, 0], [1, 0], [1, 1]]
J_SHAPE = [[0, 1], [0, 1], [1, 1]]
I_SHAPE = [[1], [1], [1], [1]]
S_SHAPE = [[0, 1, 1], [1, 1, 0]]
Z_SHAPE = [[1, 1, 0], [0, 1, 1]]

# 所有方块形状
SHAPES = [T_SHAPE, O_SHAPE, L_SHAPE, J_SHAPE, I_SHAPE, S_SHAPE, Z_SHAPE]

# 方块类
class Block:
    def __init__(self, x, y, shape):
        self.x = x
        self.y = y
        self.shape = shape
        self.color = random.choice(COLORS)

    def draw(self):
        for i in range(len(self.shape)):
            for j in range(len(self.shape[0])):
                if self.shape[i][j] == 1:
                    pygame.draw.rect(game_window, self.color, (self.x + j * BLOCK_SIZE, self.y + i * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE))

    def move_left(self):
        self.x -= BLOCK_SIZE

    def move_right(self):
        self.x += BLOCK_SIZE

    def move_down(self):
        self.y += BLOCK_SIZE

    def rotate(self):
        self.shape = [[self.shape[j][i] for j in range(len(self.shape))] for i in range(len(self.shape[0]))]

    def can_move_left(self, blocks):
        for i in range(len(self.shape)):
            for j in range(len(self.shape[0])):
                if self.shape[i][j] == 1:
                    if self.x + j * BLOCK_SIZE <= 0:
                        return False
                    for block in blocks:
                        if block != self and block.y == self.y + i * BLOCK_SIZE and block.x == self.x + j * BLOCK_SIZE - BLOCK_SIZE:
                            return False
        return True

    def can_move_right(self, blocks):
        for i in range(len(self.shape)):
            for j in range(len(self.shape[0])):
                if self.shape[i][j] == 1:
                    if self.x + j * BLOCK_SIZE >= WINDOW_WIDTH - BLOCK_SIZE:
                        return False
                    for block in blocks:
                        if block != self and block.y == self.y + i * BLOCK_SIZE and block.x == self.x + j * BLOCK_SIZE + BLOCK_SIZE:
                            return False
        return True

    def can_move_down(self, blocks):
        for i in range(len(self.shape)):
            for j in range(len(self.shape[0])):
                if self.shape[i][j] == 1:
                    if self.y + i * BLOCK_SIZE >= WINDOW_HEIGHT - BLOCK_SIZE:
                        return False
                    for block in blocks:
                        if block != self and block.y == self.y + i * BLOCK_SIZE + BLOCK_SIZE and block.x == self.x + j * BLOCK_SIZE:
                            return False
        return True

    def can_rotate(self, blocks):
        temp_shape = [[self.shape[j][i] for j in range(len(self.shape))] for i in range(len(self.shape[0]))]
        for i in range(len(temp_shape)):
            for j in range(len(temp_shape[0])):
                if temp_shape[i][j] == 1:
                    if self.x + j * BLOCK_SIZE < 0 or self.x + j * BLOCK_SIZE >= WINDOW_WIDTH or self.y + i * BLOCK_SIZE >= WINDOW_HEIGHT:
                        return False
                    for block in blocks:
                        if block != self and block.y == self.y + i * BLOCK_SIZE and block.x == self.x + j * BLOCK_SIZE:
                            return False
        return True

# 游戏主循环
def main():
    # 初始化变量
    blocks = []
    score = 0
    game_over = False
    clock = pygame.time.Clock()
    fall_time = 0
    fall_speed = 0.5
    current_block = Block(WINDOW_WIDTH // 2, 0, random.choice(SHAPES))
    next_block = Block(WINDOW_WIDTH + BLOCK_SIZE * 6, BLOCK_SIZE, random.choice(SHAPES))

    # 游戏循环
    while not game_over:
        # 处理事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over = True
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT and current_block.can_move_left(blocks):
                    current_block.move_left()
                elif event.key == pygame.K_RIGHT and current_block.can_move_right(blocks):
                    current_block.move_right()
                elif event.key == pygame.K_DOWN and current_block.can_move_down(blocks):
                    current_block.move_down()
                elif event.key == pygame.K_UP and current_block.can_rotate(blocks):
                    current_block.rotate()

        # 计算时间
        fall_time += clock.tick() / 1000.0

        # 生成新方块
        if current_block.y >= next_block.y:
            current_block = next_block
            next_block = Block(WINDOW_WIDTH + BLOCK_SIZE * 6, BLOCK_SIZE, random.choice(SHAPES))

        # 方块下落
        if fall_time >= fall_speed:
            if current_block.can_move_down(blocks):
                current_block.move_down()
            else:
                blocks.append(current_block)
                current_block = next_block
                next_block = Block(WINDOW_WIDTH + BLOCK_SIZE * 6, BLOCK_SIZE, random.choice(SHAPES))

                # 消除满行
                for i in range(WINDOW_HEIGHT // BLOCK_SIZE):
                    row = [(block.x, block.y) for block in blocks if block.y == i * BLOCK_SIZE]
                    if len(row) == WINDOW_WIDTH // BLOCK_SIZE:
                        for block in blocks:
                            if block.y == i * BLOCK_SIZE:
                                blocks.remove(block)
                        for block in blocks:
                            if block.y < i * BLOCK_SIZE:
                                block.move_down()
                        score += 10

            fall_time = 0

        # 绘制背景
        game_window.fill((255, 255, 255))

        # 绘制方块
        for block in blocks:
            block.draw()
        current_block.draw()
        next_block.draw()

        # 绘制得分
        font = pygame.font.Font(None, 36)
        text = font.render("Score: " + str(score), True, (0, 0, 0))
        game_window.blit(text, (10, 10))

        # 更新窗口
        pygame.display.update()

    # 退出游戏
    pygame.quit()

if __name__ == '__main__':
    main()

这个示例中,我们使用了pygame模块来创建游戏窗口,并使用Block类来管理方块的位置、形状和颜色。在游戏主循环中,我们处理玩家的按键事件,并移动或旋转方块。同时,我们还计算方块下落的时间,并在一定时间间隔内将方块向下移动。当方块无法再向下移动时,我们将其添加到blocks列表中,并生成下一个方块。在添加方块之后,我们检查是否有行已经被填满,如果是,则将其从blocks列表中删除,并将上面的方块向下移动,同时增加玩家的分数。最后,我们在游戏窗口中绘制方块和得分,并更新窗口

能不能用python写一个俄罗斯方块游戏

原文地址: https://www.cveoy.top/t/topic/eiZo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录