一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS云開發(fā):舒爾特方格游戲

OpenHarmony技術(shù)社區(qū) ? 來(lái)源:OpenHarmony技術(shù)社區(qū) ? 2023-06-19 15:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

舒爾特方格游戲-關(guān)系型數(shù)據(jù)庫(kù)版本,請(qǐng)移步到上一篇帖子查看,本篇帖子內(nèi)容還是舒爾特方格游戲,只是換了后宮_云數(shù)據(jù)庫(kù)。

此項(xiàng)目是用最新版 DevEco Studio 3.1 Release 并創(chuàng)建端云一體開發(fā),由于目前此版本不支持直接調(diào)用云數(shù)據(jù)庫(kù),不過可以通過云函數(shù)調(diào)用云數(shù)據(jù)庫(kù)。

也就是在服務(wù)卡片業(yè)務(wù)邏輯里通過調(diào)用云函數(shù)來(lái)完成游戲數(shù)據(jù)保存到云數(shù)據(jù)庫(kù),開發(fā)工具支持本地函數(shù)調(diào)用測(cè)試,大大方便了開發(fā)。

此貼重點(diǎn)講解云函數(shù)和云數(shù)據(jù)庫(kù)開發(fā),本地和遠(yuǎn)端調(diào)用,從而進(jìn)一步學(xué)習(xí) Serverless 知識(shí)。

舒爾特方格游戲效果圖如下:92a74280-0da6-11ee-962d-dac502259ad0.gif ?

知識(shí)點(diǎn)

為豐富 HarmonyOS 對(duì)云端開發(fā)的支持、實(shí)現(xiàn) HarmonyOS 生態(tài)端云聯(lián)動(dòng),DevEco Studio 推出了云開發(fā)功能,開發(fā)者在創(chuàng)建工程時(shí)選擇云開發(fā)模板。

即可在 DevEco Studio 內(nèi)同時(shí)完成 HarmonyOS 應(yīng)用/服務(wù)的端側(cè)與云側(cè)開發(fā),體驗(yàn)端云一體化協(xié)同開發(fā)。

相比于傳統(tǒng)開發(fā)模式,云開發(fā)模式具備成本低、效率高、門檻低等優(yōu)勢(shì),具體區(qū)別見下表。92c0bf30-0da6-11ee-962d-dac502259ad0.png

①開發(fā)流程

HarmonyOS 應(yīng)用端云一體化開發(fā)流程如下圖所示:

92ca6ecc-0da6-11ee-962d-dac502259ad0.jpg

②創(chuàng)建端云一體化開發(fā)工程

新建原子化服務(wù)工程:
https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/agc-harmonyos-clouddev-createproject-0000001443369760-V3#section15198822192610
工程初始化配置:
https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/agc-harmonyos-clouddev-createproject-0000001443369760-V3#section1938317533494
端云一體化開發(fā)工程介紹:
https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/agc-harmonyos-clouddev-createproject-0000001443369760-V3#section20250910164411

③開發(fā)云工程

開發(fā)云函數(shù):
https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/agc-harmonyos-clouddev-cloudfunctions-0000001493089797-V3
開發(fā)云數(shù)據(jù)庫(kù):
https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/agc-harmonyos-clouddev-clouddb-0000001443049860-V3

④部署云工程

部署云工程:
https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/agc-harmonyos-clouddev-deploy-0000001493209765-V3

小結(jié):了解這些端云一體化開發(fā)知識(shí)點(diǎn)后,下面圍繞舒爾特方格游戲,在云數(shù)據(jù)庫(kù)里設(shè)計(jì)卡片表結(jié)構(gòu)和成績(jī)表結(jié)構(gòu),然后再編寫相關(guān)云函數(shù),并在本地測(cè)試通過后,再測(cè)試遠(yuǎn)程,最后在元服務(wù)業(yè)務(wù)邏輯調(diào)用云函數(shù)。

云數(shù)據(jù)庫(kù)開發(fā)講解

①objecttype 創(chuàng)建

