作者:如山似玉
Excel就只能是三十年手速瘋狂填資料嗎?
Excel就只能是死扣細節制作華麗圖表原地成仙嗎?
Excel就只能是枯燥乏味的閉眼複製貼上嗎?
NO——我們還可以用它搞點樂子,來吧,既然不能功成名就,那就做個有趣的渣渣。
這次做的也是一個經典小遊戲——記憶配對!設計了三種難度,反正我是玩玩簡單的行,最高難度的感覺腦細胞受不住(不得不向歲月低頭啊~)
成品展示:
獲取路徑:
完整版 https://wwx。lanzoui。com/i4blcvwi5ne 提取密碼:cgyt
解壓密碼(rste)
PS.食用前記得開啟允許宏設定
2007路徑:①左上角圓形圖示②Excel選項③信任中心④信任中心設定⑤宏設定⑥啟用所有宏。
2010路徑:①左上角“檔案”②選項③信任中心④信任中心設定⑤宏設定⑥啟用所有宏。
(其他版本Excel也差不多,參考設定)
**********
遊戲製作分享,完全可以不看系列
**********
一、記憶配對的簡單介紹
記憶配對小遊戲的規則和邏輯非常簡單:
在指定區域的網格內,隨機分佈了n對圖形。
點選格子,所選格內的圖形顯示出來,如果與上一次點選的格子內圖形一樣,則配對成功。
透過記住不同圖形的位置,將其一對一對的找出來。
所有格子的圖形均顯示出來之後,完成遊戲。
二、Excel製作
OK!瞭解了規則和邏輯,那麼接下來就是——
根據規則,梳理要實現的功能;
設計功能實現方法及實現過程;
微微肝一下的搞程式碼。
基於這個思路,使用Excel製作記憶配對小遊戲的步驟大致如下:
1 點選翻開圖形
指定9x9的單元格區域,隨機選擇其中10個單元格,寫入“X”,再根據X計算周邊單元格的數值。
1.1 佈置隱藏面板
有了設計掃雷的經驗,這個就很簡單了~
1.1 佈置隱藏面板
在隱藏面板寫好n組固定的值,1列;
做輔助列,利用RAN()為每一組分配一個隨機數;
根據輔助隨機數大小進行排序,打亂圖形;
分段複製到設計好的區域內。
思路:
以簡單版為例,4x4網格,共16個8組圖形,直接將1~8數字寫進N列;
在左側M列對應寫上”=ran()“,生成隨機數;
使用程式碼排序(使用篩選排序不會自動更新);
Range(“M1:N16”)。sort Range(“M1”), xlAscending ‘~~對M1:N16區域進行排序,順序key是M1(隨機數那一列),升序
使用程式碼,將N列複製一份到O列,排序打亂後的結果就固定下來不在變了;
Range(“N1:N16”)。Copy
Range(“O1”)。PasteSpecial ’~~PasteSpecial是選擇性貼上,直接copy也行
利用for迴圈,以4個值為一個迴圈,貼上到網格的1~4列。
For i = 1 To 4
Range(Cells(i * 4 - 3, “O”), Cells(i * 4, “O”))。Copy
Cells(2, i + 1)。PasteSpecial
Next i
製作:
1.2 點選互動——SelectionChange
識別當前點選的行列號(座標),並進行記錄(下次點選使用);
判斷有效性,如果點到已配對的圖形需要區別處理(後文敘述);
按照行列號,複製隱藏面板的圖形至顯示面板。
思路:
定義變數zrow和zcol,表示當前選擇的行列號;
zrow = Application。Selection。Row
zcol = Application。Selection。Column
將zrow和zcol寫進隱藏面板指定單元格,進行記錄;
Sheet3。Range(“S1”) = zrow ‘~Sheet3為隱藏面板,S1、S2為記錄行列號的單元格
Sheet3。Range(“S2”) = zcol
使顯示面板對應格與隱藏面板值相等(此處用Copy命令也可以)。
Sheet1。Cells(zrow, zcol) = Sheet3。Cells(zrow, zcol)
製作:
使用IF判斷,如果當前行列號與上一次行列號對應圖形值不同則表示配對不成功,相同則表示成功,首次點選不作判斷。
判斷的程式碼嵌入SelectionChange的sub裡面。
2 判斷配對是否成功
2.1 配對不成功
點選顯示圖形,前次點選的圖形消失;
記錄當前行列號,覆蓋記錄;
思路:
按照當前zrow、zcol行列號執行點選顯示圖片(上述已有,不再重複編程式碼);
定義lrow、lcol為前此點選行列號變數;
lrow = Sheet3。Range(“S1”)
lcol = Sheet3。Range(“S2”)
顯示面板lrow、lcol對應的單元格為空;
行列號記錄單元格寫入zrow、zcol。
Sheet3。Range(“S1”) = zrow
Sheet3。Range(“S2”) = zcol
製作:
2.2 配對成功
點選依舊顯示圖形,上一次點選圖形不消失,並刪除隱藏面板兩次點選對應的圖形(用於無效點選判斷)。
刪除隱藏面板記錄的行列號,避免下次刪除已配對圖形。
思路:
按照當前zrow、zcol行列號執行點選顯示圖片(上述已有,不再重複編程式碼);
隱藏面板zrow、zcol和lrow、lcol對應的單元格為空;
行列號記錄單元格為空。
製作:
2.3 非判斷工況:無效點選和首次點選
點到已配對的圖形,為無效點選,不做任何操作;
首次點選時,不做對比判斷,記錄當前行列號。
思路:
IF語句,如果隱藏面板zrow、zcol對應單元格為空,不做行列號記錄和配對判斷;
IF語句,如果隱藏面板zrow、zcol對應單元格不為空,且行列號記錄為空,行列號記錄單元格寫入zrow、zcol,不進行配對判斷。
製作:
根據動作邏輯,使用IF多層判斷,順序為——
無效點選判斷
首次點選判斷
配對成功與否判斷
IF。。。 ’~是否無效點選
IF。。。 ‘~非無效點選,是否首次點選
IF。。。 ’~非無效點選、非首次點選,是否配對成功
‘成功
’不成功
end if
end if
end if
2.4 IF判斷順序
3 遊戲結束
所有圖形配對完,隱藏面板的圖形均被清空,遊戲結束。
思路:
使用Count函式統計指定區域;
使用IF語句判定。
If Application。WorksheetFunction。CountIf(Sheet3。Range(“B2:E5”), “<>”) = 0。。。
製作:
採用步數和時間雙重計數,簡單公式計算即可,不重要,略過 。
4 得分
除錯程式碼和功能、調整顯示細節等。
5 調整細節
說實話,小遊戲早就做出來了,自己也玩了好多遍 。
但是要把思路和製作過程寫出來,真的......