欢迎光临散文网 会员登陆 & 注册

学了十年Python写了这么个游戏,这次一定教会你

2023-08-16 09:16 作者:bili_60145413013  | 我要投稿

ChatGPT写的代码来喽

import pygame

import random


# 游戏区域大小

WINDOW_WIDTH = 800

WINDOW_HEIGHT = 600

CELL_SIZE = 30


# 方块类型及其形状

SHAPES = [

   [[1, 1, 1, 1]],

   [[1, 1], [1, 1]],

   [[1, 1, 0], [0, 1, 1]],

   [[0, 1, 1], [1, 1, 0]],

   [[1, 1, 1], [0, 0, 1]],

   [[1, 1, 1], [1, 0, 0]],

   [[1, 1, 1], [0, 1, 0]]

]


# 方块颜色

COLORS = [

   (0, 0, 0),

   (255, 0, 0),

   (0, 255, 0),

   (0, 0, 255),

   (255, 255, 0),

   (255, 0, 255),

   (0, 255, 255)

]


def draw_cell(screen, x, y, color):

   pygame.draw.rect(screen, color, (x * CELL_SIZE, y * CELL_SIZE, CELL_SIZE, CELL_SIZE))


def draw_shape(screen, shape, x, y, color):

   for i in range(len(shape)):

       for j in range(len(shape[i])):

           if shape[i][j] == 1:

               draw_cell(screen, x + j, y + i, color)


def check_collision(board, shape, x, y):

   for i in range(len(shape)):

       for j in range(len(shape[i])):

           if shape[i][j] == 1:

               if x + j < 0 or x + j >= len(board[0]) or y + i >= len(board) or board[y + i][x + j] != 0:

                   return True

   return False


def merge_shape(board, shape, x, y):

   for i in range(len(shape)):

       for j in range(len(shape[i])):

           if shape[i][j] == 1:

               board[y + i][x + j] = 1


def remove_completed_lines(board):

   completed_lines = []

   for i in range(len(board)):

       if all(board[i]):

           completed_lines.append(i)

   for line in completed_lines:

       del board[line]

       board.insert(0, [0] * len(board[0]))


def rotate_shape(shape):

   return list(zip(*reversed(shape)))


def main():

   pygame.init()

   screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))

   clock = pygame.time.Clock()


   board_width = WINDOW_WIDTH // CELL_SIZE

   board_height = WINDOW_HEIGHT // CELL_SIZE


   board = [[0] * board_width for _ in range(board_height)]


   current_shape = random.choice(SHAPES)

   current_color = random.choice(COLORS)

   current_x = board_width // 2 - len(current_shape[0]) // 2

   current_y = 0


   game_over = False


   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:

                   if not check_collision(board, current_shape, current_x - 1, current_y):

                       current_x -= 1

               elif event.key == pygame.K_RIGHT:

                   if not check_collision(board, current_shape, current_x + 1, current_y):

                       current_x += 1

               elif event.key == pygame.K_DOWN:

                   if not check_collision(board, current_shape, current_x, current_y + 1):

                       current_y += 1

               elif event.key == pygame.K_UP:

                   rotated_shape = rotate_shape(current_shape)

                   if not check_collision(board, rotated_shape, current_x, current_y):

                       current_shape = rotated_shape


       if not check_collision(board, current_shape, current_x, current_y + 1):

           current_y += 1

       else:

           merge_shape(board, current_shape, current_x, current_y)

           remove_completed_lines(board)

           current_shape = random.choice(SHAPES)

           current_color = random.choice(COLORS)

           current_x = board_width // 2 - len(current_shape[0]) // 2

           current_y = 0

           if check_collision(board, current_shape, current_x, current_y):

               game_over = True


       screen.fill((255, 255, 255))


       for i in range(len(board)):

           for j in range(len(board[i])):

               if board[i][j] == 1:

                   draw_cell(screen, j, i, (0, 0, 0))


       draw_shape(screen, current_shape, current_x, current_y, current_color)


       pygame.display.flip()

       clock.tick(10)


   pygame.quit()


if __name__ == '__main__':

   main()


学了十年Python写了这么个游戏,这次一定教会你的评论 (共 条)

分享到微博请遵守国家法律