C語言手機(jī)游戲_第1頁
C語言手機(jī)游戲_第2頁
C語言手機(jī)游戲_第3頁
C語言手機(jī)游戲_第4頁
已閱讀5頁,還剩253頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

手機(jī)游戲項目介紹本項目需要學(xué)生在《程序設(shè)計基礎(chǔ)》課程的基礎(chǔ)上,基于C語言基本的語法與程序設(shè)計思想,結(jié)合當(dāng)前企業(yè)所需的MTK平臺進(jìn)行游戲開發(fā)的項目。學(xué)生通過游戲項目開發(fā)進(jìn)ー步理解程序設(shè)計的內(nèi)涵,提高項目的開發(fā)能力并且進(jìn)行探索和創(chuàng)新,具備一定的游戲設(shè)計運(yùn)行思維,并可以直接進(jìn)入游戲企業(yè)進(jìn)行工作。以下分為三個部分包括:游戲語言的擴(kuò)展、游戲接口函數(shù)的設(shè)計和部分游戲開發(fā)文件。目錄TOC\o"1-5"\h\z\o"CurrentDocument"目錄 1\o"CurrentDocument"第1章起點 2\o"CurrentDocument"全局變量 4レセ,厶お疋 4\o"CurrentDocument"第2章類型和值 5\o"CurrentDocument"2.2Booleans 5\o"CurrentDocument"2.5Functions 8第3章表達(dá)式 9\o"CurrentDocument"算術(shù)運(yùn)算符 9天系セh符 9邏輯運(yùn)算符 9連接ゆ算符 10\o"CurrentDocument"優(yōu)先級 11\o"CurrentDocument"表的構(gòu)造 11\o"CurrentDocument"第4早基本語法 14\o"CurrentDocument"局部變量’ノイ弋碼塊(block) 15\o"CurrentDocument"控制結(jié)構(gòu)語句 16\o"CurrentDocument"break和return語句 19\o"CurrentDocument"多返回值 20\o"CurrentDocument"可變參數(shù) 23\o"CurrentDocument"命名參數(shù) 24\o"CurrentDocument"函數(shù)數(shù)組 26\o"CurrentDocument"配置編譯批處理 27\o"CurrentDocument"使用UtralEdit編輯MES文件 29\o"CurrentDocument"MES程序基本結(jié)構(gòu) 32\o"CurrentDocument"附錄A平臺函數(shù) 33\o"CurrentDocument"附錄BMES函數(shù) 34\o"CurrentDocument"附錄C字符轉(zhuǎn)換 34第1章起點例子://預(yù)編譯指令#defineSCREEN_WIDTH240#defineSCREEN_HEIGHT320ttdefineHELLOn\104\0\101\0\108\0\108\0\lll\0M//#defineCOMMA**\44\0"#defineWORLD"\119\0\lll\0\114\0\108\0\100\0\0n#defineri,A':1_SOFr.hvright262144//定義ー些變量str=” //第一次i屮現(xiàn),隱性バ訓(xùn)Jstr為全局變腦,賦侑類型為Stringshow=true;〃オレ?frame=1;〃數(shù)’ア〃初始化數(shù)據(jù),進(jìn)游戲時只執(zhí)行一次functionmet_plat__init()Str=HELLO??COMMA..WORLD;//初始化T符串end〃繪圖函數(shù),每幀執(zhí)行ー次functionmet_plat__paint()MET_PLAT_fi1l_rect(0,0,SCREEN_WIDTHZSCREEN_HEIGHT,255,255,255);//填充白色底色ifshowthenMET_PLAT_draw_string(SCREEN_WエDTH/2,SCREENHEIGHT/2,str,0,0,0);〃在屏幕中央偏右畫endend〃應(yīng)用的邏輯處理部分,每幀都會執(zhí)行這個函數(shù)一遍functionmetplatdealact()frame=frame+1;ifMET_PLAT_mod(frame,20)==0thenshow=notshow;/C;20幀更改一次狀態(tài)endend//按鍵按下的及時處理functionmet__plat_dealkeydown()〃右軟鍵退出程序ifMET_PLAT_getKeyState('PLA^SOFTKEYRIG7true)thenMET_PLAT_exit_app();endend//筆觸抬起來的及時處理functionmet_plat_dealpenup()end〃退出應(yīng)用時的處理,暫停保存數(shù)據(jù)等處理functionmet_p2at_exit()end目前版本的可執(zhí)行mes文件包括以下幾個部分.預(yù)編譯指令使用預(yù)編譯指令定義常量,在編譯mes文件之前,將一些常量通過預(yù)編譯指令替換成表達(dá)式,減少變量的使用。.變量聲明MES的語法中,變量并不需要聲明,但是為了代碼的可讀性考慮,仍然建議將全局變量在文件開頭即賦值。.必須實現(xiàn)的函數(shù)示例代碼中斜體字的幾個函數(shù),可以實現(xiàn)程序的初始化、繪畫、輸入等動作。于字串的表達(dá)方式可以參照2.4。紅色標(biāo)示的函數(shù)是直接調(diào)用C語言底層程序的平臺函數(shù)。綠色表示的預(yù)編譯常量,可以通過#include指令從特定的mes文件中調(diào)用。為方便起見,我們在之后的代碼中,使用print。函數(shù),代表將文字內(nèi)容顯示給用戶的動作。ChunksChunk是ー系列語句,Mes執(zhí)行的每ー塊語句。每個語句結(jié)尾的分號(;)。a=1;b=a*2;ー個Chunk可以是ー個語句,也可以是一系列語句的組合,還可以是函數(shù)。例外的情況是,在使用end作為結(jié)束的時候可以不需要加(;)。全局變量全局變量不需要聲明,給ー個變量賦值后即創(chuàng)建了這個全局變量,訪問ー個沒有初始化的全局變量也不會出錯,只不過得到的結(jié)果是:nil.print(b); //-->nilb=10;print(b); //-->10如果你想刪除ー個全局變量,只需要將變量負(fù)值為nilb=nil;print(b); //-->nil這樣變量b就好像從沒被使用過ー樣.換句話說,當(dāng)且僅當(dāng)ー個變量不等于nil時,這個變量存在。詞法約定標(biāo)示符:字母(letter)或者下劃線開頭的字母、下劃線、數(shù)字序列.最好不要使用下劃線加大寫字母的標(biāo)示符,因為Mes的保留字也是這樣的。Mes中,letter的含義是依賴于本地環(huán)境的。保留字:以下字符為Mes的保留字,不能當(dāng)作標(biāo)識符。注意:Mes是大小寫敏感的。andendinrepeatwhilebreakfalselocalreturndofornilthenelsefunctionnottrueelseififoruntil注釋:單行注釋:〃多行注釋:/**//*print(10)*///noaction(comment)第2章類型和值Mes是無類型語言,變量不要類型定義。Mes中有6個基本類型分別為:nil、boolean>number>string,functiontable〇函數(shù)type可以測試給定變量或者值的類型。print(type("Helloworld"));//-->stringprint(type(10.4*3));//-->numberprint(type(print));//-->functionprint(type(type));//-->functionprint(type(true));//-->booleanprint(type(nil));//-->nilprint(type(type(X)));//-->string變量沒有預(yù)定義的類型,每ー個變量都可能包含任一種類型的值。print(type(a));//-->nil(1a1isnotinitialized)a=10;print(type(a));//-->numbera="astring!!",print(type(a));//-->stringa=print;//yes,thisisvalid!a(type(a));//-->function注意上面最后兩行,我們可以使用function像使用其他值一樣使用(更多的介紹參考第六章)。一般情況下同一變量代表不同類型的值會造成混亂,最好不要用,但是特殊情況下可以帶來便利,比如nil。NilMes中特殊的類型只有一個值:nil;一個全局變量沒有被賦值以前默認(rèn)值為nil;給全局變量負(fù)ni!可以刪除該變量。Booleans兩個取值false和true。但要注意Mes中所有的值都可以作為條件。在控制結(jié)構(gòu)的條件中除了false和nil為假,其他值都為真。所以Mes認(rèn)為。和空串都是真。Numbers表示實數(shù),Mes中沒有整數(shù)。用實數(shù)代替整數(shù)不會有什么誤差(除非數(shù)字大于100,000.000,000,000)〇Mes的numbers可以處理任何長整數(shù)。和其他語言類似,數(shù)字常量的小數(shù)部分和指數(shù)部分都是可選的,數(shù)字常量的例子:4 0.4 4,57e-3 0.3el2 5e+20Strings目前Strings類型的文字不能直接使用,需要處理成Unicode形式,オ可在代碼中使用,以下的功能已經(jīng)實現(xiàn),但是需要等待更新版本才能在代碼中操作字符串。指字符的序列。mes是8位字節(jié),所以字符串可以包含任何數(shù)值字符,包括嵌入的〇。這意味著你可以存儲任意的二進(jìn)制數(shù)據(jù)在ー個字符串里。Mes中字符串是不可以修改的,你可以創(chuàng)建一個新的變量存放你要的字符串,如下:a=*'onestring";b=string.gsub(a,"one","another");//changestringpartsprint(a); //-->onestringprint(b); //-->anotherstringstring和其他對象一樣,Mes自動進(jìn)行內(nèi)存分配和釋放。可以使用單引號或者雙引號表示字符串a(chǎn)="aline";b=?anotherline';為了風(fēng)格統(tǒng)ー,最好使用ー種,除非兩種引號嵌套情況。對于字符串中含有引號的情況還可以使用轉(zhuǎn)義符、來表示。Mes中的轉(zhuǎn)義序列有:\abell\bbackspace//后退\fformfeed//換頁\nnewline//換行\(zhòng)rcarriagereturn//回車\thorizontaltab//制表\vverticaltabwbackslash//i(ヽn\"doublequote//雙引號\'singlequote/Z單引號\[leftsquarebracket//左中括號\]rightsquarebracket//右中括號例子:代碼:print(''one1ine\nnextline\n\"inquotesヽ"/'inquotes'");結(jié)果:onelinenextline**inquotesn,,inquotes'代碼:print('abackslashinsidequotes:\'\\\1');結(jié)果:abackslashinsidequotes:*\,代碼:print(nasimplerway:'\\1*');結(jié)果:asimplerway:*\'還可以在字符串中使用、ddd(ddd為三位十進(jìn)制數(shù)字)方式表示字母。"alo'n123ヾ“和?'971o\l0\04923”I是相同的。運(yùn)行時,Mes會自動在string和numbers之間自動進(jìn)行類型轉(zhuǎn)換,當(dāng)ー個字符串使用算術(shù)操作符時,string就會被轉(zhuǎn)成數(shù)字。print(n10H+1)//-->11print(n10+ln)//-->10+1print(n-5.3e-10”★"2") //-->-1.06e-09print(?'hello11+1)/Z錯誤,不能轉(zhuǎn)換"hell。"反過來,當(dāng)Mes期望ー個string而碰到數(shù)字時,會將數(shù)字轉(zhuǎn)成string〇print(10..20) //-->1020..在Mes中是字符串連接符,當(dāng)在ー個數(shù)字后面寫..時,必須加上空格以防止被解釋錯。盡管字符串和數(shù)字可以自動轉(zhuǎn)換,但兩者是不同的,像10=="10”這樣的比較永遠(yuǎn)都是錯的。如果需要顯式將string轉(zhuǎn)成數(shù)字可以使用函數(shù)tonumber(),如果string不是正確的數(shù)字該函數(shù)將返回nil。

