python写的2048游戏,源代码,pygame

python写的2048游戏,源代码,pygame

代码全是自己写的注释 (怕以后自己再回头看自己写的 看不懂 )

所有的逻辑基本都写在注释里了

代码肯定不是最简洁的,包含注释400行了

但是应该是相对来说很容易看懂的

毕竟自己作为一个初学者,在网上看了2048的各种代码,就没有一眼能看明白的 ,都需要从头到尾对照着变量看好几遍才能理解,当然还有很多不理解的

所以 最终还是自己整理了思路,自己来吧

自己修正了一个bug

在move_up()和move_down()这两个函数里,我原来写的list_zero=matrix[x],后来运行了发现如果出现类似

0 0 0 0

0 0 0 0

2 4 8 16

8 2 4 8

这个情况时,上下移动不生成新数字,左右又不能移动了,死循环了

后来发现是这个赋值,其实是复制了内存地址,并没有复制实际内容

-*- coding: utf-8 -*-
__/author__by:Kevin_F/__

import sys
import random
import pygame

matrix = []      # 二维数组,用于存放数字
list_zero = []   # 用一个集合去放矩阵中空的元素(即数字为0)的下标(x,y)
score = 0        # 得分
is_add = False    # 用于判断是否需要生成新的数字,默认不生成新数字
colors = {0: (205, 193, 180),  # 各种方块对应的颜色
          2: (238, 228, 218),
          4: (237, 224, 200),
          8: (242, 177, 121),
          16: (245, 149, 99),
          32: (246, 124, 95),
          64: (246, 94, 59),
          128: (237, 207, 114),
          256: (237, 204, 98),
          512: (237, 200, 80),
          1024: (237, 197, 63),
          2048: (225, 187, 0),
          4096: (225, 187, 0),
          8192: (225, 187, 0)
          }

 初始化游戏界面
 每个方块尺寸100*100,间隔15,整个矩阵上方留高150空间,用于显示得分和游戏结束的信息
def game_init():
    #  背景
    pygame.init()
    global screen
    screen = pygame.display.set_mode((475, 625))
    pygame.display.set_caption('Game-2048 by:Kevin_X    按ESC可重新开始游戏')
    screen.fill((255, 222, 173))
    #  得分区
    pygame.draw.rect(screen, (255, 239, 213), (0, 0, 475, 150), 0)
    font_defen = pygame.font.SysFont('SimHei', 50)
    text_defen = font_defen.render('得分', True, (205, 193, 180))
    screen.blit(text_defen, (40, 10))

    pygame.display.flip()

 分数显示
def show_score(score):
    #   分数显示框
    pygame.draw.rect(screen, (255, 255, 255), (20, 70, 140, 70), 0)
    #   分数会不断累积变化
    font_score = pygame.font.SysFont('SimHei', 50)
    text_score = font_score.render(str(score), True, (255, 97, 0))
    tx2, ty2 = text_score.get_size()
    screen.blit(text_score, (90 - tx2 / 2, 105 - ty2 / 2))
    pygame.display.update()
    #    每次相加,分数都会发生变化,都需要重写  所以把分数显示单独开来,而不能跟游戏初始化放在一起
    #    分数显示框是一个矩形框,每次显示分数时,先重画矩形框,然后再写入分数值

 初始化矩阵,用于存放数字
 4*4的矩阵,共16个数字,0表示方块为空,不显示内容,其他数字正常显示数值
def _game_list():
    for i in range(4):  # 初始设置全为0
        lis = []
        for j in range(4):
            lis.append(0)
        matrix.append(lis)

 显示游戏区域:游戏方块和数字
 矩阵里每一个数字包含几个信息:数字内容,数字XY坐标,方块XY坐标,方块颜色色&#

Original: https://blog.csdn.net/weixin_65922074/article/details/126315230
Author: weixin_65922074
Title: python写的2048游戏,源代码,pygame

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/779689/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球