mobilebasic

MobileBASIC是一款手機basic語言編程軟體,是一款BASIC語言解釋器,支持基本命令,日期和時間函式,接口選擇,圖解說明,命令輸出輸入等等功能。

基本信息

簡單教程

在你的手機上寫程式 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%

相關詞條

熱門詞條

聯絡我們