愛伊米

Excel玩“記憶配對”?成品及製作思路分享!

作者:如山似玉

Excel就只能是三十年手速瘋狂填資料嗎?

Excel就只能是死扣細節制作華麗圖表原地成仙嗎?

Excel就只能是枯燥乏味的閉眼複製貼上嗎?

NO——我們還可以用它搞點樂子,來吧,既然不能功成名就,那就做個有趣的渣渣。

    這次做的也是一個經典小遊戲——記憶配對!設計了三種難度,反正我是玩玩簡單的行,最高難度的感覺腦細胞受不住(不得不向歲月低頭啊~)

    成品展示:

Excel玩“記憶配對”?成品及製作思路分享!

    獲取路徑:

完整版  https://wwx。lanzoui。com/i4blcvwi5ne   提取密碼:cgyt

解壓密碼(rste)

    PS.食用前記得開啟允許宏設定

2007路徑:①左上角圓形圖示②Excel選項③信任中心④信任中心設定⑤宏設定⑥啟用所有宏。

2010路徑:①左上角“檔案”②選項③信任中心④信任中心設定⑤宏設定⑥啟用所有宏。

(其他版本Excel也差不多,參考設定)

**********

遊戲製作分享,完全可以不看系列 

**********

一、記憶配對的簡單介紹

記憶配對小遊戲的規則和邏輯非常簡單:

在指定區域的網格內,隨機分佈了n對圖形。

點選格子,所選格內的圖形顯示出來,如果與上一次點選的格子內圖形一樣,則配對成功。

透過記住不同圖形的位置,將其一對一對的找出來。

所有格子的圖形均顯示出來之後,完成遊戲。

二、Excel製作

OK!瞭解了規則和邏輯,那麼接下來就是——

根據規則,梳理要實現的功能;

設計功能實現方法及實現過程;

微微肝一下的搞程式碼。

基於這個思路,使用Excel製作記憶配對小遊戲的步驟大致如下:

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 調整細節

說實話,小遊戲早就做出來了,自己也玩了好多遍 。

但是要把思路和製作過程寫出來,真的......