闲的没事,用chatpgt弄了个小游戏,2048,利用pygame实现,无额外贴图。
只需要告诉他写个python游戏2048,只用pygame实现,不要额外贴图。然后在他暂停后说请继续,最后会有一些bug,把报错告诉他,慢慢改,10分钟就可以完成。
效果如下图:
具体代码如下:
1 import pygame 2 import random 3 4 # 游戏界面的尺寸 5 WIDTH = 400 6 HEIGHT = 400 7 8 # 游戏界面的背景颜色 9 BACKGROUND_COLOR = (187, 173, 160) 10 TEXT_COLOR = (119, 110, 101) 11 GAME_OVER_COLOR = (0, 0, 0) 12 13 # 格子的尺寸和间距 14 CELL_SIZE = 80 15 CELL_MARGIN = 10 16 TILE_SIZE = 100 17 TILE_MARGIN = 10 18 GAME_OVER_FONT_SIZE = 72 19 SIZE = 500 20 21 # 数字方块的颜色和字体 22 TILE_COLORS = { 23 0: (204, 192, 179), 24 2: (238, 228, 218), 25 4: (237, 224, 200), 26 8: (242, 177, 121), 27 16: (245, 149, 99), 28 32: (246, 124, 95), 29 64: (246, 94, 59), 30 128: (237, 207, 114), 31 256: (237, 204, 97), 32 512: (237, 200, 80), 33 1024: (237, 197, 63), 34 2048: (237, 194, 46), 35 4096: (174, 207, 48) 36 } 37 pygame.font.init() 38 TILE_FONT = pygame.font.SysFont("Arial", 40, bold=True) 39 40 41 def draw_text(surface, text, color, x, y): 42 """ 43 在指定位置绘制文本 44 """ 45 text_surface = TILE_FONT.render(text, True, color) 46 text_rect = text_surface.get_rect() 47 text_rect.center = (x, y) 48 surface.blit(text_surface, text_rect) 49 50 51 def draw_tile(surface, x, y, value): 52 """ 53 在指定位置绘制数字方块 54 """ 55 color = TILE_COLORS[value] 56 pygame.draw.rect(surface, color, (x, y, CELL_SIZE, CELL_SIZE)) 57 if value != 0: 58 text_color = (255, 255, 255) if value < 8 else (119, 110, 101) 59 draw_text(surface, str(value), text_color, x + CELL_SIZE / 2, y + CELL_SIZE / 2) 60 61 62 def draw_board(surface, board): 63 """ 64 绘制游戏界面上的数字方块 65 """ 66 for row in range(4): 67 for col in range(4): 68 x = col * CELL_SIZE + (col + 1) * CELL_MARGIN 69 y = row * CELL_SIZE + (row + 1) * CELL_MARGIN 70 draw_tile(surface, x, y, board[row][col]) 71 72 73 def generate_tile(board): 74 """ 75 在空白格子中随机生成数字方块 76 """ 77 available_cells = [] 78 for row in range(4): 79 for col in range(4): 80 if board[row][col] == 0: 81 available_cells.append((row, col)) 82 if available_cells: 83 row, col = random.choice(available_cells) 84 board[row][col] = 2 85 return True 86 else: 87 return False 88 89 90 def move_tiles(board, direction): 91 """ 92 根据方向移动数字方块 93 """ 94 moved = False 95 if direction == "left": 96 for row in range(4): 97 for col in range(1, 4): 98 if board[row][col] != 0: 99 for k in range(col): 100 if board[row][k] == 0 and no_obstacles(board, row, k, row, col): 101 board[row][k] = board[row][col] 102 board[row][col] = 0 103 moved = True 104 break 105 elif board[row][k] == board[row][col] and no_obstacles(board, row, k, row, col): 106 board[row][k] *= 2 107 board[row][col] = 0 108 moved = True 109 break 110 elif direction == "right": 111 for row in range(4): 112 for col in range(2, -1, -1): 113 if board[row][col] != 0: 114 for k in range(3, col, -1): 115 if board[row][k] == 0 and no_obstacles(board, row, col, row, k): 116 board[row][k] = board[row][col] 117 board[row][col] = 0 118 moved = True 119 break 120 elif board[row][k] == board[row][col] and no_obstacles(board, row, col, row, k): 121 board[row][k] *= 2 122 board[row][col] = 0 123 moved = True 124 break 125 elif direction == "up": 126 for col in range(4): 127 for row in range(1, 4): 128 if board[row][col] != 0: