/*********************************************
//刚写了个控制台的五子棋游戏,发现判断输赢花了我不少时间,特意贴出来.
//如果大家有更好的方法,欢迎共享.如果发现有错误,感谢帮忙指出来.有好多重复的代码.
//方法:
//  每读入一个点
//  通过判断垂直,水平,主对角线,斜对角线四个方向来判断输赢
//参数:
//map:存放棋盘元素的二维数组
//x,y:最后下的一个旗子的坐标
//num:设定连续多少个旗子就为赢
**************************************************/
bool is_win(char map[][COL],int x,int y,int num)
{int count = 0;int winflag = 1;//第一个点不用再次读取char cur ;//记录当前所下的棋int i,j;//判断当前所下的棋是哪种.字符 'O' '@'代表棋子cur = map[x][y] == 'O' ? 'O' : '@';
////垂直方向判断//往上读取num个点, y不变,x--for(i = x-1,j = y; i >= 0 && count++ < num; i --)//读取num次,或者遇到边界停止{if(map[i][j] == cur) winflag++;else break;//如果不是,就不是连续相同的棋子}//往下读取num个点,y不变,x++count = 0;//读取次数清零for(i = x + 1,j = y; i < ROW && count ++ < num; i ++ ){if(map[i][j] == cur) winflag++;else break;//如果不是,就不是连续相同的棋子}count = 0;//读取次数清零if( winflag >= num )//垂直方向读取完毕,判断输赢,赢返回真return true;elsewinflag = 1;//水平判断//往右方向,x不变,y++for(i = x,j = y + 1; j < COL && count ++ < num ; j ++ ){if(map[i][j] == cur) winflag++;else break;//如果不是,就不是连续相同的棋子}count = 0;//往左方向,x不变,y--for(i = x, j = y - 1; j >= 0 && count++ < num ; j --){if(map[i][j] == cur) winflag++;else break;//如果不是,就不是连续相同的棋子}count = 0;//水平方向读取完毕,判读输赢if( winflag >= num )//垂直方向读取完毕,判断输赢,赢返回真return true;elsewinflag = 1;
/////主对角线方向判断//往右下方向,x++,y++for(i = x + 1,j = y + 1; i < ROW && j < 3 && count ++ < num ; i ++ ,j ++){if(map[i][j] == cur) winflag++;else break;//如果不是,就不是连续相同的棋子}count = 0;//往左上方向,x--,y--for(i = x - 1,j = y - 1; i >= 0 && j >= 0 && count++ < num ; i -- ,j --){if(map[i][j] == cur) winflag++;else break;//如果不是,就不是连续相同的棋子}count = 0;//主对角线读取完毕,判读输赢if( winflag >= num )//垂直方向读取完毕,判断输赢,赢返回真return true;elsewinflag = 1;
/////斜对角线方向判断//往右上,x--,y++for(i = x -1,j = y + 1; i >= 0 && j < COL && count++ < num; i --,j++){if(map[i][j] == cur) winflag++;else break;//如果不是,就不是连续相同的棋子}count = 0;//往左下方向,x++,y--for(i = x + 1,j = y -1; i < ROW && y >= 0 && count++ < num; i ++,j--){if(map[i][j] == cur) winflag++;else break;//如果不是,就不是连续相同的棋子}count = 0;//斜对角方向读取完毕,判读输赢if( winflag >= num )//垂直方向读取完毕,判断输赢,赢返回真return true;elsewinflag = 1;
///所有方向判断完毕,没出现胜负return false;
}

