2014年4月26日 星期六

App Inventor 2 的範例程式 - GotMath(2) - 變數與按鈕設計

GotMath是一支數學遊戲程式。

程式功能分析:
本部分將要介紹程式中所有使用到的全域變數以及各個Button的程式碼



接續GotMath(1) - GUI 介面設計,將會介紹程式使用的變數與按鈕的程式設計


步驟二:變數設計

第一類:數字類

1.儲存當前運算元或運算子於運算式中的位置,值介於1~3
   當值為1或3時,只有運算元按鈕才會有反應;當值為2時,只有運算子按鈕才會有反應


2.儲存題目(系統由六個數字計算出的答案)



3.儲存玩家當前最後完成的運算式結果

   假如玩家做出了以下的計算:
                   3  +  5 =   8
                   8   ÷   4 =   2
                   2   × 10 = 20
                 20  -  
   程式會把20存入變數中


4.儲存當前運算式中所使用的運算子代碼,值介於1~4

   值為1代表加號;值為2代表減號;值為3代表乘號;值為4代表除號


5.儲存當前運算式的編號,值從0~4



6.儲存程式一開始所提供的六個數字

   程式會依序存入BN_N1BN_N2BN_N3BN_N4BN_N5BN_N6的Text值


B1.依序儲存計算過程各運算式的解 (註1)

(註1) 本變數為實作Back按鈕功能才需使用,由於本範例將該實作交由各位同學挑戰,可略過。


第二類:文字類

7.依序儲存計算過程中所按過的運算元與運算子(以文字方式儲存)
   假如依序按下了以下按鈕
                  BN_N1 (Text = 6)
                  BN_Add (Text = +)
                  BN_N2 (Text = 10)
                  BN_N5 (Text = 11)
   程式會把6、+、10、11依序存入List


8.文字類的暫存器



9.儲存系統的運算過程,主要為實作出答案的功能

   假如系統使用了以下的過程得出題目:
                   3  +  5 =   8
                   8   ÷   4 =   2
                   2   × 10 = 20
                 20  -  1 = 19
                 19   ×   3 = 57
   程式會把每個等式存成一個字串後,依序存入List


第三類:Component類


10.儲存六個數字按鈕(BN_N1~BN_N6)的Component


11.儲存五個運算過程紀錄標籤(LB_F1~LB_F5)的Component


12.依序儲存運算過程中所按過的按鈕之Component

     假如依序按下了以下按鈕
                 BN_N1
                 BN_Add
                 BN_N5
     程式會把這3個按鈕的Component依序存入List





步驟三:按鈕設計

所有本篇出現的副程式,將在 GotMath(3) 與  GotMath(4) 詳細介紹 (註2)

(註2) 可先由Blocks版面中的Procedure中拉出第一個方塊,命名對應的副程式名稱,如需添加傳入變數,點擊該副程式方塊左上的藍色方塊即可。App Inventor 2會自動添加該副程式的Call於Procedure中。





Step 3.1  BN_New


1.將BN_Ready按鈕的Text設為加油
2.執行PR_Set副程式

Step 3.2 BN_N1~BN_N6 (程式碼皆同,故以BN_N1與BN_N2示範)

1.if的條件式為判斷變數function值,如果變數function小於5,代表現在題目尚未做完,還可 
   以輸入
2.if的條件式為判斷變數index值,如果變數index為1或3,代表現在可以讓BN_N1~BN_N6的
   按鈕輸入
3.如果條件成立
   a.把該按鈕的Enabled設為false
   b.呼叫PR_Calculate副程式
      該副程式需要傳入兩個值input與sign,分別對應這個按鈕的Text與Component


Step 3.3 BN_Add、BN_Sub、BN_Mul、BN_Div (程式碼皆同,故以BN_Mul與BN_Sub示範)

1.if的條件式為判斷變數index值,如果變數index為2,代表現在可以讓BN_Add~BN_Div的
   按鈕輸入
2.如果條件成立,則同樣呼叫PR_Calculate副程式,分別傳入這個按鈕的運算符號與
   Component


Step 3.4 BN_Clean

1.把index值設為1,這裡要暫時將index做為NumberList的指標
2.迴圈主要目的為把BN_N1~BN_N6的初始值從NumberList中撈出來並設回對應的按鈕
   (for each迴圈會把List中輪到的元素取出後存入item,重覆直至List結束)
3.將BN_Ready按鈕的Text設為「加油」
4.執行PR_Init副程式給予傳入值false,將變數調整為遊戲初始狀態
5.執行PR_BNshow副程式給予傳入值true,將GUI介面調整為遊戲初始狀態

Step 3.5 BN_Ans

1.把index值設為1,這裡要暫時將index做為LB_FList的指標
2.迴圈主要目的為把系統的計算過程從SystemAnsList中撈出來並把撈出來的資料依序存入
    LB_F1~LB_F5
    (for each迴圈會把List中輪到的元素取出後存入item,重覆直至List結束)
3.執行PR_BNshow副程式給予傳入值false,將GUI介面調整為Game Over狀態

Step 3.6 BN_Back
該部分將交由各位同學自行發揮~~

GotMath程式第二部分 - 變數與按鈕設計完成

沒有留言:

張貼留言