想了解更多开源请访问:开源基础软件社区https://ost.51cto.com1.简介大家经常看到市面上有游戏,麻将、飞行棋和其他简单的棋盘游戏;那么,我从来没有开发过游戏,我在想一个游戏是怎么开发出来的?所以我想在openharmony上试试看。最近发现了一款??有趣的棋牌游戏军棋翻番棋。是军棋类游戏的扩展玩法,深受人们喜爱,家喻户晓。主要形式是2人对弈,依次翻军棋,确定阵营,最后按军棋下法对弈取胜。这款游戏除了要掌握军棋的基本玩法外,还需要一定的运气和创造性思维才能取胜,可谓妙趣横生。2.局部效果图3.实现思路这次的重点是分享我的思路和方法;不知道市面上的游戏是不是大部分都是基于这个思路;我完全是自己构思的。不管是什么语言,都应该分为两大部分:游戏图像的绘制,以及逻辑运算处理。1.游戏Openharmony的绘制使用canvas的绘制记录各种带有数据的图像,当前状态和位置,最后使用绘图API进行绘制。保存数据的结构无非是数组、二维数组、集合、HashMap、队列等;不同的语言有不同的写法。如何选择openharmony可以参考:Openharmony军棋开发带你了解如何选择数据结构-开源基础软件社区-.COM2、逻辑运算处理整体代码流接触点有效性-----》MobileFeasibility-----"FireEffectiveness-----"GameOverorContinue.以下是openharmony实现的参考代码。当用户触摸画布时,坐标点的判断。Canvas(this.context).width('100%').height('100%').onReady(()=>{this.isReady=truethis.canvasDraw(Code.INIT,0,0)}).onTouch((event)=>{letclickPoint=this.checkValidClickPoint(event)Logger.d(TAG,`onTouchclick${JSON.stringify(clickPoint)}`)if(clickPoint[0]!=-1&&clickPoint[1]!=6){this.chessListManager.clickPoint(clickPoint[0],clickPoint[1])}})检查用户手指触摸点的有效性。privatecheckValidClickPoint(event?:TouchEvent){letclickPoint=[-1,-1]if(event){lettouches=event.touchesif(touches.length==1){letetype=event.typeif(etype===TouchType.Down.valueOf()){this.downTouchXY[0]=touches[0].xthis.downTouchXY[1]=touches[0].y}elseif(etype===TouchType.Up.valueOf()){lettx=touches[0].xletty=touches[0].yletcx=Math.abs(this.downTouchXY[0]-tx)letcy=Math.abs(this.downTouchXY[1]-ty)if(cx<30&&cy<30){//有效位置//计算具体的pointrtx,pointrty位置letpoinrtx=Math.floor((tx-this.marginRight+this.cellColumnCentrePadding/2)/this.cellColumnCentrePadding)letpoinrty=Math.floor((ty-this.marginTop+this.cellRowCentrePadding/2)/this.cellRowCentrePadding)letvalidXMin=this.marginRight+this.cellColumnCentrePadding*poinrtx-CHESS_WIDTH/2+3letvalidXMax=validXMin+CHESS_WIDTH-6letvalidYMin=this.marginTop+this.cellRowCentrePadding*pointrty-CHESS_HEIGHT/2+3letvalidYMax=validYMin+CHESS_HEIGHT-6if(tx>=validXMin&&tx<=validX(ty>=validYMin&&ty<=validYMax){clickPoint[0]=poinrtxclickPoint[1]=poinrty}}}}}}returnclickPoint}返回的坐标点有效,将进入触摸流程letclickPoint=this.checkValidClickPoint(event)Logger.d(TAG,`onTouch点击${JSON.stringify(clickPoint)}`)if(clickPoint[0]!=-1&&clickPoint[1]!=6){this.chessListManager.clickPoint(clickPoint[0],clickPoint[1])}运动判断还是比较复杂的,也涉及到工程师的特殊性。尺寸判断。4.总结1.从效果来看,openharmony开发的游戏还是不能满足商业要求。2.根据这个场景,这篇文章可以让你很好的理解openharmony的一些基础知识,比如canvasdrawing,数据结构和代码风格。3.OpenHarmony在动画方面基本弱。4.基本上按照上面的思路,在其他比较适合游戏开发的游戏中,游戏,麻将等棋类都是类似的。了解更多开源请访问:开源基础软件社区https://ost.51cto.com