展開 CloudProgram→clouddb→objecttype 右擊 objecttype 目錄,創(chuàng)建→Cloud DB Object Type 輸入 Object Type Name 為 t_form,點(diǎn)擊確認(rèn)。

修改內(nèi)容如下:
{
"fields":[
{
"isNeedEncrypt":false,
"fieldName":"formId",
"notNull":true,
"belongPrimaryKey":true,
"fieldType":"String"
},
{
"isNeedEncrypt":false,
"fieldName":"formName",
"notNull":true,
"defaultValue":"",
"belongPrimaryKey":false,
"fieldType":"String"
},
{
"isNeedEncrypt":false,
"fieldName":"dimension",
"notNull":true,
"defaultValue":"0",
"belongPrimaryKey":false,
"fieldType":"Integer"
}
],
"indexes":[
{
"indexName":"formId",
"indexList":[{"fieldName":"formId","sortType":"ASC"}]
}
],
"objectTypeName":"t_form",
"permissions":[...]
}

展開 CloudProgram→clouddb→objecttype 右擊 objecttype 目錄,創(chuàng)建→Cloud DB Object Type 輸入 Object Type Name 為 t_score,點(diǎn)擊確認(rèn)。

修改內(nèi)容如下:
{
"fields":[
{
"isNeedEncrypt":false,
"fieldName":"formId",
"notNull":true,
"belongPrimaryKey":true,
"fieldType":"String"
},
{
"isNeedEncrypt":false,
"fieldName":"matrixNum",
"notNull":true,
"defaultValue":"",
"belongPrimaryKey":false,
"fieldType":"String"
},
{
"isNeedEncrypt":false,
"fieldName":"bestScore",
"notNull":true,
"defaultValue":"0",
"belongPrimaryKey":false,
"fieldType":"Double"
}
],
"indexes":[
{
"indexName":"formId",
"indexList":[{"fieldName":"formId","sortType":"ASC"}]
}
],
"objectTypeName":"t_score",
"permissions":[...]
}

②dataentry 創(chuàng)建

展開 CloudProgram→clouddb→dataentry 右擊 dataentry 目錄,創(chuàng)建→Cloud DB Data Entry 這里先選擇上面創(chuàng)建的 Object Type 為 t_form,再輸入 Data Entry Name 為 form_data,點(diǎn)擊確認(rèn)。

修改內(nèi)容如下:

{
"cloudDBZoneName":"widgetCard",
"objectTypeName":"t_form",
"objects":[
{
"formId":"x000001",
"formName":"卡片1",
"dimension":2
}
]
}
展開 CloudProgram→clouddb→dataentry 右擊 dataentry 目錄,創(chuàng)建→Cloud DB Data Entry 這里先選擇上面創(chuàng)建的 Object Type為t_score,再輸入 Data Entry Name 為 score_data,點(diǎn)擊確認(rèn)。

修改內(nèi)容如下:

{
"cloudDBZoneName":"widgetCard",
"objectTypeName":"t_score",
"objects":[
{
"formId":"x000001",
"matrixNum":"3x3",
"bestScore":2.234
}
]
}
小結(jié):其實(shí) dataentry 文件可以不創(chuàng)建,這里對(duì)兩個(gè)表都初始化了一條數(shù)據(jù),是方便下面的調(diào)用使用,云數(shù)據(jù)庫(kù)就是定義好表結(jié)構(gòu)、權(quán)限配置就可以,數(shù)據(jù)的添加、修改、刪除、查詢都可以通過云函數(shù)來(lái)完成。

云函數(shù)開發(fā)講解

①卡片云函數(shù)創(chuàng)建

展開 CloudProgram→cloudfunctions 右擊 cloudfunctions 目錄,創(chuàng)建→Cloud Function 輸入 Cloud Function Name 為 form-func,點(diǎn)擊確認(rèn)。

卡片云函數(shù)里包含了增刪改查操作,所以在 form-func 下,創(chuàng)建不同的文件夾來(lái)區(qū)分,目錄結(jié)構(gòu)如下:

