2013-01-19

【Excel 創作】Excel也能做遊戲?拔拔 教你用Excel做開心農場 (二)

 

相信不少人過去都有在 Facebook 上種田的經驗,不過有多少人知道,Excel 也能夠做成「開心農場」的遊戲呢?

在拔拔重新找回4年前的開發手感前,慢慢的把這些小作品重新整理,並逐一介紹每個作品內的 Excel 使用功能,好讓大家也能夠透過這些作品中,學會一些基本的應用!


※轉載請註明原出處:Twins Mokey (http://twinsmonkey.blogspot.tw/)※

●作品名稱:開心農場 Excel (單機版)   (下載點 請看 完整文章 唷... cc)
●版本編號:alpha.20130118


經過「誰說Excel不能做遊戲?拔拔 教你用Excel做開心農場 (一)」的功能說明後,接下來跟大家介紹一些欄位的公式設計說明。如果真的不懂,歡迎發問唷~!!













◎Main(主版面)
●等級:
○公式
H2 = MATCH(J2,Level!B2:B100,1)
MATCH公式說明:MATCH(lookup_value, lookup_array, [match_type])
lookup_value 是要在 lookup_array 資料範圍中,所要比對的值。
lookup_array 是要查找資料的範圍。
match_type 是決定這次資料比對的模式:
1(或省略) = MATCH 函數會找到等於或僅次於 lookup_value 的值。
0 = MATCH 函數會找第一個完全等於 lookup_value 的比較值。
-1 = MATCH 函數會找到等於或大於 lookup_value 的最小值。

J2 是經驗值的欄位。
Level!B2:B100 是對應到「Level工作表」B2 ~ B100 的資料區間。
所以這次公式的設定,就是下面的步驟:
1. 找到 J2 經驗值的欄位。
2. 比對 Level 工作表中的 B2~B100 的資料範圍。
3. 如果 J2 經驗值欄位,找到「等於或僅次於」 Level 工作表中B2~B100的經驗值級距的值,就會傳回目前找到的是「第幾個」,而這裡的第幾個,就等於是目前的「等級」 





●農地:(最複雜的部份)
○公式
C7 是主要顯示農地目前狀態的欄位。如:空地、未購買、種子、發芽、成長、果實 這六種狀態。
C7 = IF(AND(VLOOKUP(C6,field!$A$2:$C$13,2,FALSE)=1,VLOOKUP(C6,field!$A$2:$C$13,3,FALSE)=1),IF(C10<0.25,"種子",IF(AND(0.5>C10,C10>=0.25),"發芽",IF(AND(1>C10,C10>=0.5),"成長",IF(C10>=1,"果實")))),IF(VLOOKUP(C6,field!$A$2:$C$13,2,FALSE)=0,"未購買","空地"))
vlookup公式說明:VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])
lookup_value 是要在表格或範圍的第一欄中搜尋的值。
lookup_array 是要查找資料的範圍。
col_index_numtable_array 引數中必須傳回相符值的欄號。(如:1=第1欄;2=第2欄...)
range_lookup 是一個邏輯值,用以指定 VLOOKUP 要尋找完全符合還是大約符合的值。
True(或省略) = 則傳回完全符合或大約符合的值。如果找不到完全符合的值,將會傳回僅次於 lookup_value 的值。
False = 則 VLOOKUP 只會尋找完全符合的值。


所以這次公式的設定,就是下面的步驟:
1. 先確認農地是否為購買,並且是在種植中的狀態
2. 如果都是的話,檢查C10(換算用的)欄位的值,依照不同的百分比狀態,來顯示相對應的種植成長階段
3. 如果不是購買且種植中的狀態,則檢查相對應農地的第2欄是否為未購買(=0)
4. 如果為未購買(=0),就顯示「未購買」。
5. 如果不是未購買(=0),就顯示「空地」。 

下方為主要農地(C7)欄位公式計算中,會用到的所有欄位的解說:

Field!A2:C13 主要是紀錄12塊農地,是否已經購買,以及是否正在種植的用途。
C6 是農地的編號(對應field工作表的農地編號)。
C8 是顯示目前所種植的農作物名稱。
C8 = IF(AND(VLOOKUP(C6,field!$A$2:$C$13,2,FALSE)=1,VLOOKUP(C6,field!$A$2:$C$13,3,FALSE)=1),VLOOKUP(VLOOKUP(C6,field!$A$2:$E$13,5,FALSE),seed!$A$2:$E$11,2,FALSE),"")
公式說明:主要是先檢查,該農地狀態是否為購買(=1)?且農地是否為種植(=1)?如果是的話,就對應農地第五欄的作物編號,然後去查驗Seed表對應的ID編號,回傳第2欄的農作物名稱來顯示。 C9 是顯示目前農地所種植作物的所剩餘的時間,顯示格式共區分為三種:
       →分鐘制:「XX小時XX分」。(大於10分鐘時,所顯示的格式)
       →秒數制:「XX分XX秒」。(小於 10分鐘時,所顯示的格式)
       →待收成:在剩餘秒數為「零」時,顯示為待收成。
C9 = IF(C8="","",IF(((VLOOKUP(C6,field!$A$2:$F$13,6,FALSE)+TIME(0,VLOOKUP(VLOOKUP(C6,field!$A$2:$F$13,5,FALSE),seed!$A$2:$F$11,6,FALSE),0))-NOW())<0,"待收成",((VLOOKUP(C6,field!$A$2:$F$13,6,FALSE)+TIME(0,VLOOKUP(VLOOKUP(C6,field!$A$2:$F$13,5,FALSE),seed!$A$2:$F$11,6,FALSE),0))-NOW())))



C10 是用來換算目前作物的時間用的。
C10 = IF(OR(C9="待收成",C9=""),"",(D8*3600-HOUR(C9)*3600-MINUTE(C9)*60-SECOND(C9))/(D8*3600))
公式說明:如果 C9 欄位的內容為「待收成」或是「空白」,則不顯示任何內容。否則的話,就將 D8轉換為秒的單位,減去 C9 的秒單位值(從小時→分→秒 逐一轉換為秒)顯示出來。
D8 是用來把農作物所需的種植時間,轉換為Time的格式,以利後面公式的加減。
D8 = IF(AND(VLOOKUP(C6,field!$A$2:$C$13,2,FALSE)=1,VLOOKUP(C6,field!$A$2:$C$13,3,FALSE)=1),TIME(0,VLOOKUP(VLOOKUP(C6,field!$A$2:$F$13,5,FALSE),seed!$A$2:$F$11,6,FALSE),0),"")
公式說明:主要是先檢查,該農地狀態是否為購買(=1)?且農地是否為種植(=1)?如果是的話,就將對應農地第五欄的作物編號,查驗Seed表對應的ID編號,並把第6欄的作物所需成熟時間(分鐘),轉換為Time時間格式(HH:MM:SS)。

以此類推其他11塊農地,就可以完成12塊農地的基本函式判斷。

※如果有任何不懂的地方,非常歡迎提問!


上一篇:Excel也能做遊戲?拔拔 教你用Excel做開心農場 (一)

◎範本下載:請點我