五子棋 判断输赢的函数相关推荐

  1. java五子棋判断_JAVA 五子棋 判断输赢的代码实现

    //定义棋盘大小,宽w,高h int w = 11; int h = w; //用一个二维数组保存棋盘数据,1代表红棋,2代表黑棋 int[][] chess = new int[h][w]; //定 ...

  2. java五子棋判断输赢算法

    用一个二维数组先将棋盘存储,已下的白棋标为1,已下的黑棋标为2,未下的棋全部为0. 此时,先来判断横向输赢,即当横向有五个1或五个2连在一起即判断为赢. 同理,竖向的就是将y1改变,x1不变. 先向右 ...

  3. 简易五子棋(包含开始、双人对战、简易AI、悔棋、认输、判断输赢)不含禁手

    简易五子棋 先上效果图 一.问题分析 五子棋游戏分析: 五子棋作为较为普遍且简易的娱乐游戏,受到众多人的热爱,且五子棋AI也是一个较为容易实现的AI.下面我们先来分析游戏规则.(哈哈,虽然大家都知道, ...

  4. JAVA中计算五子棋平局的算法_输入五子棋棋盘判断输赢或平局—程序设计(C语言)...

    输入五子棋棋盘判断输赢或平局-程序设计(C语言) 输入五子棋棋盘判断输赢或平局-程序设计(C语言) 输入五子棋棋盘判断输赢或平局-程序设计(C语言) ??做这道题实在没有思路参考了这位作者的代码: h ...

  5. [教你做小游戏] 《五子棋》怎么判断输赢?你能5分钟交出代码吗?

    我是HullQin,公众号线下聚会游戏的作者(欢迎关注公众号,发送加微信,交个朋友),转发本文前需获得作者HullQin授权.我独立开发了<联机桌游合集>,是个网页,可以很方便的跟朋友联机 ...

  6. Java程序验证五子棋先手必胜_五子棋的判断输赢规则 -- java编程(简单优化完整版)...

    五子棋的判断输赢规则代码 -- 完整优化版 一.前言 之前浏览过很多网上的方法,但总找不到比较完整,也get不到其他大神的思路,就直接画图分析,分析了之后就有了如下的代码,当然还想到更加优化的一种,只 ...

  7. 五子棋判输赢方法一 :

    可以很容易的看出五子棋连城5子即为获胜,其中一共有八个方向需要去计算,如下图所示: 分别为:东西南北,东北,东南,西南,西北八个方向: (1)定义一个 int count用来定义是否有5个相同颜色的棋 ...

  8. ACMNO.23 C语言-素数判定 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 输入 一个数 输出 如果是素数输出prime 如果不是输出not prime

    题目描述 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息. 输入 一个数 输出 如果是素数输出prime 如果不是输出not prime 样例输入 97 样例输出 prime 来源/ ...

  9. boundcolumn 根据值进行判断_Excel使用函数进行条件判断的方法步骤

    Excel中的函数具体该如何进行判断数据的条件是否达到要求呢?下面是学习关于excel使用函数进行条件判断的教程,希望阅读过后对你有所启发! excel使用函数进行条件判断的教程 函数条件判断步骤1: ...

最新文章

  1. JAVA的String的实现
  2. 正则表达式及其在python上的应用
  3. 云图说|小云妹带你揭秘数据复制服务DRS四大功能
  4. python大数据开发工程师_大数据开发工程师的职责
  5. JavaScript逻辑运算符
  6. 【算法】欧拉图,欧拉回路,Eular Circuit,随机生成欧拉图,搜索欧拉回路
  7. redis缓存队列+MySQL +php任务脚本定时批量入库
  8. 老子《道德经》第三章
  9. 使用 RESTful 的方式开发 Web应用
  10. 微信小程序音量调节插件
  11. 大学教师与大学学生的彼此期望
  12. hadoop reducer不执行问题及解决
  13. doctrine2 mysql_php – Doctrine2和MySQL分区
  14. Linux下使用Netfilter框架编写内核模块(统计协议层ping特定地址丢包数)
  15. html复习第六天 京东首页布局(导航栏/左侧)
  16. win7 linux ssh key,Windows下创建SSH Key并登录Linux服务器
  17. PC后台管理( 基于图形化界面自动安装教程)
  18. mysql 数据库里查询语句中不等于的两种写法
  19. 那些年我们在python掉进的坑系列之一pandas的to_sql
  20. 解读企业领域热词——BYOD

热门文章

  1. 如何免登录批量下载特定用户的微博高清大图?
  2. JAVA中DNS缓存设置
  3. HTTP 网站升级到 HTTPS 。
  4. 泰拉瑞亚无限刷怪服务器,泰拉瑞亚刷怪场怎么做_高效刷怪场地建造_3DM单机
  5. On the Comparison of Gauge Freedom Handling in Optimization-based Visual-Inertial State Estimation
  6. layui表格行合并
  7. 使用devstack安装部署OpenStack(据详细手把手教学)
  8. Lerp 实现匀速运动
  9. 注意力机制——Non-local Networks(NLNet)
  10. vs2015 CMake Recast库编译方式