✨數織遊戲✨: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便可獲取免費資料!

相關文章
相關標籤/搜索