【python教程入门学习】Python实例:小游戏2048

本节教程通过 2048 的小游戏快速、完整地呈现了使用 Python 语言编程的过程,将之前介绍的内容有机地结合在了一起 。2048是一款流行于手机、平板等终端设备上的益智小游戏,最早于 2014 年 3 月发行,主界面如图 1 所示。

2048小游戏的主界面

图 1:2048 小游戏的主界面

其游戏规则是:每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢,系统也会在空白的地方随机出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。系统给予的数字方块不是 2 就是 4,玩家要想办法在这小小的 16 格范围中凑出“2048”这个数字方块。

网友总结的游戏技巧有:

  • 最大数尽可能放在角落;
  • 数字按顺序紧邻排列;
  • 首先满足最大数和次大数在的那一列/行是满的;
  • 时刻注意活动较大数(32以上)旁边要有相近的数;
  • 以大数所在的一行为主要移动方向;
  • 不要急于“清理桌面”;
  • 根据游戏规则,可以整理出游戏的流程,如图 2 所示。

2048小游戏的主要流程

图 2:2048 小游戏的主要流程

根据流程图,可以将整个游戏程序大致分为三个部分:

  1. 程序初始化;
  2. 判断用户输入;
  3. 进入游戏主循环。

其中第三部分可以继续细分为以下三个部分:

  1. 等待操作;
  2. 判断操作并处理;
  3. 重新开始或退出。

为了游戏界面效果美观,这里使用了 pygame 库。安装 pygame 库的命令如下:


1.  pip install pygame

安装过程如图 3 所示。

pygame库安装过程

图 3:pygame 库安装过程

下面我们继续关注 2048 小游戏。首先来看程序初始化,这里主要完成以下工作:导入所需模块,初始化棋盘和窗口界面,初始化各种组件和变量。根据游戏规则,棋盘大小为 4×4 共 16 格的正方形棋盘,简便起见我们使用二维列表存储每个格子里的数字。

定义棋盘并初始化每个格子存储的数字的语句如下:

board = [[0, 0, 0, 0]
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]

以下语句用于初始化窗口的相关属性:

#每个格子的边长,单位:像素(下同)
box_size = 50
#格子之间的间距
box_gap = 5
#中心棋盘区域上边缘离窗口顶部的距离
top_of_window = 100
#中心棋盘区域下边缘离窗口底部的距离
bottom_of_window = 30
#中心棋盘区域左边缘离窗口左边的距离
left_of_window = 2 0
#窗口宽度
window_width = box_size * 4 + box_gap * 5 + left_of_window * 2
#窗口高度
window_height = top_of_window + box_gap * 5 + box_size * 4 + left_of_window + bottom_of_window
#初始化窗口
window = pygame.display.set_mode((window_width, window_height), 0, 32)
#窗口标题
pygame.display.set_caption("2048")
#得分
score = 0
#使用 pygame 内置颜色值定义一些颜色常量
OLDLACE = pygame.color.THECOLORS["oldlacen"]
IVORY = pygame.color.THECOLORS["ivory3"]
BLACK = pygame.color.THECOLORS["black"]
RED = pygame.color.THECOLORS["red"]
RED2 = pygame.color.THECOLORS["red2"]
DARKGOLD = pygame.color.THECOLORS["darkgoldenrodl"]
GOLD = pygame.color.THECOLORS["gold"]
GRAY = pygame.color.THECOLORS["gray41"]
CHOCOLATE = pygame.color.THECOLORS["chocolate"]
CHOCOLATE1 = pygame.color.THECOLORS["chocolate1"]
CORAL = pygame.color.THECOLORS["coral"]
CORAL2 = pygame.color.THECOLORS["coral2"]
ORANGED = pygame.color.THECOLORS["orangered"]
ORANGED2 = pygame.color.THECOLORS["orangered2"]
DARKORANGE = pygame.color.THECOLORS["darkorange"]
DARKORANGE2 = pygame.color.THECOLORS["darkorange2"]
FORESTGREEN = pygame.color.THECOLORS["forestgreen"]
#界面字体
FONTNAME = "SimHei"

绘制棋盘格子主要由 Box 类和 draw_box( ) 函数完成:

class Box:
    def __init__(self, topleft, text, color):
        self.topleft = topleft
        self.text = text
        self.color = color
    def render(self, surface):
        x, y = self.topleft
        #绘制棋盘格
        pygame.draw.rect(surface, self.color, (xz y, box_size, box_ size))
        #定义棋盘格中数字的高度
        text_height = int(box_size * 0.35)
        #设置棋盘格中数字使用的字体
        font_obj = pygame.font.SysFont(FONTNAME, text_height)
        text_surface = font_obj.render(self.text, True, BLACK)
        text_rect = text_surface.get_rect()
        text_rect.center = (x + box_size / 2, y + box_size / 2)
        surface.blit(text_surface, text_rect)
def draw_box():
    giobal board
    #定义棋盘上每个格子中不同数字的颜色
    colors = {
   0 : (192, 192, 192) , 2 : (176, 224, 230
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值