line=io.read();n=tonumber(line);//readaline//trytoconvertittoanumberifn==nilthenerror(line.."isnotavalidnumbern);elseprint(n*2);end反之,可以調(diào)用tostring()將數(shù)字轉(zhuǎn)成字符串,這種轉(zhuǎn)換一直有效:print(tostring(10)=="IO");//-->trueprint(10.."'?=="10”);//-->trueFunctions函數(shù)和其他變量一樣,可以存儲在變量中,可以作為函數(shù)的參數(shù),也可以作為函數(shù)的返回值。這樣ー個程序就可以重新定義函數(shù)增加新的功能或者為了避免運(yùn)行不可靠代碼創(chuàng)建安全運(yùn)行環(huán)境而隱藏函數(shù)Mes可以調(diào)用mes或者C實現(xiàn)的函數(shù),Mes所有標(biāo)準(zhǔn)庫都是用C實現(xiàn)的。標(biāo)準(zhǔn)庫包括string庫、算術(shù)庫、table庫。尺M(jìn) 、亠一第3早表達(dá)式Mes中的表達(dá)式包括數(shù)字常量、字符串常量、變量、?元和二元運(yùn)算符、函數(shù)調(diào)用。還可以是非傳統(tǒng)的函數(shù)定義和表構(gòu)造。算術(shù)運(yùn)算符二元運(yùn)算符:+-*/“(加減乘除棄)一元運(yùn)算符:-(負(fù)值)這些運(yùn)算符的操作數(shù)都是實數(shù)。注意,MES語法中沒有++ー這樣的自加自減的運(yùn)算方式。關(guān)系運(yùn)算符這些操作符返回結(jié)果為false或者true;==和?=比較兩個值,如果兩個值類型不同,Mes認(rèn)為兩者不同;nil只和自己相等。Mes通過引用比較tables和functions。也就是說當(dāng)且僅當(dāng)兩者表示同一個對象時相等。a={};a.x=1;a.y=0;b={};b.x=1;b.y=0;c=a;a==c但是a-=bMes比較數(shù)字按傳統(tǒng)的數(shù)字大小進(jìn)行,比較字符串按字母的順序進(jìn)行。當(dāng)比較不同類型的值的時候要特別注意:"〇”==〇//false2<15 //truen2n<n15" //false(alphabeticalorder!)為了避免不一致的結(jié)果,混合比較數(shù)字和字符串,Mes會報錯,比如:2v”15

