點讚再看,養成習慣;尺有所短,寸有所長。
最近刷短視頻經常看到有人玩數字炸彈小遊戲,今天小編就想和大家分享如果用Excel製作一個數字炸彈小遊戲。
先簡單介紹一下遊戲規則:在數字範圍內,把其中一個數字定為炸彈,誰猜中這個數,誰就要接受懲罰。比如數字範圍是0~100,炸彈數字是66,然後猜一個數字是28,28不是炸彈數字,那麼現在可以猜的數字範圍就縮小到28~100;又猜一個數字77,77也不是炸彈,那麼現在數字範圍又縮小到28~77,每次猜不能猜邊界上的數字,直到有人猜中這個炸彈,然後接受懲罰,遊戲結束。
先來看看最後成品:
下面就跟著小編來一步一步製作一個數字炸彈吧。
1、設計布局
首先第一步我們設計一下整個小遊戲的布局。
如上圖,分為數字炸彈區域,猜數字區域和數字區間區域。數字炸彈主要是存放要設置的炸彈數字;猜數字主要是每次猜炸彈的記錄;而數字區間主要存放對應每次猜測應該顯示的結果。
2、處理數字炸彈區域
第二步我們先來處理數字炸彈區域。
我們先來說說這一塊的邏輯:首先這裡存放數字炸彈,而且在猜測過程中是不可見的;其次當猜測正確的時候這裡應該顯示出來。
既然邏輯清楚了,那麼我們就對應相應要求做相應處理即可。對於猜測過程中不可見,我們可以把數字設置為單元格背景色相同顏色默認即白色;對於猜測正確以後顯示出來,我們可以用條件格式,當猜測數字正確,把數字炸彈單元格設為紅色背景,以突出顯示。
下面我們來具體製作過程:
在B5單元格中輸入66,然後設置字體顏色為白色;選中B5單元格,選中「數據」選項卡,點擊「樣式」命令組中的「條件格式」下拉列表,選擇「新建規則」;選擇規則類型「使用公式確定要設置格式的單元格」,並輸入公式「=VLOOKUP(B5,D:D,1,0)」,設置預覽中的「格式」選擇「填充」選項卡,選擇紅色點擊確定,完成新建規則;在猜數字區域輸入數字進行測試。
由於篇幅過程就不詳細講解函數意思了,「=VLOOKUP(B5,D:D,1,0)」表示查找D列中和B5相同的數,1表示返回的列號,因為查找的就是D列所以返回1,0表示完全相等比較。
動態操作如下:
3、實現猜數字區域輸入數據區間顯示
我們先實現一個簡單功能,就是猜數字區域輸入什麼就在數據區間顯示什麼。按照邏輯來說,如果數字區域什麼都不輸入,那麼數據區間也應該什麼都不顯示;如果數字區域輸入了內容,那麼數據區間也應該顯示相應的內容。這時小編想到了IF函數,我們這裡用數組公式「=IF(D5="","",D5)」,這個公式表示的含義是如果D5輸入空,那麼公式所在單元格也展示空,否則D5輸入什麼公式所在單元格顯示什麼。
另外注意:數組公式在單元格中輸入完後不能直接按Enter回車,需要按「Ctrl+Shift+Enter」快捷鍵,按完以後公式會變為「{=IF(D5="","",D5)}」,大括號表示數組公式。
下面看看這個小實現:
4、輸入合法性驗證
對於猜數字區域我們完全不知道使用者會輸入什麼,因此我們需要對輸入數據做一些校驗。
如果用戶輸入的不是0-100中的任意一個數,那邊我們就給出提示,比如「砰砰砰,不要鬧」。結合IF函數我們立馬想到OR函數,這個驗證我們可以分成兩個輸入小於0或者輸入大於100,正好可以用OR函數組織起來。
我們這裡用數組公式「=IF(D5="","",IF(OR(D5<0, D5>100),"砰砰砰,不要鬧", D5))」。
5、處理猜對的情況
在前面的基礎上我們繼續前進,如果猜對了,那我們就把數字炸彈顯示處理(這個前面已經完成),並且數字區間給出提示,比如顯示「嘣嘣嘣」,猜測不正確還是顯示輸入值。而新加的功能還是用IF函數來處理。
我們這裡用數組公式「=IF(D5="","",IF(OR(D5<0, D5>100),"砰砰砰,不要鬧", IF(D5=$B$5,"蹦蹦蹦",D5)))」。
6、處理猜錯的情況
如果猜錯根據遊戲規則我們需要在數字區間顯示下次可猜數字範圍「xx-xx」的方式展示。
我們先從最簡單的第一次猜測開始,假如猜測的數字比炸彈數字小,那麼應該顯示「xx-100」,如果猜測的數字比炸彈數字大,那麼應該顯示「0-xx」。
我們把前後兩個數字分開單獨來看,前面的數字為:當猜測數字比炸彈數字小的時候顯示當前猜測值,如果比炸彈數字大顯示0,因此轉換為數組公式為「=IF(D5<$B$5,D5,0)」,同理後面的數字對應的數組公式應該為「=IF(D5>$B$5,D5,100)」。
結合之前做的步驟,這裡使用數組公式:「=IF(D5="","",IF(OR(D5<0,D5>100),"砰砰砰,不要鬧",IF(D5=$B$5,"蹦蹦蹦",IF(D5<$B$5,D5,0)&"-"&IF(D5>$B$5,D5,100))))」。
當第二次第三次還是猜測錯誤後面就會發現問題,如下圖。
通過上面公式我們可以解釋通,之所以出現這樣的情況,是因為猜數字區域每個單元格單獨和炸彈數字進行比較而導致的,因此猜數字區域單元格不但要和炸彈數字比較還要和猜數字區域的數字進行比較,才能得出正確結果。
我們還是分開來,先說前面的數字,如果猜測的數字比炸彈數字小,那麼前面數字應該為:在猜數字區域中小於炸彈數字的所有數中,最大的那個數,轉換為數組公式為「=MAX(IF($D$5:D5<$B$5,$D$5:D5,0))」。相應的後面的數字對應的數組公式為「=MIN(IF($D$5:D5>$B$5,$D$5:D5,100)」。
結合之前組織為數組公式:「=IF(D5="","",IF(OR(D5<0,D5>100),"砰砰砰,不要鬧",IF(D5=$B$5,"蹦蹦蹦",IF(D5<$B$5,D5,MAX(IF($D$5:D5<$B$5,$D$5:D5,0)))&"-"&IF(D5>$B$5,D5,MIN(IF($D$5:D5>$B$5,$D$5:D5,100))))))」。
運行之後我們發現還是有問題,如下圖:
很明顯前面的數字有問題。我們繼續回到公式,細細來分析前面的數字的公式「IF(D5<$B$5,D5,MAX(IF($D$5:D5<$B$5,$D$5:D5,0)))」,如果輸入數字小於炸彈數字,則顯示輸入數字…,咦,這兒有邏輯錯誤,應該是小於炸彈數字,並且是猜數字區域小於炸彈數字中最大的那個數才能顯示輸入數字。因此公式要改為「IF(AND(D5<$B$5,D5>MAX(IF($D$5:D5<$B$5,$D$5:D5,0))),D5,MAX(IF($D$5:D5<$B$5,$D$5:D5,0)))」,意為如果輸入數字小於炸彈數字並且是猜數字區域小於炸彈數字中最大的那個數,才顯示輸入數字,否則顯示…。
另外後面的數字也有同樣的邏輯,應該也是錯的,只是剛才沒有測出來,因此公式也要修改為:「IF(AND(D5>$B$5,D5< MIN(IF($D$5:D5>$B$5,$D$5:D5,100))),D5,MIN(IF($D$5:D5>$B$5,$D$5:D5,100)))」。
最終數組公式為:結合之前組織為數組公式:「=IF(D5="","",IF(OR(D5<0,D5>100),"砰砰砰,不要鬧",IF(D5=$B$5,"蹦蹦蹦",IF(AND(D5<$B$5,D5>MAX(IF($D$5:D5<$B$5,$D$5:D5,0))),D5,MAX(IF($D$5:D5<$B$5,$D$5:D5,0)))&"-"&IF(AND(D5>$B$5,D5<MIN(IF($D$5:D5>$B$5,$D$5:D5,100))),D5,MIN(IF($D$5:D5>$B$5,$D$5:D5,100))))))」。
注意:按「Ctrl+Shift+Enter」。
今天的分享到這裡就結束了,但是學習的道路才剛剛開始,希望我們可以在學習的道路上不斷地前進,堅持不懈。
如果你有感興趣的功能,可以告訴小編哦,小編會為你寫一篇相應的文章。當然是先到先寫哈,我會列一個計劃表,儘量滿足大家的需求,所以如果下一篇不是你要的文章,請不要著急,可能就在下下篇。記得告訴小編你想學習的功能哦。
Excel技巧保持每周持續更新,如果有什麼問題可以私信我,讓我們一起進步。