網頁

2020年11月27日 星期五

手機 App 程式設計- AppInventor2 -ox遊戲

題目

  1. O 和 X 圖案每一秒鐘隨機出現。
  2. 預設玩15秒,使用者可以輸入要玩的時間。
  3. 使用者按到 O 加1 分,按到 X 減1分。
  4. 畫面上方顯示剩餘時間和得分。
  5. 時間到,顯示是否結束程式的訊息。若按 "是",結束程式。

執行畫面




素材

本 app的 icon (圖示),可自己繪製或網路搜尋。
在Google 輸入關鍵字,如 tic tac toe  icon, 選擇 「圖片」,可找到相關的小圖示。
找到圖片,按下去,再按右鍵,選「另存圖片」,就可使用。但要注意著作財產權。
下面三個圖,是筆者所繪製。

進入 Appinventor 

Google 輸入 appinventor 。選 「MIT App Inventor」。
選 「Create Apps」。

開新專案(project)
My projects / Start new project 。
輸入專案的 名稱,如 ox,按 「OK」鈕。
 專案的名稱只能使用大小寫字母、數字及「 _」符號,名稱的第一個字元必須是英文字母,不能使用中文字。

Designer 介面元件

Screen1(頁面或稱為畫面):
AppName:ox,可以改成 「ox遊戲」(出現在手機上面的App名稱,可用中文)

Icon : 可以上傳1個 icon(圖示) (可選背景透明的圖示),此程式在手機上面的App 圖示。
按 「 Upload File」鈕。
按「選擇檔案」,選一個圖示,按「開啟」,再按「OK」鈕。

右邊Properties(屬性視窗) 往下拉,更改 Title 的值為:   ox遊戲 (原本為 Screen1)。

Screen1 元件相關屬性表

有關各個元件的詳細介紹,請參考 App Inventor 中文學習網,http://www.appinventor.tw/

元件

類別

屬性

功能

Screen1

 

Title: ox 遊戲
AppName: ox
(出現在手機上面的App名稱)
Icon : cross_circle.gif,可以上傳1icon圖示。

1Screen元件就是1個頁面(畫面)

Label1

User Interface(使用者介面)

Width:Fill Parent
Text:按到 O 1分,按到 x 1

標籤

HorizontalArrangement1

Layout(布局)

AlignVertical:Center(垂直置中)
Width:Fill Parent

水平布局元件,讓裏面的元件可以水平對齊

Label_time

User Interface(使用者介面)

Text:時間():

標籤

TextBox_time

User Interface

Width:100 pixels
Hint: (清空)
Text:15

文字方塊,可以輸入工作項目

預設玩 15秒

Button_play

User Interface

Text:開始

按鈕

Canvas1

Drawing and Animation

BackgroundColor:Black
Height:Fill Parent
Width:Fill Parent

畫布,提供各式繪圖功能

ImageSprite_circle

Drawing and Animation

Picture:circle.gif

圖片精靈,它可和畫布上的球(Ball)和其他 ImageSprite 進行互動

ImageSprite_cross

Drawing and Animation

Picture:cross.gif

 

Clock1

Sensors(感測器)

TimerInterval:1000 ,即1秒的意思,每隔1秒執行1次。

時鐘元件

Notifier1

User Interface

 

通知元件(有的稱為對話框)

完整 Blocks程式拼塊

----------------------------------------------------------------
說明:
score :用來記錄分數
timer:用來記錄剩下的時間
show_score 此程序用來在畫布 (80,20)此位置顯示,剩下時間:  和  得分: 。
----------------------------------------------------------------
----------------------------------------------------------------
說明:
play 此程序的功能:
設定 score(分數) 為0。
設定timer(剩下時間)為 TextBox_time.Text ,預設為 15 秒。
啟用計時器 (Clock1 )。
啟用 ImageSprite_circle  和 ImageSprite_cross。
----------------------------------------------------------------
----------------------------------------------------------------
說明:
當開啟此程式 的事件為 :
設定 Canvas1的PaintColor (繪圖顏色)為白色。不然畫布的背景顏色為黑色,文字也是黑色,就看不到文字。
不啟用計時器 (Clock1 )。剛開始還沒玩,就不要倒數計時。
----------------------------------------------------------------

----------------------------------------------------------------
說明:
當手指碰觸到 ImageSprite_circle  的事件為 :
碰觸到 O,分數 加 1。
呼叫 show_score 程序。
當手指碰觸到 ImageSprite_cross  的事件為 :
碰觸到 X ,分數 減 1。
呼叫 show_score 程序。
----------------------------------------------------------------
----------------------------------------------------------------
說明:
當 計時器啟動計時 事件 (以本例來說,每1秒計時一次 ,也就是每一秒鐘要做什麼事)
timer 減 1 (剩下時間 減1 )。

要讓  X 和  O 的圖形隨機出現在 Canvas1 此畫布內的程式如下:
設定 ImageSprite_circle.X ( ImageSprite_circle 的 X 座標) 為 介於 0 到 Canvas1.Width(寬度) 的整數亂數。
設定 ImageSprite_circle.Y ( ImageSprite_circle 的 Y 座標) 為 介於 0 到 Canvas1.Height (高度)的整數亂數。
設定 ImageSprite_cross.X ( ImageSprite_cross 的 X 座標) 為 介於 0 到 Canvas1.Width(寬度) 的整數亂數。
設定 ImageSprite_cross.Y ( ImageSprite_cross 的 Y 座標) 為 介於 0 到 Canvas1.Height 的整數亂數。
如果 timer(剩下時間) <= 0 (即 時間到 ) 然後
         計時器設定不啟用。
        ImageSprite_circle 和  ImageSprite_cross 設定為不使用。
       call notifier.ShowChooseDialog : 顯示一個可以選擇的通知視窗, cancelable 表示是否會有cancel 按鈕 ,因為已有 button1(按鈕上的文字為 "是" ) 和 button2(按鈕上的文字為 "否"),所         以設定為  false,不用另外出現取消鈕。當使用者按下選擇的按鈕,將會觸發AterChooseing() 的事件。
呼叫 show_score 程序。
----------------------------------------------------------------

----------------------------------------------------------------
說明:
如果按了 "是"的按鈕,然後  結束程式。
----------------------------------------------------------------