92d57470-0da6-11ee-962d-dac502259ad0.png首先說一下與云數(shù)據(jù)庫(kù)交互文件,t_form.js 對(duì)應(yīng)的是云數(shù)據(jù)庫(kù)實(shí)體類,如各屬性的 get 和 set 方法,之前 FA 模式下的 DevEco Studio 端云一體化開發(fā),支持直接調(diào)用云數(shù)據(jù)庫(kù)。現(xiàn)在 Stage 模式下的 DevEco Studio 端云一體化開發(fā),還不支持直接調(diào)用云數(shù)據(jù)庫(kù),通過云函數(shù)來(lái)調(diào)用。所以這里的云數(shù)據(jù)庫(kù)實(shí)體類,除了屬性的 get 和 set 方法外,還要手工添加一些方法。

如卡片實(shí)例體類:

classt_form{
getFieldTypeMap(){
letfieldTypeMap=newMap();
fieldTypeMap.set('formId','String');
fieldTypeMap.set('formName','String');
fieldTypeMap.set('dimension','Integer');
returnfieldTypeMap;
}

getClassName(){
return't_form';
}

getPrimaryKeyList(){
letprimaryKeyList=[];
primaryKeyList.push('formId');
returnprimaryKeyList;
}

getIndexList(){
letindexList=[];
returnindexList;
}

getEncryptedFieldList(){
letencryptedFieldList=[];
returnencryptedFieldList;
}

//setandget
setFormId(formId){this.formId=formId;}
getFormId(){returnthis.formId;}
setFormName(formName){this.formName=formName;}
getFormName(){returnthis.formName;}
setDimension(dimension){this.dimension=dimension;}
getDimension(){returnthis.dimension;}
}

module.exports={t_form}

CloudDBZoneWrapper 操作云數(shù)據(jù)庫(kù),這里主要列舉構(gòu)造函數(shù)和增加方法內(nèi)容:

import*asclouddbfrom'@agconnect/database-server';
import{t_formasFormBean}from'./models/t_form';
import*asagconnectfrom'@agconnect/common-server';

constZONE_NAME="widgetCard";

exportclassCloudDBZoneWrapper{
logger;
cloudDbZone;

constructor(credential,logger){
this.logger=logger;
try{
//初始化AGCClient
letagcClient;
try{
agcClient=agconnect.AGCClient.getInstance();
}catch{
agconnect.AGCClient.initialize(credential);
agcClient=agconnect.AGCClient.getInstance();
}
//初始化AGConnectCloudDB實(shí)例
letcloudDbInstance;
try{
cloudDbInstance=clouddb.AGConnectCloudDB.getInstance(agcClient);
}catch{
clouddb.AGConnectCloudDB.initialize(agcClient);
cloudDbInstance=clouddb.AGConnectCloudDB.getInstance(agcClient);
}
//創(chuàng)建CloudDBZoneConfig配置對(duì)象,并設(shè)置云側(cè)CloudDBzone名稱,打開CloudDBzone實(shí)例
constcloudDBZoneConfig=newclouddb.CloudDBZoneConfig(ZONE_NAME);
this.cloudDbZone=cloudDbInstance.openCloudDBZone(cloudDBZoneConfig);
}catch(err){
logger.error("xx[form-func]CloudDBZoneWrapperinitCloudDBZoneWrappererror:"+err);
}
}

asyncinsert(addForm){
if(!this.cloudDbZone){
this.logger.error("xx[form-func]CloudDBZoneWrapper->insertCloudDBClientisnull,tryre-initializeit");
}

try{
letres=awaitthis.cloudDbZone.executeUpsert(addForm);
this.logger.info("xx[form-func]CloudDBZoneWrapper->insertInsert"+res+"recordssuccess");
}catch(error){
this.logger.error("xx[form-func]CloudDBZoneWrapper->insertexecuteInsertaddressRecordsfailed"+error);
}
}
}

