本發(fā)明涉及一種遠(yuǎn)程游戲編程系統(tǒng),屬于計(jì)算機(jī)領(lǐng)域。
背景技術(shù):
隨著信息技術(shù)的發(fā)展,編程逐漸成為一項(xiàng)基本技能。美國(guó)、英國(guó)、新加坡等多個(gè)國(guó)家都在鼓勵(lì)青少年學(xué)習(xí)編程,甚至將編程作為中小學(xué)生的必修科目。我國(guó)部分省份也在積極推進(jìn)編程教育。
青少年編程教育中存在一些問(wèn)題:傳統(tǒng)的工業(yè)化的編程工具(Java, C等編程語(yǔ)言),對(duì)于中小學(xué)生來(lái)說(shuō)較為枯燥,學(xué)習(xí)初期難以做出有實(shí)際用途的成果,且難度較大,學(xué)習(xí)起來(lái)較為吃力;專門(mén)為青少年設(shè)計(jì)的編程工具(Scratch, Lego等編程語(yǔ)言)容易學(xué)習(xí),但是這些工具的功能有限,深入學(xué)習(xí)時(shí)會(huì)有各種語(yǔ)言層面上的限制,在后期學(xué)習(xí)過(guò)程中往傳統(tǒng)的工業(yè)化編程語(yǔ)言過(guò)渡時(shí)仍然存在較大困難。
為此,社會(huì)上的軟件公司提供了很多用于訓(xùn)練編程人員能力的系統(tǒng),這些系統(tǒng)的的主流的做法是提供一個(gè)界面,通過(guò)輸入編程目的提供對(duì)應(yīng)的成熟的代碼組,待培訓(xùn)人員組合這些代碼組以完成訓(xùn)練,但是這樣的訓(xùn)練內(nèi)容枯燥,重復(fù)率高,會(huì)對(duì)使用者的精神造成傷害,不利于培訓(xùn)的效率提高。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述問(wèn)題,本發(fā)明提供一種遠(yuǎn)程游戲編程系統(tǒng)。
本發(fā)明采用的技術(shù)方案一方面為一種遠(yuǎn)程游戲編程系統(tǒng),包括:基于web技術(shù)的編程端、游戲服務(wù)器和游戲客戶端;編程端包括瀏覽器單元、編程資料單元和服務(wù)器接口單元;所述瀏覽器單元提供圖形化的接口以獲取用戶對(duì)編程資料單元的訪問(wèn)操作,所述服務(wù)器接口單元記錄訪問(wèn)操作并發(fā)送至游戲服務(wù)器,標(biāo)記該記錄為編程信息;所述游戲服務(wù)器接收編程信息,基于編程信息修改對(duì)應(yīng)接口以變更游戲數(shù)據(jù),將變更的游戲數(shù)據(jù)發(fā)送至游戲客戶端并調(diào)用對(duì)應(yīng)接口以修改游戲數(shù)據(jù)。
優(yōu)選地,所述瀏覽器單元還用于提供代碼編輯器、編輯教程和示例資料,通過(guò)代碼編輯器獲取用戶的信息輸入,標(biāo)記該信息為編程信息。
優(yōu)選地,所述游戲服務(wù)器還基于沙箱驗(yàn)證修改的游戲數(shù)據(jù):通過(guò)沙箱調(diào)用編譯器或解釋器,將編程信息導(dǎo)入并運(yùn)行,運(yùn)行正常則基于編程信息修改對(duì)應(yīng)接口以變更游戲數(shù)據(jù)。
優(yōu)選地,所述編程端還用于基于用戶名和密碼驗(yàn)證用戶的使用權(quán)。
優(yōu)選地,所述游戲客戶端包括若干游戲單元,所述游戲單元用于存儲(chǔ)游戲資料。
本發(fā)明的有益效果為提供遠(yuǎn)程的編輯端,接收客戶進(jìn)行遠(yuǎn)程編程的操作,通過(guò)用戶的操作輸出更改游戲的代碼以更改游戲的內(nèi)容,能夠提高用戶對(duì)編程訓(xùn)練系統(tǒng)的舒適性,提高編程效率。
附圖說(shuō)明
圖1所示為基于本發(fā)明實(shí)施例的一種遠(yuǎn)程游戲編程系統(tǒng)示意圖
圖2所示為基于本發(fā)明實(shí)施例的結(jié)合網(wǎng)絡(luò)游戲與編程的系統(tǒng)運(yùn)行示意圖。
具體實(shí)施方式
以下結(jié)合實(shí)施例對(duì)本發(fā)明進(jìn)行說(shuō)明。
基于發(fā)明的實(shí)施例,如圖1所示一種遠(yuǎn)程游戲編程系統(tǒng),包括:基于web技術(shù)的編程端、游戲服務(wù)器和游戲客戶端;編程端包括瀏覽器單元、編程資料單元和服務(wù)器接口單元;所述瀏覽器單元提供圖形化的接口以獲取用戶對(duì)編程資料單元的訪問(wèn)操作,所述服務(wù)器接口單元記錄訪問(wèn)操作并發(fā)送至游戲服務(wù)器,標(biāo)記該記錄為編程信息;所述游戲服務(wù)器接收編程信息,基于編程信息修改對(duì)應(yīng)接口以變更游戲數(shù)據(jù),將變更的游戲數(shù)據(jù)發(fā)送至游戲客戶端并調(diào)用對(duì)應(yīng)接口以修改游戲數(shù)據(jù)。
編程端,主要是通過(guò)瀏覽器作為編程的環(huán)境,提供圖形化的編程接口以連接成熟的模塊化的代碼組(存儲(chǔ)于編程資料單元)或者輸入框以獲取外界的代碼輸入,編程資料單元用于存儲(chǔ)并輸出預(yù)設(shè)的模塊化的代碼,服務(wù)器接口單元用于記錄用戶的操作(例如選擇了什么樣的代碼組、代碼的順序和對(duì)圖形化接口的操作等)然后將用戶的操作轉(zhuǎn)換成對(duì)應(yīng)的指令并傳輸至游戲服務(wù)器;游戲服務(wù)器為存儲(chǔ)若干游戲的服務(wù)器,能提供一個(gè)網(wǎng)絡(luò)平臺(tái)以實(shí)現(xiàn)游戲的網(wǎng)絡(luò)化,游戲服務(wù)器接收編程信息之后,對(duì)編程信息的代碼進(jìn)行預(yù)處理以生成修改游戲數(shù)據(jù)的各種指令和信息,并根據(jù)輸出信息的用戶的屬性(帳號(hào))將代碼提交到游戲客戶端執(zhí)行。
所述瀏覽器單元還用于提供代碼編輯器、編輯教程和示例資料,通過(guò)代碼編輯器獲取用戶的信息輸入,標(biāo)記該信息為編程信息。
代碼編輯器為常用的編程輔助工具,可以直接采用公開(kāi)的軟件,通過(guò)代碼編輯器獲取用戶的代碼輸入信息。
瀏覽器單元還包括用于協(xié)調(diào)編程代碼與游戲服務(wù)器的接口單元,使用多種編程語(yǔ)言實(shí)現(xiàn)與游戲服務(wù)器通信的接口,即可實(shí)現(xiàn)該游戲?qū)Χ喾N編程語(yǔ)言的支持。例如Scratch和Python,在服務(wù)器接口單元中實(shí)現(xiàn)Scratch代碼與游戲服務(wù)器的接口,即可支持Scratch,實(shí)現(xiàn)Python代碼與游戲服務(wù)器通信的接口,即可支持Python。
所述游戲服務(wù)器還基于沙箱驗(yàn)證修改的游戲數(shù)據(jù):通過(guò)沙箱調(diào)用編譯器或解釋器,將編程信息導(dǎo)入并運(yùn)行,運(yùn)行正常則基于編程信息修改對(duì)應(yīng)接口以變更游戲數(shù)據(jù)。
沙箱中調(diào)用所選編程語(yǔ)言的編譯器或者解釋器,對(duì)代碼進(jìn)行分析并執(zhí)行,同時(shí)使用守護(hù)進(jìn)程對(duì)代碼運(yùn)行進(jìn)程的狀態(tài)進(jìn)行監(jiān)控,并且對(duì)代碼中所調(diào)用的接口進(jìn)行相應(yīng)的權(quán)限檢查,從而避免用戶提交惡意代碼破壞系統(tǒng)穩(wěn)定性。
所述編程端還用于基于用戶名和密碼驗(yàn)證用戶的使用權(quán)。
所述游戲客戶端包括若干游戲單元,所述游戲單元用于存儲(chǔ)游戲資料。
編程語(yǔ)言種類繁多,同時(shí)不同的游戲,其所以來(lái)的編程語(yǔ)言的類型區(qū)別較大,因此不同的編程語(yǔ)言,設(shè)置與其對(duì)應(yīng)的游戲,可以提高兩者的匹配,以提高用戶的使用舒適度。
基于本發(fā)明的實(shí)施例,如圖2所示結(jié)合網(wǎng)絡(luò)游戲與編程的系統(tǒng)運(yùn)行示意圖。
用于通過(guò)編程與游戲相結(jié)合以提高用戶的編程學(xué)習(xí)熱情,包括以下幾部分:
瀏覽器端,為學(xué)生提供在線編程環(huán)境,學(xué)生可以在瀏覽器上實(shí)現(xiàn)代碼的編寫(xiě)或使用圖形化編程軟件進(jìn)行編程;
Web服務(wù)端,為學(xué)生提供編程相關(guān)的Web服務(wù),實(shí)現(xiàn)程序的保存、編輯等功能;
程序執(zhí)行服務(wù)端,用于執(zhí)行學(xué)生提交的程序代碼,并與網(wǎng)絡(luò)游戲服務(wù)端進(jìn)行數(shù)據(jù)交互,調(diào)用相關(guān)接口,修改網(wǎng)絡(luò)游戲數(shù)據(jù);
網(wǎng)絡(luò)游戲服務(wù)端,作為網(wǎng)絡(luò)游戲的數(shù)據(jù)中心,通過(guò)自定義插件、地圖等,實(shí)現(xiàn)修改游戲數(shù)據(jù)的相關(guān)接口,為程序執(zhí)行服務(wù)端提供服務(wù);
網(wǎng)絡(luò)游戲客戶端,即學(xué)生所玩的網(wǎng)絡(luò)游戲,同時(shí)可將學(xué)生通過(guò)在線編程實(shí)現(xiàn)的對(duì)游戲的修改即時(shí)展現(xiàn)出來(lái)。
瀏覽器端(編程端的功能結(jié)構(gòu)中,關(guān)于編程的模塊)使用Python語(yǔ)言進(jìn)行編程,
用戶可以在編輯器中編輯代碼,點(diǎn)擊“執(zhí)行代碼”將代碼提交到服務(wù)器端執(zhí)行,程序執(zhí)行結(jié)果或者錯(cuò)誤信息會(huì)返回給用戶。用戶調(diào)試完成之后,點(diǎn)擊上傳代碼,可以將代碼保存到Web服務(wù)器。
用戶保存到Web服務(wù)器的代碼,可以重復(fù)查看、執(zhí)行、編輯。用戶保存的代碼被稱為“編程卡片”,用于在游戲中實(shí)現(xiàn)對(duì)應(yīng)的功能。
Web服務(wù)端(編程端的功能結(jié)構(gòu)的一部分,用于基于web技術(shù)與服務(wù)器交互)可用任意適合Web開(kāi)發(fā)的語(yǔ)言完成,本實(shí)施例中采用PHP開(kāi)發(fā)完成,數(shù)據(jù)庫(kù)采用MySQL。Web服務(wù)端需要實(shí)現(xiàn)一般網(wǎng)站系統(tǒng)都具有的登錄、注冊(cè)、信息維護(hù)、數(shù)據(jù)保存等功能,還需要實(shí)現(xiàn)在線編程相關(guān)功能:
用戶觀看編程教程;用戶編程作品的保存、編輯、查看、刪除;用戶進(jìn)行程序的運(yùn)行、調(diào)試;將用戶提交的代碼進(jìn)行預(yù)處理并添加用戶識(shí)別信息后提交到程序執(zhí)行服務(wù)端;
程序執(zhí)行服務(wù)端(游戲服務(wù)器內(nèi)用于處理編程信息的模塊)需要將用戶提交的代碼安全地執(zhí)行。本實(shí)施例采用沙箱和Linux Container技術(shù)實(shí)現(xiàn),其中沙箱采用NodeJS編程實(shí)現(xiàn),Linux Container使用Docker技術(shù)實(shí)現(xiàn)。具體實(shí)現(xiàn)方式為:接收到Web服務(wù)端提交過(guò)來(lái)的代碼之后,將代碼保存為臨時(shí)文件,并暴露給docker容器,然后設(shè)定docker容器運(yùn)行的CPU、內(nèi)存及運(yùn)行時(shí)間限制。然后啟動(dòng)docker容器,以受限用戶執(zhí)行代碼。docker容器中需要預(yù)先安裝代碼運(yùn)行環(huán)境,以及與網(wǎng)絡(luò)游戲服務(wù)端(游戲服務(wù)器關(guān)于游戲的模塊)通信的模塊。該通信模塊會(huì)建立與網(wǎng)絡(luò)游戲服務(wù)端通信套接字,用戶調(diào)用網(wǎng)絡(luò)游戲相關(guān)API。在程序運(yùn)行結(jié)束之后,清理臨時(shí)運(yùn)行環(huán)境,并將運(yùn)行結(jié)果返回到Web服務(wù)端。
網(wǎng)絡(luò)游戲服務(wù)端需要根據(jù)不同網(wǎng)絡(luò)游戲而具體實(shí)現(xiàn)。
以上所述,只是本發(fā)明的較佳實(shí)施例而已,本發(fā)明并不局限于上述實(shí)施方式,只要其以相同的手段達(dá)到本發(fā)明的技術(shù)效果,都應(yīng)屬于本發(fā)明的保護(hù)范圍。在本發(fā)明的保護(hù)范圍內(nèi)其技術(shù)方案和/或?qū)嵤┓绞娇梢杂懈鞣N不同的修改和變化。