and or not邏輯運(yùn)算符認(rèn)為false和nil是假(false),其他為真,〇也是true.and和or的運(yùn)算結(jié)果不是true和false,而是和它的兩個操作數(shù)相關(guān)。aandb 〃如果aorb //如果a為false,則返回a,否則返回ba為true,則返回a,否則返回b例如:print(4and5);print(niland13);print(falseand13);print(4or5);print(falseor5);//-->5//-->nil//—>false//-->4//-->5ー個很實用的技巧:如果X為false或者nil則給x賦初始值vx=xorv等價于ifnotxthenX=V;endand的優(yōu)先級比or髙。C語言中的三元運(yùn)算符a?b:c在Mes中可以這樣實現(xiàn):(aandb)orcnot的結(jié)果只返回false或者trueprint(notnil);//-->trueprint(notfalse);//-->trueprint(not0);//-->falseprint(notnotnil);//-->false

//兩個點字符串連接,如果操作數(shù)為數(shù)字,Mes將數(shù)字轉(zhuǎn)成字符串。print("Hello'*.."World");//-->HelloWorldprint(0..1);//-->01優(yōu)先級從高到低的順序:Anot -(unary)★ /+ -< > <=>=~===andor除了へ和.?外所有的二元運(yùn)算符都是左連接的。a+i<b/2+l<ーー>(a+i)<((b/2)+l)5+xa2*8<-->5+((xa2)*8)a<yandy<=z<—>(a<y)and(y<=z)Aへ-x2<-->-(xa2)AAxyz<-->xA(yAz)表的構(gòu)造構(gòu)造器是創(chuàng)建和初始化表的表達(dá)式。最簡單的構(gòu)造函數(shù)是{},用來創(chuàng)建一個空表??梢灾苯映跏蓟瘮?shù)組:days={'?Sunday**,?'Monday*',"Tuesday**,"Wednesday","Thursday","Friday","Saturday"}Mes將“Sunday”初始化days[l](第一個元素索引為1),用”Monday”初始化days[2]...print(days[4]); //-->Wednesday構(gòu)造函數(shù)可以使用任何表達(dá)式初始化:tab={sin(1),sin(2),sin(3),sin(4),sin(5),sin(6),sin(7),sin(8)}如果想初始化ー個表作為record使用可以這樣:a={x=0,y=0} <-->a={};a.x=0;a.y=0不管用何種方式創(chuàng)建table,我們都可以向表中添加或者刪除任何類型的域,構(gòu)造函數(shù)僅僅影響表的初始化。w={x=0,y=0,label="console");x={sin(0),sin(1),sin(2)};w[1]="anotherfield";x.f=w;print(w[?'x"]);//-->oprint(w[1]);//-->anotherfieldprint(x.f[1]);//-->anotherfieldw.x=nil;//removefield"x"每次調(diào)用構(gòu)造函數(shù),Mes都會創(chuàng)建一個新的table,可以使用table構(gòu)造ー個list:list=nil;forlineinio.lines()dolist={next=list#value=line};end這段代碼從標(biāo)準(zhǔn)輸入讀進(jìn)每行,然后反序形成鏈表。下面的代碼打印鏈表的內(nèi)容:=list;while1doprint(1.value);=1.next;end在同一個構(gòu)造函數(shù)中可以混合列表風(fēng)格和record風(fēng)格進(jìn)行初始化,如:polyline={color=*'blue",thickness=2,npoints=4,{x=0, y=0},{x=-10,y=0},{x=-10,y=l},{x=0zy=l}這個例子也表明我們可以嵌套構(gòu)造函數(shù)來表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu).print(polyline[2].x); //-->-10上面兩種構(gòu)造函數(shù)的初始化方式還有限制,比如你不能使用負(fù)索引初始化ー個表中元素,字符串索引也不能被恰當(dāng)?shù)谋硎?。下面介紹ー種更一般的初始化方式,我們用[expression]顯示的表示將被初始化的索引:opnames={[”+”]="add",[*'-n]="sub",["*"]="mul",["/"]="div"};i=20;s="-";a={[i+0]=s,[i+1]=s..s,[i+2]=s..s..s);print(opnames[s]); //-->subprint(a[22]); //-->——list風(fēng)格初始化和record風(fēng)格初始化是這種一般初始化的特例:{x=0,y=0} <--> {["x"]=0,["y"]=0}{"red","green","blue"} <-->{[1]=Mred",[2]="green",[3]="blue"}如果真的想要數(shù)組下標(biāo)從0開始:days={[0]="Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};注意:不推薦數(shù)組下標(biāo)從0開始,否則很多標(biāo)準(zhǔn)庫不能使用。在構(gòu)造函數(shù)的最后的ペ是可選的,可以方便以后的擴(kuò)展。a={[1]="red",[2]="green",[3]="blue",}在構(gòu)造函數(shù)中域分隔符逗號可以用分號(”廣)替代,通常我們使用分號用來分割不同類型的表元素。{x=10,y=45;"one","two","three"}第4章基本語法Mes像C和PASCAL幾乎支持所有的傳統(tǒng)語句:賦值語句、控制結(jié)構(gòu)語句、函數(shù)調(diào)用等,同時也支持非傳統(tǒng)的多變量賦值、局部變量聲明。賦值語句賦值是改變ー個變量的值和改變表域的最基本的方法。a="hello”.."world";t.n=t.n+1;Mes可以對多個變量同時賦值,變量列表和值列表的各個元素用逗號分開,賦值語句右邊的值會依次賦給左邊的變量。a,b=10,2*x <—> a=10;b=2*x遇到賦值語句Mes會先計算右邊所有的值然后再執(zhí)行賦值操作,所以我們可以這樣進(jìn)行交換變量的值:x,y=y,x;//swap1x1for'y,a[i],a[j]=a[j]ra[i];//swap?a[i]*for*a[i]?當(dāng)變量個數(shù)和值的個數(shù)不一致時,Mes會一直以變量個數(shù)為基礎(chǔ)采取以下策略:a.變量個數(shù)>值的個數(shù)按變量個數(shù)補(bǔ)足nilb.變量個數(shù)<值的個數(shù)多余的值會被忽略例如:a,b,c=0,1;print(a,b,c);//-->01nila,b=a+1,b+1,b+2;//valueofb+2isignoredprint(a,b);//-->12a,b,c=0;print(a,b,c);//-->〇nilnil上面最后一個例子是一個常見的錯誤情況,注意:如果要對多個變量賦值必須依次對每個變量賦值。a,b,c=0,0,0;print(a,b,c);//-->o00

