本文正在参加「Python主题月」,详情查看 活动链接
hello大家好,今天我又发现了个有趣的小玩意。我是专写有趣小玩意的老诗。
相信很多人都玩过翻拍记忆的游戏,当两张牌的数字是相同的,那么牌就显示出来,否则牌会隐藏了。
老规矩,先上效果图
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画上白色的方格,效果也就是把数字给隐藏了。
整体而言,游戏并不是太难,也很容易就可以学会。上面的思想还是说的比较清楚的。有需要拿完整源码的话,请移步到公众号:诗一样的代码。既然进来了,原创不易。小伙伴点个赞再走呗。
合集系列: