App Inventor學習記錄156-抽中骰子點數的機率統計及顯示

骰子一共有六面,每次丟出去都有 1/6的機率,會出現 1點、2點或是其它點數,那我們丟了 100次之後,出現 1點、2點一直到 6點的機率要怎麼計算。

記錄骰子點數的機率統計及顯示


這次範例的完成品如下。

上方的圖片會一直隨機出現 1~6點的圖片,這個只是要做一個動態的感覺出來。
抽 1次按鈕按下之後,就會隨機出現 1~6點的圖片,並記錄該點數出現的機率。
十連抽按鈕按下之後,就會連續抽 10,同樣會記錄該點數出現的機率。

這裡有使用之前介紹過的 KIO4_TimerX外掛,讓十連抽的結果可以慢慢的出現。


畫面編排的部份如下。

很明顯的,為了畫面整齊一點,這裡使用了大量的水平配置。
水平配置裡頭,不管是圖片,或是標籤,寬度都是調整成 fill parent。


全部的程式碼如下。

看上去點有多,但是基本上都是重覆的東西。


第 1-1部份使用到的方塊說明。

建立變數_十張圖片的群組,它的值是一個清單。
這裡把 image 2~image 11,一共 10圖片元件拉在同一個清單中。這 10個圖片元件,就是用來顯示 10連抽的結果。按下抽 1次按鈕的時候,會在這 10圖片所在的水平配置給隱藏起來。按下 10連抽按鈕的時候,才會顯示。


第 1-2部份使用到的方塊說明。

建立變數_全部圖片,它的值是一個清單。
1.png~6.png分別是 1點到 6點的骰子圖片。1.png這樣的方塊可以在圖片的方塊中找到,也是一次更新之後我才看到的功能。它就等於用文字方塊寫 1.png的效果。


第 1-3部份使用到的方塊說明。

建立變數_標籤群組,它的值是一個清單。
這裡把 label 2~label 20,一共 12標籤元件拉在同一個清單中。
其中 label 9~label  14,這六個標籤,分別用來顯示 1到 6的點數分別被抽中幾次。
而 label 15~label  20,這六個標籤,則是用來顯示該點數抽到的機率。


第 1-4部份使用到的方塊說明。

因為要分別計算每個點數抽到的機率為何,所以這裡建立了總次數的變數,以及各個點數被抽中次數的變數。


第 2部份使用到的方塊說明。

when screen 1.initialize,當程式初始化的時候。
set clock 1.time enabled,把計時器 1的啟動計時,設定為真。


第 4部份使用到的方塊說明。

when clock 1.timer,當計時器 1有在計時的時候。
set image 1.picture ,把圖片 1的圖片,設定成變數_全部圖片中的隨機圖片。
這裡用 pick a random item list的清單方塊來做,list的地方,就放變數_全部圖片


第 3-1部份使用到的方塊說明。

建立一個叫”判斷抽到那一個號碼“的程式,這個程式中,加入一個參數叫”那個圖片“,這個程式就是用來判斷圖片元件中,在當下顯示的圖片是那一張用的。

這裡加入判斷式,用任意元件的 image.picture of component來做判斷。
component的地方帶入我們剛剛建立 “那個圖片“的參數。
假設,我們在”那個圖片”的參數中,代入 image 2~11中的其中一個元件,那麼就會去抓這個圖片元件的圖片來做判斷。
當圖片等於 1.png的時候,就把變數_抽 1的次數加 1。
當圖片等於 2.png的時候,就把變數_抽 2的次數加 1。
以此類推。


第 3-2部份使用到的方塊說明。

把 label 9~14 .text,設定成變數_抽 1~6的次數。
接下來的 label 15~20這 6個標籤,就是用要數學方塊計算出,每一個點數出現的次數。就是變數_抽 1~6的次數分別除以變數_總次數

這裡有用 round去四捨五入取小數點後兩位數的值,這個部份請參考:
App Inventor學習記錄93-把數值用四捨五入到小數點後第 1位或第 2位


第 5部份使用到的方塊說明。

when button 1.click,當按鈕 1,也就是抽 1次按鈕被按下的時候。
變數_總次數的值加 1。

set horizontal arrangement 2.visible to false,把水平配置 2的可見性,設定為假。
set horizontal arrangement 3.visible to false,把水平配置 3的可見性,設定為假。
這 2個水平配置,放的就是 image 2~11這 10的圖片元件。
這個是為了區分出按 1次按鈕和 10連抽按鈕按下後的差別。

set image 18.picture to pick a random item list get globe 全部圖片
把圖片 18的圖片,設定成變數_全部圖片中的其中一張圖片,這裡用 pick a random item list的清單方塊來做就可以了。

set image 18.visible to true,把圖片 18的可見性,設定為真。
這是因為按下 10連抽按鈕的時候,會把圖片 18的可見性設定為假,所以這裡要先打開。

call 判斷抽到那一個號碼這個程式。
那個圖片,這個參數我們就代入圖片 18,代表要程式要判斷的元件,就是圖片 18。

label 21這個標籤,用來顯示總次數,所以這裡就用文字方塊來處理一下。


第 6部份使用到的方塊說明。

when button 3.click當按鈕 3,也就是清除資料這個按鈕按下之後。
call 清除資料這個程式。
清除資料這個程式,我們等一下再來說。


第 7部份使用到的方塊說明。

when button 2.click,當按鈕 2,也就是十連抽按鈕按下之後。
set image 18.visible to false,把圖片 18的可見性設定為假。
讓圖片 18藏起來。

用for each item in list方塊,把變數_十張圖片的群組裡頭的照片都處理一下。
這裡用樣用任意元件的方式來作。把變數_十張圖片的群組裡頭,image 2~image 11這 10個圖片元件的圖片,都設定成空白。這是因為當我們第二次按下十連抽按鈕的時候,我們先把舊的圖片給清掉。

set horizontal arrangement 2.visible to true,把水平配置 2的可見性,設定為假。
set horizontal arrangement 3.visible to true,把水平配置 3的可見性,設定為假。

call kio4_timex1.for each,這外掛中的這個方塊,來加入時間的間隔,不然十連抽的時候,就會一次把十張圖片都顯示出來,感覺上就少了什麼東西。
這個方塊的使用說明,請參考:
App Inventor學習記錄135-在迴圈中,插入時間間隔的外掛~KIO4_TimerX


第 8部份使用到的方塊說明。

這裡同樣是接續 KIO4_TimerX的用法。
簡單的說就是用任意元件的方式,依次把 image2~11的圖片,設定成隨機圖片。
然後,再去判斷這個圖片元件使用的圖片是那一個。
這個在前面的 3-1、3-2有介紹過。


第 9部份使用到的方塊說明。

這部份就不用多說了,就是把該歸零的變數歸零,該變成空白的標籤變成空白。
這個部份應該沒有什麼太大的問題。


這次的範例在 line社群上有討論到,簡單的說就是把每一個變數的值除以總次數的值,就是每一個點數出現的機率了。其它的就是程式的寫法而己。

這次的 aia檔的下載連結如下:
NO_156_Dice_percent.aia

APP INVENTOR外掛
名稱:KIO4_TimerX
外掛來源:ommunity.thunkable.com
外掛載點:
https://community.thunkable.com/t/extension-loops-foreach-number-and-foreach-item-with-pause-and-break-timer-with-tick/13650?u=taifun

之前介紹過的一些 appinventor的使用記錄,都整理在下面這個頁面上了。
APP INVENTOR學習記錄及資源整理頁面

發表迴響