多值賦值經(jīng)常用來交換變量,或?qū)⒑瘮?shù)調(diào)用返冋給變量:a,b=f();f()返回兩個值,第一個賦給a,第二個賦給b。4.2局部變量與代碼塊(block)使用local創(chuàng)建一個局部變量,與全局變量不同,局部變量只在被聲明的那個代碼塊內(nèi)有效。代碼塊:指ー個控制結(jié)構(gòu)內(nèi),ー個函數(shù)體,或者ー一個chunk(變量被聲明的那個文件或者文本串)。x=10;locali=1x=10;locali=1;whilei<=xdolocalx=i*2;print(x);i=i+1;endifi>20thenlocalx;x=20;print(x+2);elseprint(x);end//localtothechunk//localtothewhilebody//-->2,4,6,8,//localtothe,*then"body//-->10(theglobalone)print(x);print(x);應(yīng)該盡可能的使用局部變量,有兩個好處:.避免命名沖突.訪問局部變量的速度比全局變量更快.我們給block劃定一個明確的界限:do..end內(nèi)的部分。當(dāng)你想更好的控制局部變量的作用范圍的時候這是很有用的。dolocala2=2*alocald=sqrt(bA2-4*a*c)xl=(-b+d)/a2x2=(-b-d)/a2end --scopeof1a21and?d?endshereprint(xl,x2)4.3控制結(jié)構(gòu)語句控制結(jié)構(gòu)的條件表達(dá)式結(jié)果可以是任何值,Mes認(rèn)為false和nil為假,其他值為真。if語句,有三種形式:ifconditionsthenthen-partend;ifconditionsthenthen-partelseelse-partend;ifconditionsthenthen-partelseifconditionsthenelseif-part?? Z/>多個elseifelseelse-partend;while語句:whileconditiondostatements;endrepeat-until用?句:repeatstatements;untilconditions;for語句有兩大類:第一,數(shù)值for循環(huán):forvar=el,e2,e3do

loop-partendfor將用e3作為step從el(初始值)到e2(終止值),執(zhí)行100p-part。其中e3可以省略,默認(rèn)step=Lfor語句等價于如下代碼dolocalvar,limit,step=tonumber(el),tonumber(e2),tonumber(e3)ifnot(varandlimitandstep)thenerror()endwhile(step>0andvar<=limit)or(step<=0andvar>=limit)dolocalv=varblockvar=var+stependend有幾點需要注意:.三個表達(dá)式只會被計算ー次,并且是在循環(huán)開始前。fori=l,f(x)doprint(i);endfori=10/1,-1doprint(i);end第一個例子f(x)只會在循環(huán)前被調(diào)用一次。.控制變量var是局部變量自動被聲明,并且只在循環(huán)內(nèi)有效.fori=l,10doprint(i);endmax=I; //probablywrong!?i'hereisglobal如果需要保留控制變量的值,需要在循環(huán)中將其保存//findavalueinalistlocalfound=nilfori=l,a.ndoifa[i]==valuethenfound=i//savevalueof1i'breakendendprint(found).循環(huán)過程中不要改變控制變量的值,那樣做的結(jié)果是不可預(yù)知的。如果要退出循環(huán),使用break語句。第二,范型for循環(huán):前面已經(jīng)見過ー個例子://printallvaluesofarray1a,fori,vinipairs(a)doprint(v)end范型for遍歷迭代子函數(shù)返回的每一個值。再看一個遍歷表key的例子://printallkeysoftable?t1forkinpairs(t)doprint(k)end范型for和數(shù)值for有兩點相同:.控制變量是局部變量.不要修改控制變量的值再看ー個例子,假定有一個表:days={HSunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}現(xiàn)在想把對應(yīng)的名字轉(zhuǎn)換成星期幾,一個有效地解決問題的方式是構(gòu)造ー個反向表:revDays={["Sunday1*]=1,["Monday"]=2,["Tuesday"]=3,「Wednesday"]=4,["Thursday"]=5,["Friday"]=6,["Saturday"]=7}下面就可以很容易獲取問題的答案了:x="Tuesday;print(revDays[x]);//-->3我們不需要手工,可以自動構(gòu)造反向表revDays={};fori,vinipairs(days)dorevDays[v]=i;end4.4break和return語句break語句用來退出當(dāng)前循環(huán)(for、repeat、while)〇在循環(huán)外部不可以使用。return用來從函數(shù)返回結(jié)果,當(dāng)ー個函數(shù)自然結(jié)束時,結(jié)尾會有一個默認(rèn)的return〇(這種函數(shù)類似pascal的過程(procedure))Mes語法要求break和return只能出現(xiàn)在block的結(jié)尾一句(也就是說:作為chunk的最后一句,或者在end之前,或者else前,或者until前),例如:locali=1;whilea[i]doifa[i]==vthenbreakend=i+1;end有時候為了調(diào)試或者其他目的需要在block的中間使用return或者break,可以顯式的使用do..end來實現(xiàn):functionf〇〇()return〃格式錯誤doreturnend//正確OKend/Z代碼還未結(jié)束,但是已經(jīng)跳出第5章函數(shù)基礎(chǔ)函數(shù)有兩種用途:1.完成指定的任務(wù),這種情況下函數(shù)作為調(diào)用語句使用;2.計算并返回值,這種情況下函數(shù)作為賦值語句的表達(dá)式使用。語法:functionfunc_name(arguments-list)statements-list;end;調(diào)用函數(shù)的時候,如果參數(shù)列表為空,必須使用()表明是函數(shù)調(diào)用。print(8*9,9/8);a=math.sin(3)+math.cos(10);print(os.date());上述規(guī)則有一個例外,當(dāng)函數(shù)只有一個參數(shù)并且這個參數(shù)是字符串或者表構(gòu)造的時候,()可有可無:print"HelloWorld"<-->print("HelloWorld")f{x=10,y=20}<-->f({x=10,y=20})type{}<-->type({})Mes也提供了面向?qū)ο蠓绞秸{(diào)用函數(shù)的語法,比如〇:foo(x)與o.foo(o,x)是等價的。Mes使用的函數(shù),既可是Mes編寫的,也可以是C語言編寫的平臺函數(shù),但是為了保證安全,平臺函數(shù)在調(diào)用時要嚴(yán)格遵守參數(shù)傳遞格式。Mes函數(shù)實參和形參的匹配與賦值語句類似,多余部分被忽略,缺少部分用nil補(bǔ)足。平臺函數(shù)則不可以這樣傳遞參數(shù)。functionf(a,b)returnaorbend函數(shù)調(diào)用參數(shù)值f(3)a=3rb=nilf(3,4)a=3,b=4f(3,4,5)a=3,b=4 (5isdiscarded)5.1多返回值Mes函數(shù)可以返回多個結(jié)果值,比如string.find,其返回匹配串’’開始和結(jié)束的下標(biāo)”

(如果不存在匹配申返回nil)。s,e=string.find(??helloMesusers?',"Mesn)print(s,e) //-->7 9Mes函數(shù)中,在return后列出要返回的值得列表即可返回多值,如:functionmaximum(a)localmi=1; //最大的索引localm=a[mi]; /Z最大值fori,valinipairs(a)doifval>mthenmi=i;m=val;endendreturnm,mi;endprint(maximum({8,10,23,12,5})); //-->233Mes總是調(diào)整函數(shù)返冋值的個數(shù)以適用調(diào)用環(huán)境,當(dāng)作為獨立的語句調(diào)用函數(shù)時,所有返回值將被忽略。假設(shè)有如下三個函數(shù):functionfooO0end//returnsnoresultsfunctionfool0return'a'end//returns1resultfunctionfoo20return'a'?'b,;end//returns2results第一,當(dāng)作為表達(dá)式調(diào)用函數(shù)時,有以下幾種情況:1.當(dāng)調(diào)用作為表達(dá)式最后ー個參數(shù)或者僅有一個參數(shù)時,根據(jù)變量個數(shù)函數(shù)盡可能多地返回多個值,不足補(bǔ)nil,超出舍去。2,其他情況下,函數(shù)調(diào)用僅返回第一個值(如果沒有返回值為nil)x,y=foo2();x=foo2();//x=*a1,y=1b,//x='a?,1b*isdiscardedx,y,z=10,foo2();//x=10,y=1a',z='b'x,y=fooO();//x=nil,y=nilx,y=fool();//x=a1,y=nilx,y,z=foo2();//x=a',y=*b?,z=nilx,y=foo2(),20;//x=a',y=20x,y=fooO(),20,30;//x=nil',y=20,30isdiscarded第二,函數(shù)調(diào)用作為函數(shù)參數(shù)被調(diào)用時,和多值賦值是相同。

print(fooO());//-->print(fool());//-->aprint(foo2());//-->abprint(foo2(),1);//-->a1print(foo2().."x");//-->ax第三,函數(shù)調(diào)用在表構(gòu)造函數(shù)中初始化時,和多值賦值時相同。a={fooO()};//a={} (anemptytable)a={fool0};//a={?a?}a={foo2()};//a={a,*b*}a={fooO(),foo2(),4};//a[1]=nil,a[2]=a,a[3]=4另外,returnf()這種形式,則返回“f()的返回值”:functionfoo(i)ifi==0thenreturnfooO()elseifi==1thenreturnfool();elseifi==2thenreturnfoo2();endendprint(foo(1));//-->aprint(foo(2));//-->abprint(foo(0));//(沒有結(jié)果)print(foo(3));//(沒有結(jié)果)可以使用圓括號強(qiáng)制使調(diào)用返回一個值。print((fooO()));//-->nilprint((fool〇));//-->aprint((foo2()));//-->aー個return語句如果使用圓括號將返回值括起來也將導(dǎo)致返回?個值。函數(shù)多值返回的特殊函數(shù)unpack,接受一個數(shù)組作為輸入?yún)?shù),返冋數(shù)組的所有元素。unpack被用來實現(xiàn)范型調(diào)用機(jī)制,在C語言中可以使用函數(shù)指針調(diào)用可變的函數(shù),可以聲明參數(shù)可變的函數(shù),但不能兩者同時可變。在Mes中如果你想調(diào)用可變參數(shù)的可變函數(shù)只需要這樣:f(unpack(a));unpack返回a所有的元素作為f()的參數(shù)f=string.find;a={"hello","11"};print(f(unpack(a))) //-->34預(yù)定義的unpack函數(shù)是用C語言實現(xiàn)的,我們也可以用Mes來完成:functionunpack(t,i)i=ior1;ift[i]thenreturnt[i],unpack(t,i+1);endend可變參數(shù)Mes函數(shù)可以接受可變數(shù)目的參數(shù),和C語言類似在函數(shù)參數(shù)列表中使用三點(...)表示函數(shù)有可變的參數(shù)。Mes將函數(shù)的參數(shù)放在“個叫arg的表中,除了參數(shù)以外,arg表中還有一個域n表示參數(shù)的個數(shù)。例如,我們可以重寫print函數(shù):printResult=""functionprint(...)fori,vinipairs(arg)doprintResult=printResult..tostring(v)..H\t";endprintResult=printResult..n\n";end有時候我們可能需要幾個固定參數(shù)加上可變參數(shù)functiong(a,b,...)end函數(shù)調(diào)用參數(shù)值g(3)a=3,b=nil,arg={n=0}g(3,4)a=3,b=4,arg={n=0}g(3,4,5,8)a=3,b=4targ={5,8;n=2}如上面所示,Mes會將前面的實參傳給函數(shù)的固定參數(shù),后面的實參放在arg表中。舉個具體的例子,如果我們只想要string.find返回的第二個值。一個典型的方法是使用啞元(dummyvariable,下劃線):local_,x=string.find(s,p)//nowuse'x1還可以利用可變參數(shù)聲明一個select函數(shù):functionselect(n,...)returnarg[n];endprint(string.find(Hhellohello11,"hel")); //-->69print(select(1,string.find(Hhellohello11,*'he1n)));//-->6print(select(2,string,find(nhellohello*',"hel")));//-->9有時候需要將函數(shù)的可變參數(shù)傳遞給另外的函數(shù)調(diào)用,可以使用前面我們說過的unpack(arg)返回arg表所有的可變參數(shù),Mes將提供ー個文本格式化的函數(shù)string.format(類似C語言的sprinlf函數(shù)):functionfwrite(fmt,...)returnio.write(string.format(fmt,unpack(arg)));end這個例子將文本格式化操作和寫操作組合為ー個函數(shù)。命名參數(shù)Mes的函數(shù)參數(shù)是和位置相關(guān)的,調(diào)用時實參會按順序依次傳給形參。有時候用名字指定參數(shù)是很有用的,比如rename函數(shù)用來給一一個文件重命名,有"時候我們記不清命名前后兩個參數(shù)的順序了://不正確的代碼rename(old=ntemp.mesn,new=**tempi.mes");上面這段代碼是無效的,Mes可以通過將所有的參數(shù)放在?個表中,把表作為函數(shù)的唯一參數(shù)來實現(xiàn)上面這段偽代碼的功能。因為Mes語法支持函數(shù)調(diào)用時實參可以是表的構(gòu)造。rename{old="temp.mes",new="tempi.mes"}//注意兩邊是花括じ根據(jù)這個想法我們重定義了rename:functionrename(arg)returnos.rename(arg.oldrarg.new)end當(dāng)函數(shù)的參數(shù)很多的時候,這種函數(shù)參數(shù)的傳遞方式很方便的。例如創(chuàng)建窗口的函數(shù)有很多參數(shù)并且大部分參數(shù)是可選的,可以用下面這種方式:w=Window(x=0,y=0,width=300,height=200,title="Mes",background=1'bluen,border=true};functionWindow(options)iftype(options.title)~="string*'thenerror("notitle");elseiftype(options.width)~="number"thenerror("nowidth");elseiftype(options.height)~="number"thenerror("noheight");end__Window(options.title,options.xor0,options.yor0,options.width,options.height,options.backgroundor"white",options.border);end函數(shù)數(shù)組示例代碼#defineGAME_STATE_USERCONTROL1#defineGAME__STATE_CPUCONTROL2blockgamestate=GAME_STATE__USERCONTROL;fdealinput={[GAME_STATE_USERCONTROL]=function()//函數(shù)作為數(shù)組成員void.usercontrol();end,[GAME_STATE_CPUCONTROL]=function()end)functionvoid.usercontrol()//疋乂函數(shù)//用戶控制的ー些操作endfunctionmetplat_deaユkeydog()//調(diào)丿"函數(shù)fdealinput[blockgamestate]();end配置編譯批處理圖片需用圖片處理工具.exe把24位的透明色為F81CC0的bmp圖片做處理然后導(dǎo)出成imgtest.bcc且圖片的預(yù)定義文件可出為ResDef.h建議存儲圖片項H文件.boc,便于修改。音樂需寫ー個soundfiles.txt(名字可改,相應(yīng)createmestep.bat里改)格式為音樂的名稱空格文件的路徑音樂的名稱空格文件的路徑音樂的名稱空格文件的路徑例子:bgSoundsound/musicl.midBomb sound/BOMB3_2.wav會生成一個metSoundDefs.inc文件#defineMET_SOUND_BGSOUND0#defineMET_SOUND_BOMB1代碼文件gamesample.mes(createmestep.bat里對應(yīng))代碼在gamesample.mes編寫完畢后編譯執(zhí)行createmestep.batcd.\MinGW\bin\rem預(yù)處理文件gcc-E-xc..\.\gamesample.mes>..\.\comptmp.tmpcd..\\rem清除預(yù)處理后的殘留信息vmtool-ccomptmp.tmpren刪除臨時文件delcomptmp.tmp/Frem編譯代碼mesc-ocodegame.bincodeforcomp.mesrem生成音樂文件包vmtool-msoundfiles.txtsounddata.binrem生成游戲下載包vmtool-1codegame.binimgtest.bccsounddata.bintestgame.metcopytestgame.met.\EMU_240\WIN32FS\DRIVE_D\mestep\application\testgame.metH,/y紅色字內(nèi)容根據(jù)自己的項目不同可以自行修改。就會生成testgame.met文件(自動拷貝到.\EMU_240\WIN32FS\DRIVE_D\mestep\application\)運(yùn)行模擬器模擬器是AEMU_240\mmi\Debug\PixtelMMI.exe選擇file->networksimulator會出現(xiàn)模擬器界面,然后按確定就能看到應(yīng)用列表重新編譯MES文件后,模擬器不需要退出,只需退出當(dāng)前的MES應(yīng)用,再次進(jìn)入即可。

使用UtralEdit編輯MES文件新建項目打開UtralEdit,選擇項目-〉新建項目,顯示如下點擊”可選項的WORDFILE文件(W)”項的“瀏覽”按鈕,選擇開發(fā)目錄中的WORDFILE.TXT文件。然后點“關(guān)閉”。配置語法高亮點擊高級ー〉配置,點選到“語法高亮”選項頁,配置語法高亮,“語言”選擇“MESTEP”,“顏色組”選擇“WordList7”,“顏色”選成灰色,“字體樣式”選擇“斜體”,如圖:

配置項目工具點擊高級ー〉配置項目工具,點擊“命令行”項的瀏覽按鈕,選擇到此項目的編譯批處理文件,填寫項目菜單名稱,例如compile,勾選“保存活動文件”、’’輸出到列表方塊”、“采集輸出”幾個選項,然后點“插入”。注意,“確定”按鈕不會講當(dāng)前內(nèi)容插入到項目菜單,必須點擊“插入”,然后點擊“確定”オ會出現(xiàn)菜單選項,如下:然后在高級中就會出現(xiàn)compile選項,點擊運(yùn)行即可編譯。函數(shù)列表按下F8即可看到函數(shù)列表。MES程序基本結(jié)構(gòu)以下在編寫時需要實現(xiàn)的函數(shù)functionmet_plat_init()〃初始化數(shù)據(jù),進(jìn)游戲時只執(zhí)行一次functionmeCplat_paint()〃繪圖函數(shù),每幀執(zhí)行ー次functionmet_plat_dealact()〃應(yīng)用的邏輯處理部分,每幀都會執(zhí)行這個函數(shù)一遍functionmet_plat_dealkeydown()〃按鍵按下的及時處理里面用MET_PLAT_getKeyState做判斷functionmet_plat_dealkeyup?!ò存I抬起來的及時處理里面用MET_PLAT_getKeyUpState做判斷functionmet_plat_dealpendown()〃筆觸點下的及時處理用MET_PLAT_pen_is_in_rect做判斷functionmet_plat_deaipenup() 〃筆觸抬起來的及時處理用MET_PLAT_penup_is_in_rect做判斷functionmet_plat_exit()〃退出應(yīng)用時的響應(yīng),可保存數(shù)據(jù)等處理functionmet__plat_snap()〃被ー些提示中斷時,作出響應(yīng),(調(diào)用functionmet_plat_exit()之前必會調(diào)用這個)functionmet_plat_resume()〃被ー些提示中斷時,回來時的想要,(可以做恢復(fù)聲音播放等操作)functionmet_plat_sms_success()〃發(fā)送短信最后成功的響應(yīng)functionmet_plat_sms_fail()〃發(fā)送短信最后失敗的響應(yīng)平臺在調(diào)用函數(shù)時,會先調(diào)用dealact,然后再調(diào)用paint附錄A平臺函數(shù)見vm_接口說明.ixl附錄BMES函數(shù)函數(shù)說明math.abs(x)絕對值math.acos(x)返回x的arccos值,x為弧度math.asin(x)返回x的arcsin值,x為弧度math.atan(x)返回x的arctan值,x為弧度math.atan2(x,y)返回x/y的arctan值,x、y為弧度,y為〇不報錯math.ceil(x)返回X的整數(shù)部分,等于或大于Xmath.cos(x)返回X的COS值,X為弧度math.deg(x)轉(zhuǎn)換弧度值到角度值math.exp(x)math.floor(x)返回X的整數(shù)部分,小于或等于Xmath.max(x,?■■)返回一系列數(shù)值中的最大值math.min(x,???)返回一系列數(shù)值中的最小值math.mod(x,y)x%ymath.pow(x,y)math.rad(x)轉(zhuǎn)換角度值到弧度值取得m到n之間的隨機(jī)數(shù)。不帶參數(shù)調(diào)用時,返回math.random(m,n)[0,1)之間的浮點數(shù)。帶ー個參數(shù)調(diào)用時,返回[l,m]之間的實數(shù)。帶兩個參數(shù)調(diào)用時,返回[m,n]之間的實數(shù)。math.randomseed(x)將x設(shè)為隨機(jī)種子

math.sin(x)返回x的sin值,math.sin(x)返回x的sin值,x為弧度math.sqrt(x)返回x的平方根math.tan(x)返回x的tan值,x為弧度附錄C字符轉(zhuǎn)換在MES中,由于平臺不支持String類型的文字顯示,所以當(dāng)使用諸如MET_PLAT_draw_string(x,y,stext,r,g,b);這樣的繪制文字的函數(shù)時如果直接寫成MET_PLAT_draw_string(O,Othelloworld"。,0,0);在真機(jī)上會顯示亂碼,必須要在字符串前加u,寫為MET-PLAT-draw.string(0,0,u”henoworld"。,0,0);這樣編譯工具會在編譯時將□''helloworld''轉(zhuǎn)為Unicode形式,以確保文字可以正常顯示。MES8.6.0常用接口說明TOC\o"1-5"\h\z目錄

ー、系統(tǒng)接口 2\o"CurrentDocument"二、常用接口 2\o"CurrentDocument"圖片 2\o"CurrentDocument"繪圖 2繪制文文 3\o"CurrentDocument"按鍵和觸屏 4\o"CurrentDocument"聲音和振動 4發(fā)送豐 4數(shù)學(xué) 6\o"CurrentDocument"三、常用宏定義 8\o"CurrentDocument"按鍵定義: 8\o"CurrentDocument"聲音的格式常量 8\o"CurrentDocument"聲音的格式常常 8\o"CurrentDocument"文件操作宏定義: 9\o"CurrentDocument"四、ー個讀寫記錄的例子 9ー、系統(tǒng)接口以下在編寫時需要實現(xiàn)的接口(就是基本代碼結(jié)構(gòu),按實際需求實現(xiàn))functionmet_plat_init()functionmet_plat_paint()functionmet_plat_dealact()functionmet_plat_dealkeydown(ukey)functionmet_plat_dealkeyup(ukey)functionmet_plat_dealpendown(x,y)functionmet_plat_dealpenmove(x,y)functionmet_plat_dealpenup(x,y)functionmet_plat_exit()functionmet_plat_snap()functionmet_plat_resume()functionmet_plat_sms_success()functionmet_plat_sms_fail()初始化數(shù)據(jù),進(jìn)游戲時只執(zhí)行一次繪圖函數(shù),每幀執(zhí)行一次應(yīng)用的邏輯處理部分,每幀都會執(zhí)行這個函數(shù)一遍按鍵按下的及時處理,里面用MET_PLAT_getKeyState做判斷按鍵抬起來的及時處理,里面用MET_PLAT_getKeyUpState做判斷筆觸點下的及時處理用METPLATpenis_inrect做判斷筆觸滑動時的響應(yīng)筆觸抬起來的及時處理用MET_PLAT_penup_is_in_rect做判斷退出應(yīng)用時的響應(yīng),可保存數(shù)據(jù)等處理被ー些提示中斷時,作出響應(yīng),(調(diào)用functionmetplatexit()之前必會調(diào)用這個)被ー些提示中斷時,回來時的想要,(可以做恢復(fù)聲音播放等操作)發(fā)送短信最后成功的響應(yīng)發(fā)送短信最后失敗的響應(yīng)二、常用接口圖片MET_PLAT_load_image(imglndex)加載圖片MET_PLAT_unload_image(imglndex)釋放圖片MET_PLAT_unload_alllmage()釋放所有圖片填充畫黑色矩形填充rgb色的矩形MET_PLAT_draw_string_frame(x,y,stext,r,g,b,br,bg,bb)MET_PLAT_draw_image(imglndex,x,y)填充畫黑色矩形填充rgb色的矩形MET_PLAT_draw_string_frame(x,y,stext,r,g,b,br,bg,bb)MET_PLAT_draw_image(imglndex,x,y)MET_PLAT_draw_image_part(imglndex,ix,iy,w,h,sx,xy)MET_PLAT_fill_alpha_rect(x1,y1,w,h,rgb,alphalevel)在X,y位置處畫外邊色為brbgbb里色為rgb的外框文字stext(需unicode編碼)把編號為imglndex圖片(由圖片工具生成提供)畫到屏幕的x,y坐標(biāo)處把編號為imglndex圖片的(ix,iy,w,h)區(qū)域,畫到屏幕的sx,sy處。填充透明色的矩形,alphaleve!為1-8(8為不透明繪圖MET_PLAT_fill_rect(x1,y1,x2,y2)MET_PLAT_fill_rect(x1,y1,x2,y2,r,g,b)

無實際意義)〇無實際意義)〇就是不畫畫一?塊圖片,所有顏色做個dr,dg,db的增值畫透明度為alphalevel的圖塊,alphalevel同上MET_PLAT_draw_image_mirror(imglndex,ix,iy,w,h,sx,xy)把編號為