新增卡片函數(shù) form-insert,關(guān)鍵代碼如下:

import{CloudDBZoneWrapper}from'../clouddb/CloudDBZoneWrapper.js';
import*asUtilsfrom'../utils/Utils.js';

exportconstmyHandler=asyncfunction(event,context,callback,logger){
constcredential=Utils.getCredential(context,logger);
try{
constcloudDBZoneWrapper=newCloudDBZoneWrapper(credential,logger);
letformObj=cloudDBZoneWrapper.getForm(event);
awaitcloudDBZoneWrapper.insert(formObj);

callback({
ret:{code:0,desc:"SUCCESS"},
});
}catch(err){
logger.error("xx[form-func]insertfuncerror:"+err.message+"stack:"+err.stack);
callback({
ret:{code:-1,desc:"ERROR"},
});
}
};

卡片云函數(shù)主入口,關(guān)鍵代碼如下:

letmyHandler=asyncfunction(event,context,callback,logger){
letoperation;
letparams;

logger.info("xxenterformfuncwithoperation"+event.operation);
operation=event.body?JSON.parse(event.body).operation:event.operation;
params=event.body?JSON.parse(event.body).params:event.params;

switch(operation){
case"query":
query.myHandler(params,context,callback,logger);
break;
case"queryById":
queryById.myHandler(params,context,callback,logger);
break;
case"insert":
insert.myHandler(params,context,callback,logger);
break;
case"update":
update.myHandler(params,context,callback,logger);
break;
case"delete":
deleteByObj.myHandler(params,context,callback,logger);
break;
default:
callback({
ret:{code:-1,desc:"nosuchfunction"},
});
}

};
module.exports.myHandler=myHandler;

②成績(jī)?cè)坪瘮?shù)創(chuàng)建

展開 CloudProgram→cloudfunctions 右擊 cloudfunctions 目錄,創(chuàng)建→Cloud Function 輸入 Cloud Function Name 為 score-func,點(diǎn)擊確認(rèn),。成績(jī)?cè)坪瘮?shù)里包含了增刪改查操作,所以在 score-func 下,創(chuàng)建不同的文件夾來(lái)區(qū)分。

目錄結(jié)構(gòu)如下:

92e34546-0da6-11ee-962d-dac502259ad0.png成績(jī)表云數(shù)據(jù)庫(kù)操作與卡片操作一樣,這里就不在重復(fù)了,可以參考一下上面卡片操作方法就可以。

云函數(shù)本地與遠(yuǎn)程調(diào)試

①Run 模式啟動(dòng)調(diào)試

右擊“cloudfunctions”目錄,選擇“Run Cloud Functions”。查看“Run”面板。如果出現(xiàn)“Cloud Functions loaded successfully”,表示所有函數(shù)已成功加載到本地運(yùn)行的 HTTP Server 中,并生成對(duì)應(yīng)的 POST URL。在菜單欄選擇“Tools > CloudDev > Cloud Functions Requestor”,使用 Cloud Functions Requestor 觸發(fā)函數(shù)調(diào)用。在彈出的“Cloud Functions Requestor”面板,填寫觸發(fā)事件參數(shù)。點(diǎn)擊“Save”,可保存當(dāng)前觸發(fā)事件。

②Debug 模式啟動(dòng)調(diào)試

右擊“cloudfunctions”目錄,選擇“Run Cloud Functions”。查看 Console 面板。如果出現(xiàn)“Cloud Functions loaded successfully”,表示函數(shù)成功加載到本地運(yùn)行的 HTTP Server 中,并生成對(duì)應(yīng)的 POST URL。如需設(shè)置斷點(diǎn)調(diào)試,在函數(shù)代碼中選定要設(shè)置斷點(diǎn)的有效代碼行,在行號(hào)后單擊鼠標(biāo)左鍵設(shè)置斷點(diǎn),設(shè)置斷點(diǎn)后,調(diào)試能夠在斷點(diǎn)處中斷,并高亮顯示該行。在菜單欄選擇“Tools > CloudDev > Cloud Functions Requestor”,使用 Cloud Functions Requestor 觸發(fā)函數(shù)調(diào)用。在彈出的“Cloud Functions Requestor”面板,填寫觸發(fā)事件參數(shù)。點(diǎn)擊“Save”,可保存當(dāng)前觸發(fā)事件。

③自定義 Run/Debug 配置

在菜單欄選擇“Run > Edit Configurations”。在“Run/Debug Configurations”窗口,點(diǎn)擊+,選擇“Cloud Functions”,新增一個(gè) Run/Debug 配置。

自定義 Run/Debug 配置,完成后點(diǎn)擊“OK”。

· Name:Run/Debug配置的名稱,如“functions-custom1”。
· Server Port:HTTP服務(wù)端監(jiān)聽端口。默認(rèn)為“18090”,自定義端口號(hào)建議大于1024。勾選“Autoincrement”表示如當(dāng)前端口被占用則端口號(hào)自動(dòng)加“1”。
· Environment variables:函數(shù)運(yùn)行的環(huán)境變量,為key-value形式。
點(diǎn)擊“Edit environment variables”按鈕,在“Environment Variables”彈窗中點(diǎn)擊“+”添加一個(gè)環(huán)境變量,然后點(diǎn)擊“OK”。添加成功后,您便可以將變量配置信息傳入到函數(shù)執(zhí)行環(huán)境中,用于函數(shù)運(yùn)行時(shí)讀取。
選擇剛剛自定義的 Run/Debug 配置,分別點(diǎn)擊 Run 或 Debug。后續(xù)調(diào)試步驟與默認(rèn)配置下的調(diào)試步驟一致,請(qǐng)分別參見Run 模式啟動(dòng)調(diào)試Debug 模式啟動(dòng)調(diào)試。

④測(cè)試

實(shí)現(xiàn)云函數(shù)調(diào)用云數(shù)據(jù)庫(kù),需要您先部署云工程,云端才會(huì)有相關(guān)數(shù)據(jù)及環(huán)境變量。同時(shí),云函數(shù)為訪問云數(shù)據(jù)庫(kù)使用了“PROJECT_CREDENTIAL”環(huán)境變量,部署函數(shù)到 AGC 云端時(shí),云端會(huì)自動(dòng)配置好“PROJECT_CREDENTIAL”以運(yùn)行環(huán)境變量。但在本地調(diào)試函數(shù)時(shí),需要您手動(dòng)將“PROJECT_CREDENTIAL”環(huán)境變量添加到 Run/Debug 配置中。

否則,函數(shù)調(diào)試代碼執(zhí)行會(huì)因獲取不到“PROJECT_CREDENTIAL”環(huán)境變量而中斷。

92ec2d1e-0da6-11ee-962d-dac502259ad0.png

從 AGC 獲取的“PROJECT_CREDENTIAL”環(huán)境變量添加到調(diào)試配置中。您也可以添加您需要的其他環(huán)境變量。

92fcb45e-0da6-11ee-962d-dac502259ad0.png

9306e578-0da6-11ee-962d-dac502259ad0.png

添加完環(huán)境變量后,啟動(dòng)函數(shù),再點(diǎn)擊 Trigger,就可以看到成功返回?cái)?shù)據(jù)了。

9312f3fe-0da6-11ee-962d-dac502259ad0.png

代碼講解

①云函數(shù)調(diào)用公共類

DatabaseUtils.ets 云函數(shù)操作類部分代碼如下:

