pygame разработка небольших игр - тетрис

Заявление об авторском праве: оригинальность непростая задача, плагиат и перепечатка в этой статье запрещены, нарушение должно быть расследовано!

1. Среда разработки и анализ требований

Среда разработки: python3.6.4
Сторонняя библиотека: pygame1.9.6
Интегрированная среда разработки: PyCharm/Sublime Text

  • Используя pygame для разработки игр Tetris, игровой интерфейс предоставляется слева, а интерфейс отображения — справа, включая счет игры, скорость куба и форму следующего куба.
  • Реализуйте интерактивные действия, такие как вращение спрайта игрового куба, стыковка и устранение
  • Используйте двумерные массивы для реализации 7 различных типов игровых кубиков, и вы можете изменить форму кубов, регулируя параметры массива.
  • Добавьте линии сетки, чтобы сделать спрайт блока более интуитивно понятным и понятным.

2. Функциональные модули

инициализация игры

SIZE = 30  # 每个小方格大小
BLOCK_HEIGHT = 25  # 游戏区高度
BLOCK_WIDTH = 10   # 游戏区宽度
BORDER_WIDTH = 4   # 游戏区边框宽度
BORDER_COLOR = (40, 40, 200)  # 游戏区边框颜色
SCREEN_WIDTH = SIZE * (BLOCK_WIDTH + 5)  # 游戏屏幕的宽
SCREEN_HEIGHT = SIZE * BLOCK_HEIGHT      # 游戏屏幕的高
BG_COLOR = (40, 40, 60)  # 背景色
BLOCK_COLOR = (20, 128, 200)  #
BLACK = (0, 0, 0)
RED = (200, 30, 30)      # GAME OVER 的字体颜色
def main():
    pygame.init()
    screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
    pygame.display.set_caption('俄罗斯方块')


определение блока

# S形方块
S_BLOCK = [Block(['.OO',
                  'OO.',
                  '...'], Point(0, 0), Point(2, 1), 'S', 1),
           Block(['O..',
                  'OO.',
                  '.O.'], Point(0, 0), Point(1, 2), 'S', 0)]
# Z形方块
Z_BLOCK = [Block(['OO.',
                  '.OO',
                  '...'], Point(0, 0), Point(2, 1), 'Z', 1),
           Block(['.O.',
                  'OO.',
                  'O..'], Point(0, 0), Point(1, 2), 'Z', 0)]


Определить, может ли он вращаться, падать и двигаться

def _judge(pos_x, pos_y, block):
        nonlocal game_area
        for _i in range(block.start_pos.Y, block.end_pos.Y + 1):
            if pos_y + block.end_pos.Y >= BLOCK_HEIGHT:
                return False
            for _j in range(block.start_pos.X, block.end_pos.X + 1):
                if pos_y + _i >= 0 and block.template[_i][_j] != '.' and game_area[pos_y + _i][pos_x + _j] != '.':
                    return False
        return True


блок-док

def _dock():
        nonlocal cur_block, next_block, game_area, cur_pos_x, cur_pos_y, game_over, score, speed
        for _i in range(cur_block.start_pos.Y, cur_block.end_pos.Y + 1):
            for _j in range(cur_block.start_pos.X, cur_block.end_pos.X + 1):
                if cur_block.template[_i][_j] != '.':
                    game_area[cur_pos_y + _i][cur_pos_x + _j] = '0'
        if cur_pos_y + cur_block.start_pos.Y <= 0:
            game_over = True
        else:
            # 计算消除
            remove_idxs = []
            for _i in range(cur_block.start_pos.Y, cur_block.end_pos.Y + 1):
                if all(_x == '0' for _x in game_area[cur_pos_y + _i]):
                    remove_idxs.append(cur_pos_y + _i)


Линии сетки

def _draw_gridlines(screen):
    # 画网格线 竖线
    for x in range(BLOCK_WIDTH):
        pygame.draw.line(screen, BLACK, (x * SIZE, 0), (x * SIZE, SCREEN_HEIGHT), 1)
    # 画网格线 横线
    for y in range(BLOCK_HEIGHT):
        pygame.draw.line(screen, BLACK, (0, y * SIZE), (BLOCK_WIDTH * SIZE, y * SIZE), 1)


Доля

def _draw_info(screen, font, pos_x, font_height, score):
    print_text(screen, font, pos_x, 10, f'得分: ')
    print_text(screen, font, pos_x, 10 + font_height + 6, f'{
      
      score}')
    print_text(screen, font, pos_x, 20 + (font_height + 6) * 2, f'速度: ')
    print_text(screen, font, pos_x, 20 + (font_height + 6) * 3, f'{
      
      score // 10000}')
    print_text(screen, font, pos_x, 30 + (font_height + 6) * 4, f'下一个:')


игровой экран
вставьте сюда описание изображения

3. Видео игры

Нажмите на меня, чтобы посмотреть видео , внизу вас ждет сюрприз!

4. Загрузка исходного кода

загрузка исходного кода разработки игр pygame:

  • Подпишитесь на мою исходную публичную учетную запись WeChat : « Xiaohong Xingkong Technology », ответьте « Tetris », чтобы получить исходный код.

5. Информация об авторе

Автор: Рыболовная газета Сяохуна. Цель: сделать программирование более интересным!

Оригинальная общедоступная учетная запись WeChat: « Технология Xiaohong Xingkong », посвященная алгоритмам, поисковым роботам, веб-сайтам, разработке игр, анализу данных, обработке естественного языка, искусственному интеллекту и т. д., с нетерпением жду вашего внимания, давайте расти и кодировать вместе!

Примечание об авторских правах: в этой статье запрещен плагиат и перепечатка, нарушение должно быть расследовано!

рекомендация

отblog.csdn.net/qq_44000141/article/details/121721951