【py小游戏系列】记忆宫殿,儿时的回忆|Python 主题月

1,328 阅读2分钟

本文正在参加「Python主题月」,详情查看 活动链接

hello大家好,今天我又发现了个有趣的小玩意。我是专写有趣小玩意的老诗。

相信很多人都玩过翻拍记忆的游戏,当两张牌的数字是相同的,那么牌就显示出来,否则牌会隐藏了。

老规矩,先上效果图

1111.gif

Memory翻译过来是记忆,该游戏给出一些宫格,点击每一个小宫格会显示背后藏的数字,但会快速消失,当你成功选中两个相同的数字之后就会显示为拼图,可玩性还是很高的

初始化变量

car = path('car.gif')
tiles = list(range(32)) * 2
state = {'mark': None}
hide = [True] * 64

car是在项目中的图片,也就是最后会显示的拼图模样。 tiles就是随机的数字 state是用来做标记的 hide是用于保存是否需要隐藏拼图

画格子

def square(x, y):
    "Draw white square with black outline at (x, y)."
    up()
    goto(x, y)
    down()
    color('black', 'white')
    begin_fill()
    for count in range(4):
        forward(50)
        left(90)
    end_fill()

在xy的位置画出方格

方格和坐标的转换

def index(x, y):
    "Convert (x, y) coordinates to tiles index."
    return int((x + 200) // 50 + ((y + 200) // 50) * 8)

def xy(count):
    "Convert tiles count to (x, y) coordinates."
    return (count % 8) * 50 - 200, (count // 8) * 50 - 200

我们需要将坐标和方格的数字进行快速转换,这样子可以方便计算。

核心逻辑

def draw():
    "Draw image and tiles."
    clear()
    goto(0, 0)
    shape(car)
    stamp()

    for count in range(64):
        if hide[count]:
            x, y = xy(count)
            square(x, y)

    mark = state['mark']

    if mark is not None and hide[mark]:
        x, y = xy(mark)
        up()
        goto(x + 2, y)
        color('black')
        write(tiles[mark], font=('Arial', 30, 'normal'))

    update()
    ontimer(draw, 100)

这里面是整个小游戏的核心逻辑。如何找出相同的数字,那就可以将隐藏的汽车图片画出来。如何不是相同的数字,那就把数字再一次隐藏掉。整个逻辑使用了ontimer进行定时死循环。所以每100毫秒数字就会遍历一遍64个格子。并且用square画上白色的方格,效果也就是把数字给隐藏了。

整体而言,游戏并不是太难,也很容易就可以学会。上面的思想还是说的比较清楚的。有需要拿完整源码的话,请移步到公众号:诗一样的代码。既然进来了,原创不易。小伙伴点个赞再走呗

合集系列:

【py小游戏系列】吃豆人,儿时的回忆|Python 主题月

【py小游戏系列】贪吃蛇,儿时的回忆|Python 主题月

【py小游戏系列】井字棋,儿时的回忆|Python 主题月

【py小游戏系列】记忆宫殿,儿时的回忆|Python 主题月