exportclassDatabaseUtils{

asynccallWithParams(context,trigger,operation,params){
awaitgetAGConnect(context);
letbody={
"operation":operation,
"params":params
}

try{
letfunctionCallable=agconnect.function().wrap(trigger);
letfunctionResult=awaitfunctionCallable.call(body);
returnfunctionResult.getValue();
//returnfunctionResult.getValue().result;
}
catch(err){
return{
"ret":{"code":-1,"desc":"ERROR"}
}
}
}

asyncinvoke(context:any,trigger?:string,operation?:string,params?:object){
console.info(CommonConstants.DATABASE_TAG,'xxinvokeparams:'+JSON.stringify(params))
returnawaitthis.callWithParams(context,trigger,operation,params);
}

/**
*插入卡片數(shù)據(jù)。
*
*@param{Form}Form表單實(shí)體。
*@param{DataRdb.RdbStore}RDB存儲(chǔ)RDB數(shù)據(jù)庫(kù)。
*@return返回操作信息。
*/
asyncinsertForm(context:any,form:Form){
letres=awaitthis.invoke(context,Triggers.FormFunc,RequestType.Insert,form);
console.info(CommonConstants.DATABASE_TAG,'xxinsertFormresult:'+JSON.stringify(res));
}
......
}

②卡片 Ability 調(diào)用公共類

EntryFormAbility.ets 卡片生命周期代碼如下:

