✨数织游戏✨:Python 制做的成本一毛钱却诚意满满的小礼物!!

前文       

    今天就是七夕了,晓得大家有对象的或者正在追妹子的,确定又在绞尽脑汁想买什么别出新裁的礼物,若是女生感受你的礼物花心思了,那确定是好感度倍增啊。markdown

今天给各位分享一个用 Python 制做的成本一毛钱却诚意满满的小礼物!!

不过须要提醒的是:这个礼物须要妹子花点心思才能领会,没有耐心的那种的妹子,千万不要给她,由于这可能会是分手神器

下面就来讲说,怎么制做这个礼物。app

简单来讲就用一张A4纸,打印个表格,嗯,表格是干啥用?其实就是手绘二维码,固然二维码内容你懂得,利用的下面这个手绘二维码app,会分红格子,提示你哪一个涂黑。▼学习

图片

不过,这种套路貌似被用滥了图片spa

因此今天说的这个明显是手绘二维码的升级版,成本依然是一毛钱,不只你要费心思,女孩也要去费心思,这样才好玩嘛图片code

​「数织游戏」

**来,咱们一步一步来,咱们先说说数织这个游戏,而后你就知道大概用意了。**数织(nonogram)是日本人的数独游戏。orm

以下是数织的规则,简单易懂。分行和列,行和列都标记了一些数字,好比下图的第一行7 1 2 7,表明第一行有四条独立的线,分别占了七、一、2和7格,而每条线最少要由一个空格分开。对象

传统上,玩家是以黑色填满格子,以**“×”号标记必定不须要填充的格子****。因此聪明的你确定就会知道第一列7 1 1 1 7表明什么意思。**▼游戏

图片

因此数织就是以下这样玩,给你的图片只有行列数字,格子须要本身根据规则涂黑,因此你也知道了,咱们作的就是下面的图,将二维码隐藏其中。让女孩涂黑,扫码便可。图片

图片

「制做隐藏二维码的数织图」get

你说怎么作出上图呢?

对于笨办法,就是开头说的手绘二维码app,以下它会分21*21或者更多的格子,告诉你哪一个该涂黑,相应的你就知道该填写哪些数织数字。

图片

​可上面作法确实繁琐了,数字本身写,还得整理打印。

咋办呢?

下面就是 Python 出场的时候了,用 Python 编写一个输入二维码文字,一键生成数织图片的程序而后****直接打印便可图片

**完整代码以下:
**

import numpy as np
import matplotlib.pyplot as pltfrom matplotlib.pyplot 
import savefig
import qrcode
def qr_matrix(data):    qr = qrcode.QRCode(version=1, box_size=1, border=1)    
qr.add_data(data)    return np.asarray(qr.get_matrix(), dtype = int)def _rle(matrix):    
# find run start and ends    d = np.diff(matrix)    
row, start_pos = np.where(d > 0)    _, end_pos = np.where(d < 0)    
# find run lengths    run_lengths = end_pos - start_pos    
# split runs from different rows into separate arrays    
split_on = np.cumsum(np.bincount(row - 1))[:-1]    
return np.split(run_lengths, split_on)def run_length_encode(matrix):    
rle_row = _rle(matrix)    rle_col = _rle(matrix.T)    
return rle_row, rle_coldef nonogram_qr(data):    qr = qr_matrix(data)   
row_rle, col_rle = run_length_encode(qr)    shape = np.array(qr.shape) - 2    
return shape, row_rle, col_rledef draw_nonogram(shape, row_rle, col_rle):    r, c = shape    
f = open('qr.griddler', "w")    f.write('MK Version 3.0')    f.write('\n')    f.write('\n')    
f.write(str(r)+' '+str(c))    f.write('\n')    f.write('\n')    
q=np.zeros((r,c),dtype=int)    for qq in q:        f.write(str(qq)[1:-1].replace("0", "?"))       
f.write('\n')    f.write('\n')    for col in col_rle:        
f.writelines(str(col[::-1])[1:-1])        f.write('\n')    f.write('\n')    
for row in row_rle:        f.writelines(str(row[::-1])[1:-1])        f.write('\n')    
fig, ax = plt.subplots(figsize=(10, 10))    plt.axis('off')    plt.axis('equal')    
# draw the grid for the nonogram:    for i in range(r + 1):        
ax.plot([0, c], [-i, -i], 'k-')    for j in range(c + 1):        
ax.plot([j, j], [0, -r], 'k-')    # draw the numbers onto the grid    
for i, row in enumerate(row_rle):        for idx, val in enumerate(row[::-1]):            
ax.annotate(xy=(-idx - 0.5, -i - 0.5), s=val, ha='center', va='center')    
for j, col in enumerate(col_rle):        for idx, val in enumerate(col[::-1]):            
ax.annotate(xy=(j + 0.5, idx + 0.5), s=val, ha='center', va='center')    
# adjust x and y limits    lim_left = max([len(x) for x in row_rle + col_rle]) + 1   
lim_right = max(r, c) + 1    ax.set_xlim(-lim_left, lim_right)    
ax.set_ylim(-lim_right, lim_left)    
return axname=input('请输入二维码内容(好比七夕快乐 爱你的XXX?):')
ax = draw_nonogram(*nonogram_qr(name))
print('制做完成,图片名字叫作:打印吧.jpg')savefig("打印吧.jpg")# plt.show()​
复制代码

固然不想这么麻烦的话,我这里把程序也打包好了,各位直接运行exe 程序便可。

下面说说这个打包程序。

以下,下载解压,运行(注意可能打开速度挺慢,耐心等待黑框出现),输入二维码文字。

图片

其实吧,这个生成的21*21或者以上大小的数织难度仍是挺高的,不能让女朋友作不出来啊,你得在身边提示一下啊,那么这款解密软件派上用场!!

结尾

这个礼物认认真真整出来,估计得花个个把小时,七夕好时光,好好利用哈!!

哈哈哈哈,若是是须要完整的素材文件,项目代码遇到简单的问题也能够找小编解答哦!!互相学习!

私信小编:06便可获取免费资料!

相关文章
相关标签/搜索