imglndex畫一?塊圖片,所有顏色做個dr,dg,db的增值畫透明度為alphalevel的圖塊,alphalevel同上MET_PLAT_draw_image_mirror(imglndex,ix,iy,w,h,sx,xy)把編號為

imglndex圖片的

(ix,iy,w,h)區(qū)

域,先左右鏡像ー

ド,然后畫到屏幕

的sx,sy(左上角

對齊)處。MET_PLAT_draw_image_rotate180(imglndex>ix,iy,w,h,sx,xy)MET_PLAT_draw_image_rotate90(imglndex,ix,iy,w,h,sx,xy)把編號為imglndex圖片的(ix,iy,w,h)區(qū)域,先旋轉(zhuǎn)180度,然后畫到屏幕的sx,sy(左上角對齊)處。把編號為imglndex圖片的(ix,iy,w,h)區(qū)域,先逆時針旋轉(zhuǎn)90度,然后畫到屏幕的sx,sy(左上角對齊)處。MET_PLAT_draw_image_rotate_negative90(imglndex,ix,iy,w,h,sx,xy)把編號為imglndex圖片的(ix,iy,w,h)區(qū)域,先順時針旋轉(zhuǎn)90度(就是逆時針旋轉(zhuǎn)270度),然后畫到屏幕的sx,sy(左上角對齊)處。把編號把編號為imglndex圖片MET_PLAT_draw_image_scale(imglndex,ix,iy,w,h,sx,xy,sw,sh)繪制文字MET_PLAT_draw_string(x,y,stext,r,g,b)MET_PLAT_get_stringMultiLine(showwidth,stext)MET_PLAT_get_string_wh(wstring)的(繪制文字MET_PLAT_draw_string(x,y,stext,r,g,b)MET_PLAT_get_stringMultiLine(showwidth,stext)MET_PLAT_get_string_wh(wstring)的(ix,iy,w,h)區(qū)域,縮放成(sw,sh)大小后畫到屏幕的(sx,sy,sw,sh)處。在X,y位置處畫rgb顏色的文字stext(需unicode編碼)計量該字符串自動換行畫成showwidth寬度會占幾行,返回值為行數(shù)返回一行字符串到屏幕上所占的寬度和高度,返回值為w,h;在(x,y,sw,sh)區(qū)域里從它的startline開MET_PLAT_draw_stringMultiLine(x,y,sw,sh,startline,stext,r,g,b)始畫stext,自動換行按鍵和觸屏MET_PLAT_getKeyState(key,needclear)MET_PLAT_getKeyllpState(key)MET_PLAT_pen_is_in_rect(x,y,w,h,needc判斷key值按鍵(鍵值見附)是否按下,按下后是否(needclear)清除這個按鍵按下的狀態(tài),返回true/false判斷key值按鍵(鍵值見附)是否剛剛抬起,判斷x,y出w,h寬高區(qū)域里是否有筆點下著,needclear功能同上,返回true/falselear)判斷x,y出w,h寬高區(qū)域里是否有MET_PLAT_penupJSJn_rect(x,y,w,h)筆剛剛拾起,返回true/false聲音和振動OOP)播放聲音,MET_PLAT_play_sound(soundid,soundtype>Playl,加也0孰playloop參見常量定義MET_PLAT_stop_sound()停止聲音播放MET_PLAT_PlayVibratorOnce()震動一下發(fā)送短信MET_PLAT_pay_send_sms(sendDescription,gaineid,cid,fee)發(fā)送短信,短信提示,游戲編號,渠道編號,費用(元)MET_PLAT_pay_send_sms(sendDescription,gameid,cid,fee,typeinfo)發(fā)送短信,短信提示,游戲編號,渠道編號,費用(元),付費類型(普通字符串,比如"payl")(自定義區(qū)分,以便以后統(tǒng)計分析消費情況)記錄和讀取MET_PLAT_fs_open(filename,opentype)MET_PLAT_fs_close(filehandle)MET_PLAT_fs_open(filename,opentype)MET_PLAT_fs_close(filehandle)MET_PLAT_fs_seek(filehandle,seeklen,startPos)MET_PLAT_fs_readS8(filehandle)MET_PLAT_fs_readS16(filehandle)MET_PLAT_fs_readS32(filehandle)MET_PLAT_fs_readString(filehandle)MET_PLAT_fs_writeS8(filehandle,data)MET_PLAT_fs_writeS16(filehandle,data)MET_PLAT_fs_writeS32(filehandle,data)MET_PLAT_fs_writeString(filehandle,str)MET_PLAT_fs_delete(filename)打開(創(chuàng)建)一個文件,以上面幾種方式打開,返回文件打開的句柄,如果是負(fù)數(shù),則打開失敗關(guān)閉ー個文件(句柄)(打開成功后一定要記得關(guān)閉),返回負(fù)數(shù)為失敗讓指針從startpos(3種位置METPLAT一FS一FILE一BEGIN,MET_PLAT_FS_FILE_CURRENT,METPLAT_FSFILEEND)開始略過seeklen長度的字節(jié),,返回實際略過的字節(jié)數(shù)讀取一個字節(jié)(有符號數(shù)據(jù)),返回2個參數(shù),第一個返回如負(fù)數(shù)為失敗,第二個為真正的返回值讀取2個字節(jié)(short),返回2個參數(shù),第一個返回如負(fù)數(shù)為失敗,第二個為真正的返回讀取4個字節(jié)(int),返回2個參數(shù),第一個返回如負(fù)數(shù)為失敗,第二個為真正的返回讀取ー個字符串,返回2個參數(shù),第一個返回如負(fù)數(shù)為失敗,第二個為真正的返回寫入一個字節(jié)(有符號的),返回值如負(fù)數(shù)為失敗寫入2個字節(jié)(有符號的),返回值如負(fù)數(shù)為失敗寫入4個字節(jié)(有符號的),返回值如負(fù)數(shù)為失敗寫入一個字符串,返回值如負(fù)數(shù)為失敗刪除ー個文件,返回值如負(fù)數(shù)為失

MET_PLAT_fs_readllnicodeString(filehandle)MET_PLAT_fs_writeUnicodeString(filehandle.str)讀取ー個Unicode編碼(漢字)字符串,讀取ー個Unicode編碼(漢字)字符串,返回2個參數(shù),第一個返回如負(fù)數(shù)為失敗,第二個為真正的返回寫入ー?個Unicode編碼(漢字)字符串,返回值如負(fù)數(shù)為失敗MET_PLAT_mod(denominator,numerator)math.abs(x)math.acos(x)math.asin(x)math.atan(x)math.atan2(x,y)math.ceil(x)math.cos(x)math.deg(x)math.exp(x)math.floor(x)求denominator對numerator的模,返回結(jié)果絕對值返回x的arccos值,x為弧度返回x的arcsin值,x為弧度返回x的arctan值,x為弧度返回x/y的arctan值,x、y為弧度,y為〇不報錯返回x的整數(shù)部分,等于或大于x返回x的cos值,x為弧度轉(zhuǎn)換弧度值到角度值返回X的整數(shù)部分,小于或等于Xmath.max(x,,,?)返回一系列數(shù)值中的最大值math.min(x,…)返回一系列數(shù)值中的最小值math.mod(x,y)x%ymath.pow(x,y)y7math.rad(x)轉(zhuǎn)換角度值到弧度值取得m到n之間的隨機(jī)數(shù)。不帶參數(shù)調(diào)用時,返回01)之間的浮點數(shù)。math.random(m,n)帶ー個參數(shù)調(diào)用時,返回[l,m]之間的實數(shù)。帶兩個參數(shù)調(diào)用時,返回[m,n]之間的實數(shù)。math.randomseed(x)將X設(shè)為隨機(jī)種子math.sin(x)返回x的sin值,x為弧度math.sqrt(x)返回X的平方根math.tan(x)返回x的tan值,x為弧度系統(tǒng)及其他MET_PLAT_get_free_mem()返回空余內(nèi)存,對真機(jī)オ有意義。MET_PLAT_get_time_ms()返回系統(tǒng)時刻單位msMET_PLAT_exit_app()退出程序MET_PLAT_trace(string)打印輸出信息MET一PLAT一change一app(appnam切換到另,個appname,(注意會退出當(dāng)前應(yīng)用)

e)MET_PLAT_del_app(appname)MET_PLAT_del_nousedata()刪除名字為appname的應(yīng)用及其數(shù)據(jù)文件(沒有.met),返回成功與否.清除應(yīng)用已經(jīng)不存在的應(yīng)用數(shù)據(jù)文件夾。y)e)MET_PLAT_del_app(appname)MET_PLAT_del_nousedata()刪除名字為appname的應(yīng)用及其數(shù)據(jù)文件(沒有.met),返回成

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論