onAddForm(want){
//獲取卡片ID:ohos.extra.param.key.form_identity
letformId:string=want.parameters[CommonConstants.FORM_PARAM_IDENTITY_KEY]asstring;
//獲取卡片名稱:ohos.extra.param.key.form_name
letformName:string=want.parameters[CommonConstants.FORM_PARAM_NAME_KEY]asstring;
//獲取卡片規(guī)格:ohos.extra.param.key.form_dimension
letdimensionFlag:number=want.parameters[CommonConstants.FORM_PARAM_DIMENSION_KEY]asnumber;

//卡片信息
letform:Form=newForm();
form.formId=formId;
form.formName=formName;
form.dimension=dimensionFlag;

//保存卡片信息到數(shù)據(jù)庫(kù)
DatabaseUtils.insertForm(this.context,form);
//獲取最優(yōu)成績(jī)
getScoreById(this.context,dimensionFlag,formId);

//每五分鐘刷新一次
formProvider.setFormNextRefreshTime(formId,CommonConstants.FORM_NEXT_REFRESH_TIME,(error,data)=>{
if(error){
console.error(CommonConstants.ENTRY_FORM_ABILITY_TAG,'xx onAddForm 更新卡片失?。?+JSON.stringify(error))
}else{
console.info(CommonConstants.ENTRY_FORM_ABILITY_TAG,'xxonAddForm更新卡片成功')
}
});

//返回初始化卡片數(shù)據(jù)
letformData:FormData=newFormData();
formData.formId=formId;
formData.bestScore=0;
formData.matrixNum='1x1';
formData.totalBestScore=0;
returnformBindingData.createFormBindingData(formData);
}

③主界面調(diào)用公共類

@Entry
@Component
structIndex{
@StatescoreDataList:Array=[]

aboutToAppear(){
//請(qǐng)求通知欄權(quán)限
this.requestNotification();
//更新卡片信息
DatabaseUtils.updateForms(getContext(this));
//獲取成績(jī)歷史記錄
this.getScoreListData()
}
onPageShow(){
//更新卡片信息
DatabaseUtils.updateForms(getContext(this));
//獲取成績(jī)歷史記錄
this.getScoreListData()
}
//獲取成績(jī)歷史數(shù)據(jù)
getScoreListData(){
DatabaseUtils.getScoreListData(getContext(this))
.then((res)=>{
this.scoreDataList=res;
//發(fā)送通知
NotificationUtils.sendNotifications(this.scoreDataList[0].totalBestScore);
}).catch((error)=>{
console.error(CommonConstants.MAIN_PAGE_TAG,'xxaboutToAppearoronPageShowgetScoreListDataerror'+JSON.stringify(error));
});
}

build(){...}
}

總結(jié)

通過把之前小游戲元服務(wù)-關(guān)系型數(shù)據(jù)庫(kù)修改為使用 Serverless 云函數(shù)、云數(shù)據(jù)庫(kù),學(xué)習(xí)到不少知識(shí),開始時(shí)不懂得怎么使用云函數(shù)調(diào)用云數(shù)據(jù)庫(kù),一邊參考官方商城模板,一邊測(cè)試,到使用到這個(gè)小游戲上,。總結(jié)這個(gè)項(xiàng)目用到以下知識(shí)點(diǎn):
  • 使用 notification 發(fā)布通知。
  • 使用端云一體化開發(fā)、開發(fā)云函數(shù)、開發(fā)云數(shù)據(jù)庫(kù)。
  • 使用 FormExtensionAbility 創(chuàng)建、更新、刪除元服務(wù)卡片。

備注:資源文件是我在學(xué)習(xí)云函數(shù)調(diào)用云數(shù)據(jù)庫(kù)寫的一個(gè)簡(jiǎn)單實(shí)例,有云函數(shù)調(diào)用云數(shù)據(jù)庫(kù)需求的小伙伴可以下載下來(lái)參考一下。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3927

    瀏覽量

    66239
  • 模板
    +關(guān)注

    關(guān)注

    0

    文章

    109

    瀏覽量

    20872
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2126

    瀏覽量

    33076

原文標(biāo)題:HarmonyOS云開發(fā):舒爾特方格游戲

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    HarmonyOS 3.1上實(shí)現(xiàn)游戲萬(wàn)能卡片

    方格游戲,是注意力訓(xùn)練方法之一,可以幫助孩子糾正上課分心走神、回家做作業(yè)拖拉毛病,但不能貪玩哦,玩多了,對(duì)眼睛,視力不好。
    的頭像 發(fā)表于 06-06 09:27 ?1322次閱讀
    <b class='flag-5'>HarmonyOS</b> 3.1上實(shí)現(xiàn)<b class='flag-5'>游戲</b>萬(wàn)能卡片

    HarmonyOS應(yīng)用兼容穩(wěn)定性測(cè)試

    ,使用華為開發(fā)者帳號(hào)進(jìn)行登錄。 點(diǎn)擊界面上的“從這里開始”按鈕,進(jìn)入到控制臺(tái)。 選擇或者創(chuàng)建一個(gè)項(xiàng)目,如果新創(chuàng)建一個(gè)項(xiàng)目,注意選擇 HarmonyOS。 進(jìn)入項(xiàng)目空間,在左側(cè)導(dǎo)航欄中選擇 測(cè)試服務(wù)
    發(fā)表于 12-25 10:56

    HarmonyOS應(yīng)用性能與功耗測(cè)試

    ,進(jìn)入到控制臺(tái)。 選擇或者創(chuàng)建一個(gè)項(xiàng)目,如果新創(chuàng)建一個(gè)項(xiàng)目,注意選擇 HarmonyOS。 進(jìn)入項(xiàng)目空間,在左側(cè)導(dǎo)航欄中選擇 測(cè)試服務(wù) > HarmonyOS 測(cè)試 ,進(jìn)入
    發(fā)表于 12-26 16:39

    HarmonyOS5服務(wù)技術(shù)分享--ArkTS開發(fā)Node環(huán)境

    ? 你好呀,開發(fā)者小伙伴們!今天我們來(lái)聊聊如何在HarmonyOS(ArkTS API 9及以上)中玩轉(zhuǎn)函數(shù),特別是結(jié)合Node.js和HTTP觸發(fā)器的開發(fā)技巧。文章會(huì)手把手帶你從零
    發(fā)表于 05-22 17:21

    HarmonyOS5服務(wù)技術(shù)分享--ArkTS開發(fā)函數(shù)

    ?【手把手教你玩轉(zhuǎn)HarmonyOS函數(shù)調(diào)試】? Hey 開發(fā)者朋友們!今天咱們來(lái)聊聊怎么用命令行快速調(diào)試HarmonyOS函數(shù),讓你
    發(fā)表于 05-22 17:29

    HarmonyOS5服務(wù)技術(shù)分享--存儲(chǔ)指南

    Hi各位開發(fā)者伙伴們!今天咱們來(lái)聊一聊HarmonyOS存儲(chǔ)的實(shí)戰(zhàn)玩法,手把手教你實(shí)現(xiàn)文件上傳、下載、元數(shù)據(jù)操作等核心功能。無(wú)需官方文檔的嚴(yán)肅感,咱們用最接地氣的方式搞懂這些API怎么用?。ㄎ哪└?/div>
    發(fā)表于 05-22 19:17

    36小時(shí)開發(fā)-辦公之便簽打印機(jī)

    辦公之便簽打印機(jī)》為例,告訴你他們是如何在短時(shí)間內(nèi)完成參賽項(xiàng)目的原型,大家為什么都鐘愛于機(jī)智,選擇機(jī)智完成智能硬件產(chǎn)品開發(fā)。這兩位好基友就是本次大賽的《辦公之便簽打印機(jī)》選手,是
    發(fā)表于 12-27 15:03

    從零開發(fā)HarmonyOS(鴻蒙)運(yùn)動(dòng)手表小游戲——數(shù)字華容道

    HarmonyOS(鴻蒙)運(yùn)動(dòng)手表第二個(gè)小游戲app——數(shù)字華容道前言概述正文創(chuàng)建項(xiàng)目實(shí)現(xiàn)開始界面的布局實(shí)現(xiàn)數(shù)字的隨機(jī)打亂和方格的移動(dòng)實(shí)現(xiàn)計(jì)時(shí)器、重新開始和游戲成功心得體會(huì)結(jié)語(yǔ)源代碼前
    發(fā)表于 11-24 08:57

    HarmonyOS應(yīng)用開發(fā)對(duì)角數(shù)字游戲練習(xí)

    一、效果與說明這是一個(gè)數(shù)字游戲項(xiàng)目,輸入1~9數(shù)字到方格中完成橫豎對(duì)角線相加之和都為15。如下圖 二、部分代碼展示jsexport default { data: {result: '將1~9數(shù)字
    發(fā)表于 06-07 14:36

    直播預(yù)告丨Hello HarmonyOS進(jìn)階課程第三課——游戲開發(fā)實(shí)踐

    HarmonyOS進(jìn)階系列應(yīng)用篇第三課《游戲開發(fā)實(shí)踐》直播如約而至。本節(jié)課,華為HDE徐禮文老師將帶領(lǐng)大家探討HarmonyOS游戲場(chǎng)景,
    發(fā)表于 05-16 11:45

    【學(xué)習(xí)打卡】基于ArkUI框架的方格游戲

    項(xiàng)目開發(fā)介紹方格游戲有主界面和游戲界面兩個(gè)頁(yè)
    發(fā)表于 07-04 00:26

    每日推薦 | 基于RK2206的電子秤,OpenHarmony操作系統(tǒng)的智能停車場(chǎng)

    】基于ArkUI框架的方格游戲推薦理由:
    發(fā)表于 07-05 10:17

    HarmonyOS如何玩 3d 游戲

    總有網(wǎng)友期待 HarmonyOS 什么時(shí)候能出 3d 游戲,今天就教你寫一個(gè)能玩的 3d 游戲。
    的頭像 發(fā)表于 01-04 14:23 ?2714次閱讀

    行空板Python入門教程第七課:方格游戲

    方格訓(xùn)練法,是全世界范圍內(nèi)最簡(jiǎn)單,最有效也是最科學(xué)的注意力訓(xùn)練方法之一。讓我們一起用DFRobot行空板設(shè)計(jì)一個(gè)
    的頭像 發(fā)表于 06-02 15:45 ?2593次閱讀
    行空板Python入門教程第七課:<b class='flag-5'>舒</b><b class='flag-5'>爾</b><b class='flag-5'>特</b><b class='flag-5'>方格</b>小<b class='flag-5'>游戲</b>

    SHUREPGX2無(wú)線話筒手持發(fā)射器原理圖

    SHURE ?PGX2無(wú)線話筒手持發(fā)射器原理圖附印制板圖
    發(fā)表于 10-14 11:40 ?6次下載