2014年4月26日 星期六

App Inventor 2 的範例程式 - GotMath(3) - 副程式(一)

GotMath是一支數學遊戲程式。

程式功能分析:

本部分將會介紹本程式中最重要的部分–出題。將會依序解釋以下副程式:
1.PR_Set為新遊戲設定的副程式
2.PR_Init為遊戲初始化設定的副程式
3.PR_CreateQuestion為產生題目的副程式
4.PR_BNshow為GUI控制的副程式



接續GotMath(2) - 變數與按鈕設計,開始
介紹副程式方塊的安排。

步驟四:副程式實作


Step 4.1 PR_Set:本程式目的是為了讓遊戲開始運行。呼叫者:BN_New



Step 4.1.1 PR_Set第一區段:初始化


1.呼叫PR_Init副程式並給予傳入值true
2.將BN_N1~BN_N6的Text設為給予範圍內的隨機值
3.把BN_N1~BN_N6的Text存入NumberList,使得執行完BN_Clean可以將按鈕的初始值
   重新取得(for each迴圈會把List中輪到的元素取出後存入item,重覆直至List結束)

Step 4.1.2 PR_Set第二區段:出題


1.呼叫PR_CreateQuestion副程式,將BN_N1~BN_N6的Text依序傳入,開始生成題目
2.變數Sol儲存上一次呼叫完PR_CreateQuestion所得結果

Step 4.1.3 PR_Set第三區段:GUI設定,讓按鈕可以使用



1.把系統計算所得的題目由變數Sol儲入LB_Question的Text
2.呼叫PR_BNshow並給予傳入值true,將GUI介面調整為遊戲初始狀態
3.將PR_Set執行過程中所用到的變數index與operator,將值設為初始值


Step 4.2 PR_Init:本程式目的為初始化遊戲環境。呼叫者:BN_Clean與PR_Set


Step 4.2.1 PR_Init第一部分:陣列與標籤初始化



首先判斷SystemAnsList是否為空:
    1.若SystemAnsList不為空,代表遊戲已進行二次以上
       執行then部分:
       a.將CalculateList、CalculateProcessList、CalculateResultList清空 (註)
       b.if的條件式為判斷傳入值Condition:
             i.如傳入值Condition為true時,代表為PR_Set的呼叫,為一個新遊戲的開始
              故需將SystemAnsList、NumberList清空
            ii.如傳入值Condition為false時,代表為BN_Clean的呼叫,是把該回合重新開始
              故不需執行if中的程式
       c.最後把LB_F1~LB_F5的Text全部清除

    2.若SystemAnsList為空,代表為第一次遊戲
       執行else部分:
       a.將LB_F1~LB_F5與BN_N1~BN_N5的component分別依序存入LB_FList與BN_BList
  
(註) CalculateResultList為實作Back功能時所需之變數,可略過

Step 4.2.1 PR_Init第二部分:變數初始化


1.if條件式為判斷傳入值Condition:
   a.如果傳入值Condition為true時,代表為PR_Set的呼叫,為一個新遊戲的開始
      變數Sol需要重設為0
   b.如傳入值Condition為false時,代表為BN_Clean的呼叫,是把該回合重新開始
      故不需執行if中的程式
2.把變數preSol、index、operator、Function、temp_text設為初始值


Step 4.3 PR_CreateQuestion:本程式目的為出題,兩個參數x與y皆為運算元呼叫者:PR_Set


Step 4.3.1 PR_CreateQuestion第一部分:加、減、乘、除運算

Step 4.3.1.1 加法、減法、乘法部分


1.以隨機方式決定運算子並存入變數operator。1代表加、2代表減、3代表乘、4代表除
2.加、減、乘部分直接將兩個傳入值做對應的運算,並把結果存入變數Sol,同時將運算符號
  存入變數temp_text

Step 4.3.1.1 除法部分

為了降低題目難度,if條件式先使用remainder方法檢查兩個傳入值相除是否會產生餘數:
1.不會則比照加、減、乘部分辦理                                        
2.會則重新決定運算子(排除除法),後比照加、減、乘部分辦理

Step 4.3.2 PR_CreateQuestion第二部分:結果存儲 

將運算完成的運算式以字串型態存入SystemAnsList,使得BN_Ans的功能得以執行
x為第一個運算元,temp_text為運算子y為第二個運算元,Sol為運算結果


Step 4.4 PR_BNshow:本程式目的為GUI設定,有一個傳入值boolean為布林值呼叫者:BN_Ans、BN_Clean、PR_Set、PR_End

如果傳入值為true,代表為BN_Clean與PR_Set呼叫,為新遊戲或重新開始則所有的按鈕皆要能使用
如果傳入值為false,代表為BN_Ans與PR_End呼叫,為遊戲結束則所有的按鈕除了BN_New外皆不能使用


Step 4.3.1 PR_BNshow第一部分:按鈕的Enable設定

將除了BN_New外所有Button的Enable全部設為boolean的值


Step 4.3.1 PR_BNshow第二部分:按鈕的顏色設定

Step 4.3.1.1 boolean為true:新遊戲或重新開始

1.將BN_N1~BN_N6的TextColor全部設為黑色,BackgroundColor全部設為淡粉色
2.將BN_Add~BN_Div的TextColor全部設為黑色,BackgroundColor全部設為粉色
2.將BN_Back、BN_Clean、BN_Ans的BackgroundColor全部設為深灰色

Step 4.3.1.2 boolean為false:遊戲結束

1.將BN_N1~BN_N6與的TextColor全部設為白色,BackgroundColor全部設為淺灰色
2.將BN_Add~BN_Div的TextColor全部設為米白色,BackgroundColor全部設為灰色
3.將BN_Back、BN_Clean、BN_Ans的BackgroundColor全部設為灰色


GotMath程式第三部分 - 副程式(一)完成

沒有留言:

張貼留言