Python实现小游戏2048

本文介绍了如何使用Python的turtle库和random库实现2048小游戏。首先通过turtle库建立游戏画布和16个方块,然后在空位随机生成2或4的方块。游戏规则包括判断移动是否违规、合并相同数值的方块、记录并更新分数。文章详细阐述了界面规划、功能实现以及源代码,并提供了运行截图。最后,作者提到游戏在小白叶书的指导下完成,欢迎有经验者提供改进意见。
摘要由CSDN通过智能技术生成

思路分析

首先我们先建立一个背景板画布和16个海龟块,这里使用的就是turtle库。每次移动在空白的地方随机出现一块2或4的方块,这里使用random库,在上下左右移动的时候要判断移动是否违规,两个海龟块的数值一样时要进行合并,在所有位置都有方块后要判断能否继续进行下一次移动,不能的话要给出重新开始方法,游戏中需要实时记录下分数,同时与最高得分进行比较同步更新。

模块划分

界面规划

先创建一个画布,调试出合适的大小、背景和标题

boundary = turtle.Screen()
boundary.setup(430, 630, 500, 10)
boundary.bgcolor('gray')
boundary.title('2048')

注册图片

#写两个示范一下,其他的就先省略了
boundary.register_shape('2.gif')
boundary.register_shape('4.gif')

再设置16个方块和其他细节的大概位置

allpos = [(-150, 50), (-50, 50), (50, 50), (150, 50),
          (-150, -50), (-50, -50), (50, -50), (150, -50),
          (-150, -150), (-50, -150), (50, -150), (150, -150),
          (-150, -250), (-50, -250), (50, -250), (150, -250)]

再设计出一个背景类用于游戏图片的添加

class Background(turtle.Turtle):
    def __init__(self):
        super().__init__()
        self.penup()
	def show_text(self):
        self.color('white', 'white')
        self.goto(-215, 120)
        self.begin_fill()
        self.pd()
        self.goto(215, 120)
        self.goto(215, 110)
        self.goto(-215, 110)
        self.end_fill()
        self.pu()
        self.shape('title.gif')
        self.goto(-125, 210)
        self.stamp()
        self.shape('score.gif')
        self.goto(125, 245)
        self.stamp()
        self.shape('top_score.gif')
        self.goto(125, 170)
        self.stamp()

设计出得分数字的字体和颜色,同理最高分数和游戏提示可以写出

def show_score(self, score):
        self.color('white')
        self.goto(125, 210)
        self.clear()
        self.write(f'{score}', align='center', font=("Arial", 20, "bold"))

功能实现

先随机生成一个数字块

class Block(turtle.Turtle):
    def __init__(self):
        super().__init__()
        self.penup()
	def grow(self):
        num = random.choice([2, 2, 2, 2, 4])
        self.shape(f'{num}.gif')
        a = random.choice(allpos)
        self.goto(a)
        allpos.remove(a)
        block_list.append(self)

上下左右移动,最多的移动三格,每次移动一格坐标的x或y加减100,同时生成一个新的数字块

	def go_down(self):
        self.go(-150, -50, 50, 0, -100, True)
    def go_up(self):
        self.go(-50, -150, -250, 0, 100, True)
    def go_left(self):
        self.go(-50, 50, 150, -100, 0, False)
    def go_right(self):
        self.go(50, -50, -150, 100
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值