当前位置: 首页 > news >正文

前端做用vue做后台多还是做网站多58同城百姓网

前端做用vue做后台多还是做网站多,58同城百姓网,深圳地铁网站开发,wordpress后台在哪里设置段落间距在上一节中实现了走棋#xff0c;这篇博客将介绍中国象棋中的走棋规则 在写博客前先可能一下象棋的走棋规则#xff1a; 1#xff09;将 将的坐标关系#xff1a;横坐标相等#xff0c;纵坐标相减绝对值等于1#xff0c;或者纵坐标相等#xff0c;横坐标相减绝对值等于1… 在上一节中实现了走棋这篇博客将介绍中国象棋中的走棋规则 在写博客前先可能一下象棋的走棋规则 1将 将的坐标关系横坐标相等纵坐标相减绝对值等于1或者纵坐标相等横坐标相减绝对值等于1 将的特殊要求目标坐标坐落于九宫内 将的例外情况假设两个老将面对面而中间没有棋子阻拦。老将能够直接飞到对方九宫吃对方老将 2士 士的坐标关系纵坐标和横坐标相减的绝对值都是1, 士的特殊要求目标坐标坐落于九宫内 3象 象的坐标关系纵坐标和横坐标相减的绝对值都是2 象的特殊要求象眼不能有棋子不能过河 4车 车的坐标关系横坐标或者纵坐标相等 车的特殊要求两个坐标之间不能有棋子存在 5马 马的坐标关系横坐标相减等于1且纵坐标相减等于2或者反过来 马的特殊要求马腿不能憋着 6炮 炮的坐标关系与车同样 炮的特殊要求假设目标坐标没有棋子则与车一样否则要求中间有一个棋子 7兵 过河前 兵的坐标关系纵坐标相差1并且仅仅能前进 兵的特殊要求没有 过河后 兵的坐标关系纵坐标相差1或者横坐标相差1。不能后退 兵的特殊要求没有 实现代码 首先在在SceneGame类中定义一个成员函数canMove(int moveid, int killid, int x, int y)用于实现走棋规则 //走棋规则 bool SceneGame::canMove(int moveid, int killid, int x, int y) {//获得选中的棋子Stone* s _s[moveid];//棋子的类型switch(s-getType()){//将的走棋规则case Stone::JIANG:{return canMoveJiang(moveid, killid, x, y);}break;//士的走棋规则case Stone::SHI:{return canMoveShi(moveid, x, y);}break;//相的走棋规则case Stone::XIANG:{return canMoveXiang(moveid, x, y);}break;//车的走棋规则case Stone::CHE:{return canMoveChe(moveid, x, y);}break;//马的走棋规则case Stone::MA:{return canMoveMa(moveid, x, y);}break;//炮的走棋规则case Stone::PAO:{return canMovePao(moveid, killid, x, y);}break;//兵的走棋规则case Stone::BING:{return canMoveBing(moveid, x, y);}break;default:{break;}}return false; }然后针对不同的棋子定义成员函数。实现走棋规则 canMoveJiang(int moveid, int killid, int x, int y)实现将的走棋规则 //将的走棋规则 bool SceneGame::canMoveJiang(int moveid, int killid, int x, int y) {Stone* skill _s[killid];//将的走棋规则//1、一次走一格//2、不能出九宫格//CCLog(x%d, y%d, x, y);//CCLog(moveid%d, killid%d, moveid, killid);//将的对杀if(skill-getType() Stone::JIANG){return canMoveChe(moveid, x, y);}//通过棋子的ID得到棋子Stone* s _s[moveid];//获得将当前的位置int xo s-getX();int yo s-getY();//获得将走的格数//(x,y)表示将走到的位置int xoff abs(xo - x);int yoff abs(yo - y);int d xoff*10 yoff;//走将的时候有两种情况//xoff1, yoff0将向左或向右//xoff0, yoff1将向前或向后if(d ! 1 d ! 10){return false;}//推断将是否出了九宫//红色的将和黑色的将的x坐标的范围都是3x5if(x3 || x5){return false;}//假设玩家的棋子是红棋if(_redSide s-getRed()){//推断将是否出了九宫if(y0 || y2){return false;}}else//推断黑色的将的范围{//推断将是否出了九宫if(y9 || y7){return false;}}return true; }canMoveShi(int moveid, int x, int y)实现士的走棋规则 //士的走棋规则 bool SceneGame::canMoveShi(int moveid, int x, int y) {//士的走棋规则//1、一次走一格//2、不能出九宫格//3、斜着走//通过棋子的ID得到棋子Stone* s _s[moveid];//获得相走棋前的位置int xo s-getX();int yo s-getY();//获得相走的格数//(x,y)表示将走到的位置int xoff abs(xo - x);int yoff abs(yo - y);int d xoff*10 yoff;//士每走一步x方向走1格,y方向走1格//当走的格数大于1格时//返回falseif(d ! 11){return false;}//推断士是否出了九宫//红色的士和黑色的士的x坐标的范围都是3x5if(x3 || x5){return false;}//假设玩家的棋子是红棋if(_redSide s-getRed()){//推断士是否出了九宫if(y0 || y2){return false;}}else//推断黑色的士的范围{//推断士是否出了九宫if(y9 || y7){return false;}}return true; }canMoveXiang(int moveid, int x, int y)实现相的走棋规则 //相的走棋规则 bool SceneGame::canMoveXiang(int moveid, int x, int y) {//相的走棋规则//每走一次x移动2格,y移动2格//不能过河//通过棋子的ID得到棋子Stone* s _s[moveid];//获得相走棋前的位置int xo s-getX();int yo s-getY();//获得相走的格数//(x,y)表示将走到的位置int xoff abs(xo - x);int yoff abs(yo - y);int d xoff*10 yoff;//相每一次x方向走2格子,y方向走2格//当走的格数大于2格时//返回falseif(d ! 22){return false;}//计算两个坐标的中点坐标int xm (xo x) / 2;int ym (yo y) / 2;//得到(xm,ym)上的棋子int id getStone(xm, ym);//当(xm,ym)上有棋子的时候if(id ! -1){//不能走相return false;}//限制相不能过河//假设玩家的棋子是红棋if(_redSide s-getRed()){//推断相是否过了河if(y 4){return false;}}else//推断黑色的相的范围{//推断相是否过了河if(y 5){return false;}}return true; } canMoveChe(int moveid, int x, int y)实现车的走棋规则 //车的走棋规则 bool SceneGame::canMoveChe(int moveid, int x, int y) {//通过棋子的ID得到棋子Stone* s _s[moveid];//获得车走棋前的位置int xo s-getX();int yo s-getY();//当两点之间有棋子的时候车不能走if(getStoneCount(xo,yo,x,y) ! 0){return false;}return true; } canMoveMa(int moveid, int x, int y)实现马的走棋规则 //马的走棋规则 bool SceneGame::canMoveMa(int moveid, int x, int y) {//通过棋子的ID得到棋子Stone* s _s[moveid];//获得马走棋前的位置int xo s-getX();int yo s-getY();//CCLog(xo%d, xo);//CCLog(yo%d, yo);//获得马走的格数//(x,y)表示马走到的位置//马有两种情况//第一种情况马先向前或向后走1步再向左或向右走2步//另外一种情况马先向左或向右走1不再向前或向后走2步int xoff abs(xo-x);int yoff abs(yo-y);//CCLog(x%d, x);//CCLog(y%d, y);int d xoff*10 yoff;//CCLog(d%d, d);if(d ! 12 d ! 21) {return false;}int xm, ym;//记录绑脚点坐标if(d 12)//当马走的是第一种情况{xm xo;//绑脚点的x坐标为走棋前马的x坐标ym (yo y) / 2;//绑脚点的y坐标为走棋前马的y坐标和走棋后马的y坐标的中点坐标}else//当马走的是另外一种情况{xm (xo x) / 2;//绑脚点的x坐标为走棋前马的x坐标和走棋后马的x坐标的中点坐标ym yo;;//绑脚点的y坐标为走棋前马的y坐标}//CCLog(xm%d, xm);//CCLog(ym%d, ym);//当绑脚点有棋子时,不能走if(getStone(xm, ym) ! -1) {return false;}return true; } canMovePao(int moveid, int killid, int x, int y)实现炮的走棋规则 //炮的走棋规则 bool SceneGame::canMovePao(int moveid, int killid, int x, int y) {//通过棋子的ID得到棋子Stone* s _s[moveid];//获得炮走棋前的位置int xo s-getX();int yo s-getY();//当触摸点上有一个棋子//并且两点之间仅仅有一个棋子的时候//炮吃掉触摸点上的棋子if(killid ! -1 this-getStoneCount(xo,yo,x,y) 1){return true;}if(killid -1 this-getStoneCount(xo, yo, x, y) 0) {return true;}return false; }canMoveBing(int moveid, int x, int y)实现兵的走棋规则 //兵的走棋规则 bool SceneGame::canMoveBing(int moveid, int x, int y) {//兵的走棋规则//1、一次走一格//2、前进一格后不能后退//3、过河后才干够左右移动//通过棋子的ID得到棋子Stone* s _s[moveid];//获得将当前的位置int xo s-getX();int yo s-getY();//获得兵走的格数//(x,y)表示将走到的位置int xoff abs(xo - x);int yoff abs(yo - y);int d xoff*10 yoff;//走将的时候有两种情况//xoff1, yoff0将向左或向右//xoff0, yoff1将向前或向后if(d ! 1 d ! 10){return false;}//假设玩家的棋子是红棋if(_redSide s-getRed()){//限制红色的兵不能后退if(y yo){return false;}//红色的兵没有过河不能左右移动if(yo 4 y yo){return false;}}else//推断黑色的兵{//限制黑色的兵不能后退if(y yo){return false;}//黑色的兵没有过河不能左右移动if(yo 5 y yo){return false;}}return true; }getStoneCount(int xo, int yo, int x, int y)推断两个棋子之间棋子的个数用于车和炮以及将的对杀 ///计算(xo,yo)和(x,y)之间的棋子数 //假设棋子数为-1,表示(xo,yo)和(x,y)不在一条直线上 int SceneGame::getStoneCount(int xo, int yo, int x, int y) {int ret 0;//记录两点之间的棋子的个数//(xo,yo)和(x,y)不在同一条直线上if(xo ! x yo ! y){return -1;}//(xo,yo)和(x,y)在同一点上if(xo x yo y){return -1;}//两点在同一条竖线上if(xo x){//min为两个点中y坐标最小的点的y坐标int min yo y ? yo : y; //max为两个点中y坐标最大的点的y坐标 int max yo y ? yo : y; //查找同一条竖线上两点之间的棋子数 for(int yymin1; yymax; yy) { //当两点之间有棋子的时候 if(getStone(x,yy) ! -1) { ret;//棋子数加1 } } } else//两点在同一条横线上yo y { //min为两个点中x坐标最小的点的x坐标 int min xo x ? xo : x; //max为两个点中x坐标最大的点的x坐标 int max xo x ? xo : x; //查找同一条竖线上两点之间的棋子数 for(int xxmin1; xxmax; xx) { //当两点之间有棋子的时候 if(getStone(xx,y) ! -1) { ret;//棋子数加1 } } } //返回两点之间的棋子数 return ret; } 參考文章http://blog.csdn.net/itcastcpp/article/details/17673393 转载于:https://www.cnblogs.com/jzssuanfa/p/7270587.html
http://www.huolong8.cn/news/52333/

相关文章:

  • 简历电商网站开发经验介绍建设一个电商网站的流程是什么
  • 高端网站价格长沙招聘网站哪个最好
  • 非模板网站企业电商网站建设
  • 技术先进的网站建设学校门户网站模板
  • asp网站源码安装教程建设网站用图片需要版权
  • 电子商务类网站建设域名解析ip138在线查询
  • 做微信号公众号用网站还是App余姚做网站
  • 上海 网站设计 公司网站ui 特点
  • 怎么确定网站的关键词哪些网站可以进行域名注册
  • 罗湖网站公司网站从建设到赚钱的流程
  • 在线生成网站58同城承德网站建设
  • 电商网站建设方案网站写动态新闻有什么好处
  • 删除织梦综合网站wordpress小工具打不开
  • 有哪些做副业的网站博客网站
  • 重庆市网站建设郑州设计院排名
  • 东莞汽车总站停止营业昆明网站空间
  • 青岛高端网站制作项目网评ppt
  • 网站项目的流程华为网站开发
  • 使用php的大型网站济南网站建设外包公司
  • 昆明网站seo服务什么网比较好
  • 首钢建设二建设公司网站免费网络推广平台
  • 做外包装很厉害的网站找兼职h5网站开发人员
  • 电商网站建设 数商云黑龙江做网站公司
  • 做网站学好哪些软件苏州网络营销推广软件运营
  • 巴彦淖尔市网站制作响应式网站怎么写
  • 青岛网站建设比较好响应式网页设计用什么软件
  • 购物网站排名榜天津建设工程协会网站
  • 如何把刚做的网站被百度抓取到上海的网络推广公司
  • 做个网站要多少钱 一般云南省网站备案要求
  • 织梦网站上线可以做英文纵横字谜的网站