翼度科技»论坛 编程开发 python 查看内容

chatgpt写程序-python小游戏-2048-pygame

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
闲的没事,用chatpgt弄了个小游戏,2048,利用pygame实现,无额外贴图。
只需要告诉他写个python游戏2048,只用pygame实现,不要额外贴图。然后在他暂停后说请继续,最后会有一些bug,把报错告诉他,慢慢改,10分钟就可以完成。
效果如下图:



 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
具体代码如下:
  1. import pygame
  2. import random
  3. # 游戏界面的尺寸
  4. WIDTH = 400
  5. HEIGHT = 400
  6. # 游戏界面的背景颜色
  7. BACKGROUND_COLOR = (187, 173, 160)
  8. TEXT_COLOR = (119, 110, 101)
  9. GAME_OVER_COLOR = (0, 0, 0)
  10. # 格子的尺寸和间距
  11. CELL_SIZE = 80
  12. CELL_MARGIN = 10
  13. TILE_SIZE = 100
  14. TILE_MARGIN = 10
  15. GAME_OVER_FONT_SIZE = 72
  16. SIZE = 500
  17. # 数字方块的颜色和字体
  18. TILE_COLORS = {
  19.     0: (204, 192, 179),
  20.     2: (238, 228, 218),
  21.     4: (237, 224, 200),
  22.     8: (242, 177, 121),
  23.     16: (245, 149, 99),
  24.     32: (246, 124, 95),
  25.     64: (246, 94, 59),
  26.     128: (237, 207, 114),
  27.     256: (237, 204, 97),
  28.     512: (237, 200, 80),
  29.     1024: (237, 197, 63),
  30.     2048: (237, 194, 46),
  31.     4096: (174, 207, 48)
  32. }
  33. pygame.font.init()
  34. TILE_FONT = pygame.font.SysFont("Arial", 40, bold=True)
  35. def draw_text(surface, text, color, x, y):
  36.     """
  37.     在指定位置绘制文本
  38.     """
  39.     text_surface = TILE_FONT.render(text, True, color)
  40.     text_rect = text_surface.get_rect()
  41.     text_rect.center = (x, y)
  42.     surface.blit(text_surface, text_rect)
  43. def draw_tile(surface, x, y, value):
  44.     """
  45.     在指定位置绘制数字方块
  46.     """
  47.     color = TILE_COLORS[value]
  48.     pygame.draw.rect(surface, color, (x, y, CELL_SIZE, CELL_SIZE))
  49.     if value != 0:
  50.         text_color = (255, 255, 255) if value < 8 else (119, 110, 101)
  51.         draw_text(surface, str(value), text_color, x + CELL_SIZE / 2, y + CELL_SIZE / 2)
  52. def draw_board(surface, board):
  53.     """
  54.     绘制游戏界面上的数字方块
  55.     """
  56.     for row in range(4):
  57.         for col in range(4):
  58.             x = col * CELL_SIZE + (col + 1) * CELL_MARGIN
  59.             y = row * CELL_SIZE + (row + 1) * CELL_MARGIN
  60.             draw_tile(surface, x, y, board[row][col])
  61. def generate_tile(board):
  62.     """
  63.     在空白格子中随机生成数字方块
  64.     """
  65.     available_cells = []
  66.     for row in range(4):
  67.         for col in range(4):
  68.             if board[row][col] == 0:
  69.                 available_cells.append((row, col))
  70.     if available_cells:
  71.         row, col = random.choice(available_cells)
  72.         board[row][col] = 2
  73.         return True
  74.     else:
  75.         return False
  76. def move_tiles(board, direction):
  77.     """
  78.     根据方向移动数字方块
  79.     """
  80.     moved = False
  81.     if direction == "left":
  82.         for row in range(4):
  83.             for col in range(1, 4):
  84.                 if board[row][col] != 0:
  85.                     for k in range(col):
  86.                         if board[row][k] == 0 and no_obstacles(board, row, k, row, col):
  87.                             board[row][k] = board[row][col]
  88.                             board[row][col] = 0
  89.                             moved = True
  90.                             break
  91.                         elif board[row][k] == board[row][col] and no_obstacles(board, row, k, row, col):
  92.                             board[row][k] *= 2
  93.                             board[row][col] = 0
  94.                             moved = True
  95.                             break
  96.     elif direction == "right":
  97.         for row in range(4):
  98.             for col in range(2, -1, -1):
  99.                 if board[row][col] != 0:
  100.                     for k in range(3, col, -1):
  101.                         if board[row][k] == 0 and no_obstacles(board, row, col, row, k):
  102.                             board[row][k] = board[row][col]
  103.                             board[row][col] = 0
  104.                             moved = True
  105.                             break
  106.                         elif board[row][k] == board[row][col] and no_obstacles(board, row, col, row, k):
  107.                             board[row][k] *= 2
  108.                             board[row][col] = 0
  109.                             moved = True
  110.                             break
  111.     elif direction == "up":
  112.         for col in range(4):
  113.             for row in range(1, 4):
  114.                 if board[row][col] != 0:
  115.                     for k in range(row):
  116.                         if board[k][col] == 0 and no_obstacles(board, k, col, row, col):
  117.                             board[k][col] = board[row][col]
  118.                             board[row][col] = 0
  119.                             moved = True
  120.                             break
  121.                         elif board[k][col] == board[row][col] and no_obstacles(board, k, col, row, col):
  122.                             board[k][col] *= 2
  123.                             board[row][col] = 0
  124.                             moved = True
  125.                             break
  126.     elif direction == "down":
  127.         for col in range(4):
  128.             for row in range(2, -1, -1):
  129.                 if board[row][col] != 0:
  130.                     for k in range(3, row, -1):
  131.                         if board[k][col] == 0 and no_obstacles(board, row, col, k, col):
  132.                             board[k][col] = board[row][col]
  133.                             board[row][col] = 0
  134.                             moved = True
  135.                             break
  136.                         elif board[k][col] == board[row][col] and no_obstacles(board, row, col, k, col):
  137.                             board[k][col] *= 2
  138.                             board[row][col] = 0
  139.                             moved = True
  140.                             break
  141.     return moved
  142. def no_obstacles(board, row1, col1, row2, col2):
  143.     """
  144.     判断两个位置之间是否有障碍物(即是否有数字方块)
  145.     """
  146.     if row1 == row2:
  147.         for col in range(col1 + 1, col2):
  148.             if board[row1][col] != 0:
  149.                 return False
  150.     elif col1 == col2:
  151.         for row in range(row1 + 1, row2):
  152.             if board[row][col1] != 0:
  153.                 return False
  154.     return True
  155. def game_over(board):
  156.     """
  157.     判断游戏是否结束
  158.     """
  159.     for row in range(4):
  160.         for col in range(4):
  161.             if board[row][col] == 0:
  162.                 return False
  163.     for row in range(4):
  164.         for col in range(3):
  165.             if board[row][col] == board[row][col + 1]:
  166.                 return False
  167.     for col in range(4):
  168.         for row in range(3):
  169.             if board[row][col] == board[row + 1][col]:
  170.                 return False
  171.     return True
  172. def add_new_tile(board):
  173.     # 查找所有空白的方格
  174.     empty_tiles = [(i, j) for i in range(4) for j in range(4) if board[i][j] == 0]
  175.     # 如果没有空白的方格,返回 False
  176.     if len(empty_tiles) == 0:
  177.         return False
  178.     # 随机选择一个空白的方格,并随机放入数字 2 或 4
  179.     row, col = random.choice(empty_tiles)
  180.     board[row][col] = random.choice([2, 4])
  181.     return True
  182. def get_tile_color(value):
  183.     colors = {
  184.         2: (238, 228, 218),
  185.         4: (237, 224, 200),
  186.         8: (242, 177, 121),
  187.         16: (245, 149, 99),
  188.         32: (246, 124, 95),
  189.         64: (246, 94, 59),
  190.         128: (237, 207, 114),
  191.         256: (237, 204, 97),
  192.         512: (237, 200, 80),
  193.         1024: (237, 197, 63),
  194.         2048: (237, 194, 46),
  195.     }
  196.     return colors.get(value, (0, 0, 0))
  197. def get_font_size(value):
  198.     if value < 100:
  199.         return 64
  200.     elif value < 1000:
  201.         return 48
  202.     else:
  203.         return 36
  204. def main():
  205.     # 初始化游戏界面
  206.     pygame.init()
  207.     screen = pygame.display.set_mode((SIZE, SIZE))
  208.     pygame.display.set_caption("2048 Game")
  209.     # 初始化游戏板
  210.     board = [[0] * 4 for i in range(4)]
  211.     add_new_tile(board)
  212.     add_new_tile(board)
  213.     while True:
  214.         # 处理事件
  215.         for event in pygame.event.get():
  216.             if event.type == pygame.QUIT:
  217.                 pygame.quit()
  218.                 sys.exit()
  219.             elif event.type == pygame.KEYDOWN:
  220.                 moved = False
  221.                 if event.key == pygame.K_LEFT:
  222.                     moved = move_tiles(board, "left")
  223.                 elif event.key == pygame.K_RIGHT:
  224.                     moved = move_tiles(board, "right")
  225.                 elif event.key == pygame.K_UP:
  226.                     moved = move_tiles(board, "up")
  227.                 elif event.key == pygame.K_DOWN:
  228.                     moved = move_tiles(board, "down")
  229.                 if moved:
  230.                     add_new_tile(board)
  231.         # 绘制游戏界面
  232.         screen.fill(BACKGROUND_COLOR)
  233.         for row in range(4):
  234.             for col in range(4):
  235.                 x = col * TILE_SIZE + TILE_MARGIN * (col + 1)
  236.                 y = row * TILE_SIZE + TILE_MARGIN * (row + 1)
  237.                 tile_color = get_tile_color(board[row][col])
  238.                 pygame.draw.rect(screen, tile_color, (x, y, TILE_SIZE, TILE_SIZE))
  239.                 if board[row][col] != 0:
  240.                     font_size = get_font_size(board[row][col])
  241.                     font = pygame.font.Font(None, font_size)
  242.                     text = font.render(str(board[row][col]), True, TEXT_COLOR)
  243.                     text_rect = text.get_rect()
  244.                     text_rect.center = (x + TILE_SIZE / 2, y + TILE_SIZE / 2)
  245.                     screen.blit(text, text_rect)
  246.         # 判断游戏是否结束
  247.         if game_over(board):
  248.             font = pygame.font.Font(None, GAME_OVER_FONT_SIZE)
  249.             text = font.render("Game Over!", True, GAME_OVER_COLOR)
  250.             text_rect = text.get_rect()
  251.             text_rect.center = (SIZE / 2, SIZE / 2)
  252.             screen.blit(text, text_rect)
  253.         pygame.display.update()
  254. if __name__ == "__main__":
  255.     main()
复制代码
 

来源:https://www.cnblogs.com/Brinshy/p/17247146.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具