簡單教程
在你的手機上寫程式 MobileBasic
語法是Basic的,但是和QBASIC的語法不一樣。
先來個 HELLO WORLD
10 CLS
20 PRINT "HELLO WORLD!"
再來個簡單的程式,輸入一個數字,然後列印從1到輸入的數字
10 INPUT "HI, INPUT", A%
20 FOR I%=1 TO A%
30 PRINT I%
40 NEXT I%
在“創建”中編輯代碼,行號默認從10開始,步進為10。寫完一行代碼後選擇“選項”,然後選擇“確定”,就會自動出現下一行的行號,然後再編輯下一行代碼。編輯是一行一行的寫代碼。
編輯完所有代碼後選擇“列表”,就可以看到代碼的顯示,自動格式化到大寫字母。然後選擇“選項”,在選擇“開始”,就可以執行代碼了。
時間和日期的函式調用:
首先需要得到兩個參數,再結合獲取時間日期的函式,得到日期和時間
10 D% = DAYS(0)
20 M% = MILLISECONDS(0)
30 PIRNT MILLISECOND(D%, M%)
40 PRINT MINUTE(D%, M%)
50 PRINT HOUR(D%, M%)
60 PRINT DAY(D%, M%)
70 PRINT MONTH(D%, M%)
80 PRINT YEAR(D%, M%)
詳細教程
MobileBASIC教程-基礎篇
一、數據類型
MobileBASIC共有三種數據類型,分別是:
1.實數。此類數據可以表示任何實數,如:20、3.14159…此類數據的變數直接用“字母”表示。如:a、time…
2.整數。此類數據用於表示整數,即“正整數”、“負整數”和“0”,如:15、-3、0…此類數據的變數用“‘字母’+‘%’”表示,如:a%、time%…(註:若有非整數代入此類數據中,則直接取整數位,不採用四捨五入的方法。如:1360.52->1360,3.14159->3)
3.字元串。此類數據用於表示字元,如:a、hello、你好、年代、@…此類數據的變數用“‘字母’+‘$’”表示,如a$、time$…
二、編程方法
由於MobileBASIC是分行執行的,即從第一行逐步執行到最後一行,所以,每一行通常只能寫一個主語句(可以附帶其他子語句),寫完一行後,在文本框按左軟鍵審核此行若通過則進入下一行,每寫完一行都要這樣,包括最後一行,寫完後在文本框裡檢查一下,確認無誤後,按右軟鍵進入“檢查”狀態,此時,你可以按左軟鍵進行編輯、運行或保存。
三、打包
完成一個程式後,如果你想單獨的把這個程式提取出來,就可以在“檢查”狀態下按右軟鍵選擇“打包”,但是那裡不能輸入中文,不過沒關係,我們可以在打包後用MiniCommander打開jar包,再打開META-INF資料夾里的MANMANIFEST的MF檔案,編輯:
1. MIDlet-Name: 該軟體的名稱
2. MIDlet-Vendor: 該軟體的作者(出廠商)
3. MIDlet-Version: 該軟體的版本,一般用*.*.*表示(*必須是數字)
這樣就可以改為中文了,不過聽說部分手機用MobileBASIC打包可能會有問題,所以也可以用打包組件。
MobileBASIC教程-基本命令
一、輸入輸出語句
1. input"...",(/%/$) -> 輸入語句,讓螢幕出現一個文本輸入框,把輸入的值賦予變數;(/%/$)表示即可以賦予數字變數(a、a%),也可以賦予字元變數(a$),...表示輸入提示,用於表示關於輸入內容的信息,如:time、n…,輸入提示可以直接用字元,如input"time",a%(將輸入的值賦予a%,輸入提示為time)、input"n",n、input"a",d$…也可以讓變數(在此之前應定義該變數的字元)代替,如:input a$ ,t%、portu time ,n…也可以不要輸入提示,如:input"",a$、input"",b%…
2. print (/%/$) -> 輸出語句,在螢幕上輸出一個值;(/%/$)表示這個值即可以是數字,也可以是字元。可以直接輸出字元,如:print "hello,word"(在螢幕上顯示hello,word)…也可以輸出變數,如print b%、print a$…
二、跳行、暫停、注釋以及條件選擇語句
1. goto l% -> 跳行語句,當程式運轉到此行時,將跳轉至l%行;l%表示這個值只能是整數,即可以直接標明行數,如:goto 200(跳轉至第200行)、goto 5…也可以是變數,如:goto a%…
2. sleep ms% -> 暫停語句,當程式運行到此行時,將暫停一段時間,然後再繼續往下運行;ms%表示暫停的時間(單位為毫秒,1秒=1000毫秒),同樣的,即可以直接標明值,如:sleep 5000(暫停5秒)…也可以為變數,如:sleep b%…
3. if then -> 條件選擇語句,判斷條件是否成立,如果成立,那么執行,否則跳過這一行,繼續向下運行;如:if a%>5 then goto 20(如果變數a%大於5,則跳轉至20行)、if a%=b% then b%=0(如果變數a%等於b%,則將0賦予變數b%)…
4. rem ... -> 注釋語句,用於解釋下面的程式,不被編譯,也不執行,運行到此行時直接跳過此行,繼續往下運行;主要是源碼公布時方便讀者看懂,或者個人或組織開發程式怕以後忘記了加以注釋;...為注釋內容,如:rem time、rem it is open file…
三、結束語句
1. end -> 結束語句,即結束當前程式的運行,返回到《MB編輯器》;在測試或在《MB編輯器》運行時一般用這個。
2. stop -> 停止語句,即停止當前程式的運行,返回到《MB編輯器》;跟end差不多,唯一的差別是會將程式停止的行數輸入到螢幕上。
3. bye -> 關閉語句,即關閉當前的程式,以上面兩種的差別是會結束整個程式(包括《MB編輯器》);一般在要打包成jar時用這個。
MobileBASIC教程-編寫篇
一、程式輸入
在每次編寫完程式後都要按下左軟鍵審核編譯,如果提示錯誤就是語句錯誤,需重新修改,直到正確為此,錯誤的原因經常是少了(或多了)空格和其他符號,請仔細檢查。無論編寫或修改了什麼,在編寫或修改完後都要按下左軟鍵進行檢查,千萬不可輸完後直接按右軟鍵“檢查”。
二、編寫技巧
最好用手機的“智慧型英文”輸入法編寫,這樣可以有效的減少編寫按鍵的繁瑣操作,沒有的單詞新建,用這種方式編寫方便得多。
三、中文問題
這個軟體最大的缺點是不能直接在編程時編寫中文,不過有辦法解決這個問題,具體的辦法請參見《MobileBASIC教程-語法篇》
MobileBASIC教程-語法篇
一、中文顯示方法
MobileBASIC編程器最大的缺點是在編寫時不能直接編寫中文,不過有個辦法,由於MB編輯支持將ASC碼轉為UTF-8字元串顯示在螢幕上,又因為UTF-8字元串是支持中文的,所以我們可以通過ASC碼做為橋樑用來顯示中文。不過要先得到該中文的ASC碼,我寫了個MB的讀取ASC碼的程式:
10 input"chinese",a$
20 b%=asc(a$)
30 c$=chr$(b%)
40 print c$
50 print b%
60 if fire(0) then goto 10
70 if up(0) then end
80 goto 50
用這個程式輸入一個中文後,在螢幕上會顯示這箇中文和該中文的ASC碼按此時按中鍵繼續輸入下一個並查詢,按上鍵結束程式;這個程式每次只支持查詢一個中文字元的ASC碼。
有ASC碼後就可以通過下面的方法來顯示中文:
chr$(N%) ->返回某ASC值的UTF-8字元串,N%為該字元的ASC碼。
套用示例:
1.input chr$(N%) ,a%
2.print chr$(N%)
…
二、賦值語句
格式:變數=表達式
說明:此語句用於將右邊的表達式所代表的值賦給左邊的變數;
注意:
(1)賦值語句左邊只能是變數名稱,而不能是表達式,右邊的表達式可以是一個常量、變數或含變數的運量式,如x=2是正確的,2=x是錯誤的;
(2)只能是右邊賦給左邊,不能反向賦給,如C=A B是正確的,A B=C是錯誤的,a=b和b=a的意思是不一樣的,a=b表示將b的值賦給a,而b=a表示將a的值賦給b;
(3)不能利用賦值語句進行代數式的演算(如化簡、因式分解、解方程等,如y=a^2-b^2=(a+b)(a-b)),這是實現不了的,在賦值號右邊表達式中每一個變數都必須事先賦給確定的值(在MB里一般默認所有數值變數為0),在一個賦值語句中只能給一個變數賦值,不能出現兩個或兩個以上的“=”,但對於同一變數可以多次賦值。
MobileBASIC教程-字元串函式
1. len(s$) - 取長函式,獲取某字元串s$的長度的值(即組成字元串s$的字元的個數);如:如果s$="abcde",則len(s$)=5,可以把它賦給變數(下面的所有函式亦同),如:a%=len(s$)、c%=len(c$)…
2. mid$(s$,s%,l%) - 取段函式,獲取某字元串s$中的某段內容,s%為起始位置,l%為取段長度;如:如果a$="abcdefghij",那么mid$(a$,3,5)取得的就是"cdefg"。
3. left - 左取函式,左取字元串s$的最左邊的i%個字元;如:如果a$="123456",則left取得的就是"12345"。
4. right$(s$,i%) - 右取函式,右取字元串s$的最右邊的i%個字元;如:如果b$="abcdefg",則right$(b$,3)取得的就是"efg"。
5. str$(n) - 把數字變成字元串(也可以用於由數字變數到字元變數,即由%到$);n即可以是變數也可以是具體的數值,在顯示多個數字時常用到,如:用變數a%、b%運算得a%=45、b%=15,要顯示“a%:b%”,即“45:15”,切不可用print a%":"+b%,因為數值變數只能用於數學計算,這時要用此函式將a%、b%轉為字元串,即正確的應為:print str$(a%)":"+str$(b%)。
6. val(s$) - 把字元串變成數字(即由$到%);此字元串必須全部為數字。
7. chr$(n%) - 把某ASC值n%還原為它所對應的UTF-8字元串,通常用於顯示MB不支持直接編寫的字元串(如中文)。
8. asc(s$) - 獲取某UTF-8字元串s$的ASC值。
MobileBASIC教程-運算
一、一般運算
1. + 加號,在數值變數里是取數值相加的和,在字元串變數是取字元串串連的總字元;如:1+2+3=6、"arc""tan"="arctan"、如果a%=15,b%=35,則a%+b%=50、如果a="hello",b="word",則a","+b="hello,word"…
2. - 減號,只能用於數值運算,取數值相減的差。
3. * 乘號,只能用於數值運算,取數值相乘的積。
4. / 除號,只能用於數值運算,取數值相除的商;如:5/1=5、1/2=0.5、110/25=4…。
5. ^(在MB中是^+1 (^=%)) 乘方,只能用於數值運算,格式為“底數^指數”,a^n代表a的n次方(或次冪);但是在MB里卻是個無理數(原因尚未知曉),經我研究,有個辦法解決:取整數並加1,但為什麼要加1呢?因為我發現取整數要少一個數值,所以要在後面加上1,即在MB中的格式為“底數^指數+1”(底數^指數=%),(^=%)和(底數^指數=%)表示“底數^指數”的值要取整數,但對0不行,因為0^n=0,而0^n+1=1,不過可以用類似這樣的語句:if a=0 then c=0(a為底數、c為結果)
如(此示例是在MB中的情況):5^2+1=25…
6. () 括弧,即優先處理括弧內的運算,可以複合使用;如2*(3*(2*(1+2)-3)+5)=28…
二、邏輯運算
1. > 大於號,通常用於條件選擇語句,且只能用於數值變數;a>b代表a的數值大於b,如:if a>b then print a(如果a的數值大於b,則在螢幕上輸出a)…
2. < 小於號,通常用於條件選擇語句,且只能用於數值變數;a
3. = 賦值號,用於把右邊的值賦給左邊的變數,這個在《MobileBASIC教程-語法篇》中詳細介紹了,所以在這裡將不作詳細介紹。
4. >= 大於或等於,通常用於條件選擇語句。
5. 0 and a1 then print a(如果a大於0且不等於1,則在螢幕上輸出a)…
2. or 或運算,即左右兩邊要至少滿足一種的情況則判斷為是,沒有一個滿足則判斷為否,格式為“條件1 or 條件2 or 條件3 or … or 條件n”(至少要有兩個條件);一般用於條件選擇語句,如:if a>0 or b>0 or c 5 then end(只要a>0和b>0和c5中有一個以上(包括一個)滿足,則結束程式。
3. not 非運算,即作右邊情況的反判斷,即右邊為是則取否,右邊為否則取是,格式為“not 情況”;一般用於條件選擇語句,如:if not a>0 then print a(如果a不大於0,則在螢幕上輸出a),
註:也可以和與運算、或運算搭配構成“與非”、“或非”運算(如下)。
4. not ( and ) 與非運算,即and左右兩邊有一個不滿足的情況則判斷為是,否則判斷為否,格式為“not (條件1 and 條件2 and 條件3 and … and 條件n)”(條件至少要有兩個);如:if not (a%>0 and a% 1 then end(如果a%大於0且不等於1則不符合條件,跳過這一行(即不執行then後的命令,程式不會結束)
5. not ( or ) 或非運算,即or左右兩邊沒有一個滿足則判斷為是,否則判斷為否,格式為“not (條件1 or 條件2 or 條件3 or … or 條件n)”(至少要有兩個條件),另一種理解方式:括弧里的條件沒有一個滿足則判斷為是,只要有一個滿足則判斷為否。
註:MB的布爾運算按從左到右的順序進行,如要優先運算某段,請使用括弧(),
MB布爾運算還可用來模擬電路(1、0),如:1 and 1=1、1 or 0=1、not 0=1…
MobileBASIC教程-日期時間函式
1.“年份”的獲取
即獲取年份的值,可以這樣:
10 d%=days(0)
20 m%=milliseconds(0)
30 y%=year(d%,m%)
這樣,y%就獲得了年份的值。
2.“月份”的獲取
10 d%=days(0)
20 m%=milliseconds(0)
30 mon%=month(d%,m%)
這樣,mon%就獲得了月份的值。
3.“天數”的獲取
10 d%=days(0)
20 m%=milliseconds(0)
30 day%=day(d%,m%)
這樣,day%就獲得了天數的值。
4.“小時”的獲取
10 d%=days(0)
20 m%=milliseconds(0)
30 h%=hour(d%,m%)
這樣,h%就獲得了小時的值。
5.“分鐘”的獲取
10 d%=days(0)
20 m%=milliseconds(0)
30 min%=minute(d%,m%)
這樣,min%就獲得了分鐘的值。
6.“秒鐘”的獲取
10 d%=days(0)
20 m%=milliseconds(0)
30 s%=second(d%,m%)
這樣,s%就獲得了秒鐘的值。
-----
註:
由上可知,要想獲得日期和時間的值,都要先用
10 d%=days(0)
20 m%=milliseconds(0)
這兩句來讀取日期與時間,其中,d%讀取的為日期參數,m%讀取的是時間參數,有了這兩個,再配合日期時間讀值函式就行了。
-----
如:
10 d%=days(0)
20 m%=milliseconds(0)
30 s%=second(d%,m%)
40 min%=minute(d%,m%)
50 h%=hour(d%,m%)
60 time$=str":"+str":"+str
70 sleep 999
80 cls
90 drawstring time$,0,10
100 goto 10
這樣螢幕上就出現了時間。
MobileBASIC教程-特殊函式
1. : - 多指令函式,即把某段連續的指令連到一行,從左到右逐漸執行,和分行一樣,執行完第一段才會執行第二段,格式為“指令1:指令2:指令3:…:指令n”,不過有個缺點,跳行不方便,因為都在一行上,頂多跳到這行行首過其他行,如:a=1:b=2:c=a+b:print c…
2. dim x(n) - 定義數組函式,即定義某數組有多少項;x為數組名,n為該數組的項數;其實是還有一項x(0)的,稱x(0)之為零項,定義後該數組的變數的項序數可以用變數式表示,如:a(n+1)=1。如:dim a(3)即定義變數a有3項,分別為a(1),a(2),a(3),其實還有個零項a(0)、dim b%(n%)定義變數b%有n%項,這個可以用變數代替的、dim c…
套用:這個函式套用得非常廣泛,靈活使用它可以使複雜的程式簡單化。
3. for 循環變數 = 起始數 to 終止數 step 步長:循環內容:next 循環變數 - for循環,該循環是制定了次數的循環,並且每次執行循環時循環變數的值都會增加;步長是指循環變數每次增加的數值,若沒設步長,即for i% = a to b,則默認步長為1;for循環是當型循環,即當循環變數滿足“初值”=“終值”時,就執行循環。
如:
10 for i% = 1 to 10
20 a%=1:b%=1
30 b%=b%*a%:a%=a%+1
40 next i%
這樣,就可以讓for和next之間的語句循環10次。
4. gosub l% - 跳轉返回語句,跳轉至l%行後再返回,格式為“gosub 行數”;和goto不同的是它跳轉到某行後執行完該行後再返回它所在行數的下一行,如果要它跳轉後執行多個指令,可以在它跳轉的那行用“:”實現。如:
10 print "a"(1.顯示a)
20 gosub 40(2.跳轉至40行並等待返回)
30 print "c"(4.顯示c)
40 print "b"(3.顯示b,顯示後跳轉至20行的下一行,即30行)
(括弧內為解釋,“1.”表示執行的先後順序)會在螢幕上依次出現a、b、c。
MobileBASIC教程-選單與按鍵
一、選單
1. 新建選單。
語句為:
“menuadd 選單名稱,選單類型,排序”
在選單列表里新建一個選單。
“選單名稱”為顯示選單時該選單的名稱;
“選單類型”為定義該選單的類型,用數字表示,有以下幾種:
1 - 螢幕
2 - 返回
3 - 取消
4 - 確定
5 - 幫助
6 - 停止
7 - 退出
8 - 列表
“排序”為定義該選單在選單列表的位置,用數字表示;當重複時,先建的選單優先排序。
2. 選單操作。
語句為:
“字元變數=menuitem(0)”
將按下的選單的名稱賦給字元變數,若沒有任何選單被按下,則保持空串"";
通常配合if條件選擇語句使用,可以實現選單功能。
3. 刪除選單。
語句為:
“menuremove 選單名稱”
刪除某選單名稱對應的選單,使該選單不再出現再選單列表上。
程式結束時一般要刪除所有新建的選單。
如:
10 menuadd "input/AC",4,1
20 menuadd " ",4,2
30 menuadd "-",4,3
40 menuadd "*",4,4
50 menuadd "/",4,5
60 menuadd "exit",7,6
70 s=menuitem(0)
80 if s="input/AC" then gosub 150
90 if s=" " then gosub 160
100 if s="-" then gosub 170
110 if s="*" then gosub 180
120 if s="/" then gosub 190
130 if s="exit" then goto 200
140 goto 70
150 input"x",x%:print x%:y%=x%
160 input"x",x%:y%=y% x%:print y%
170 input"x",x%:y%=y%-x%:print y%
180 input"x",x%:y%=y%*x%:print y%
190 input"x",x%:y%=y%/x%:print y%
200 menuremove "input/AC":menuremove " ":menuremove "-":menuremove "*":menuremove"/":menuremove "exit"
210 end
計算器,輸入第一個數時要用選單“input/AC”,有興趣的試試。
二、按鍵操作
1. 系統按鍵
up(0) - 導航上鍵/數字2鍵
down(0) - 下鍵/8鍵
left(0) - 左鍵/4鍵
right(0) - 右鍵/6鍵
fire(0) - 中鍵/5鍵
gamea(0) - 1鍵(遊戲A鍵)
gameb(0) - 3鍵(遊戲B鍵)
gamec(0) - 7鍵(遊戲C鍵)
gamed(0) - 9鍵(遊戲D鍵)
2. 自義定鍵及讀鍵值
語句為:
“數值變數=inkey(0)”
讀取按下的鍵的鍵值到變數,在沒按下時,該值為0。通常用於與if語句搭配實現按鍵功能,也可以用來讀鍵值。
如:
10 i%=inkey(0)
20 print i%
30 goto 10
讀鍵值程式,當然,可以簡化為:
10 print inkey(0)
20 goto 10
如:if fire(0) then end(如果按下導航中鍵則結束程式)、if inkey(0) then print "next"(如果按下任意一個鍵則顯示“next”)、if inkey(0)=35 then print "good!"(如果按下#鍵則顯示“good!”)
附:一般JAVA機型鍵值表
導航上鍵:-1
導航下鍵:-2
導航左鍵:-3
導航右鍵:-4
導航中鍵:-5
左軟鍵:-6
右軟鍵:-7
數字1鍵:49
數字2鍵:50
數字3鍵:51
數字4鍵:52
數字5鍵:53
數字6鍵:54
數字7鍵:55
數字8鍵:56
數字9鍵:57
底部*鍵:42
數字0鍵:48
底部#鍵:35
MobileBASIC教程-數學計算
1. abs(x) - 取x的絕對值。
2. sqr(x) - 取x的平方根,用整數變數時會-1,所以用整數變數取平方根時要在後面加1。
3. mod(a,b) - 取a除以b的餘數,如:mod(5,3)=2。
4. rnd(0) - 取一個隨機數,即隨機選取一個數;但在MB里這個數的範圍太大了(32 B),所以,一般配合餘數函式取一定的範圍,即:
10 a%=rnd(0)
20 r%=mod(a%,x%)
這樣,就把隨機數的範圍定位在了“-x%