#include #include

using namespacestd;#define WIDE_AND_LONG 20 //棋盘的长和宽

#define NAME_LEN 20 //输入姓名的长度typedefclassGobang

{public:int InitPlayerName(char *, char *);int CheckInput(char,int);int CheckIndexInput(char, char, char);intGetPlayerName();intInitBoard();int WriteBoard(char, char, bool);intBeginOrNot();intCheckRow();intCheckColumn();intCheckTopLeft();intCheckTopRight();intCheckDownLeft();intCheckDownRight();intCheckDraw();intCheckFinish();intChess();intShowBoard();private:characBoard[WIDE_AND_LONG][WIDE_AND_LONG];characPlayerOneName[NAME_LEN];characPlayerTwoName[NAME_LEN];

}GOBANG;//初始化姓名的缺省值

int GOBANG::InitPlayerName(char *pPlayerOne,char *pPlayerTwo)

{

strcpy(acPlayerOneName,pPlayerOne);

strcpy(acPlayerTwoName,pPlayerTwo);return 0;

}//检查输入姓名时是否含非法字符空格和 Tab键

int GOBANG::CheckInput(char ch, intiNameLen)

{if(' ' == ch || '\t' ==ch)

{

cout<

}if(iNameLen > NAME_LEN - 1)

{

cout<

}return 0;

}//将棋子放到棋盘中

int GOBANG::WriteBoard(char cRow, char cColumn, boolbJudge)

{int iRow = 0;int iColumn = 0;if(cRow >= '0' && cRow <= '9')

{

iRow= static_cast(cRow - '0');

}else if(cRow >= 'A' && cRow <= static_cast('A' + WIDE_AND_LONG - 10 - 1))

{

iRow= static_cast((cRow - 'A') + 10);

}else{

iRow= static_cast((cRow - 'a') + 10);

}if(cColumn >= '0' && cColumn <= '9')

{

iColumn= static_cast(cColumn - '0');

}else if(cColumn >= 'A' && cColumn <= static_cast('A' + WIDE_AND_LONG - 10 - 1))

{

iColumn= static_cast((cColumn - 'A') + 10);

}else{

iColumn= static_cast((cColumn - 'a') + 10);

}if('+' !=acBoard[iRow][iColumn])

{

cout<

}if(!bJudge)

{

acBoard[iRow][iColumn]= static_cast(1);

}else{

acBoard[iRow][iColumn]= static_cast(2);

}return 0;

}//检查坐标输入是否合法

int GOBANG::CheckIndexInput(char cRow,char cSeparator,charcColumn)

{if(!cRow || !cSeparator || !cColumn)

{return -1;

}if(!((cRow >= '0' && cRow <= '9') ||\

(cRow>= 'A' && cRow <= static_cast('A' + WIDE_AND_LONG - 10 - 1)) ||\

(cRow>= 'a' && cRow <= static_cast('a' + WIDE_AND_LONG - 10 - 1)))

)

{return -1;

}if(' ' != cSeparator && '\t' != cSeparator && ',' !=cSeparator)

{return -1;

}if(!((cColumn >= '0' && cColumn <= '9') ||\

(cColumn>= 'A' && cColumn <= static_cast('A' + WIDE_AND_LONG - 10 - 1)) ||\

(cColumn>= 'a' && cColumn <= static_cast('a' + WIDE_AND_LONG - 10 - 1)))

)

{return -1;

}return 0;

}//获取玩家的昵称

intGOBANG::GetPlayerName()

{

fflush(stdin);char cTemp = 0;int iNameLen = 0;

cout<

cTemp=getch();

cout<

{return 0;

}

fflush(stdin);

memset(acPlayerOneName,0,sizeof(acPlayerOneName));

memset(acPlayerTwoName,0,sizeof(acPlayerTwoName));

cout<

{if(-1 ==CheckInput(cTemp,iNameLen))

{

fflush(stdin);

cout<

}

acPlayerOneName[iNameLen]=cTemp;

iNameLen++;

}if(0 ==iNameLen)

{

strcpy(acPlayerOneName,"玩家一");

}

iNameLen= 0;

fflush(stdin);

cout<

{if(-1 ==CheckInput(cTemp,iNameLen))

{

fflush(stdin);

cout<

}

acPlayerTwoName[iNameLen]=cTemp;

iNameLen++;

}if(0 ==iNameLen)

{

strcpy(acPlayerTwoName,"玩家一");

}return 0;

}//初始化棋盘

intGOBANG::InitBoard()

{int iRow = 0;int iColumn = 0;for(iRow = 0; iRow < WIDE_AND_LONG; iRow++)

{for(iColumn = 0; iColumn < WIDE_AND_LONG; iColumn++)

{

acBoard[iRow][iColumn]= '+';

}

}return 0;

}//检查棋盘横向是否存在五子连珠

intGOBANG::CheckRow()

{int iRow = 0;int iColumn = 0;int iPlayerOneLen = 0;int iPlayerTwoLen = 0;for(iRow = 0; iRow < WIDE_AND_LONG; iRow ++)

{while(iColumn

{if(static_cast(1) ==acBoard[iRow][iColumn])

{

iPlayerOneLen++;

iPlayerTwoLen= 0;

}else if(static_cast(2) ==acBoard[iRow][iColumn])

{

iPlayerTwoLen++;

iPlayerOneLen= 0;

}else{

iPlayerTwoLen= 0;

iPlayerOneLen= 0;

}

iColumn++;

}if(iPlayerOneLen >= 5)

{return 1;

}if(iPlayerTwoLen >= 5)

{return 2;

}

iPlayerOneLen= 0;

iPlayerTwoLen= 0;

iColumn= 0;

}return 0;

}//检查棋盘竖向是否存在五子连珠

intGOBANG::CheckColumn()

{int iRow = 0;int iColumn = 0;int iPlayerOneLen = 0;int iPlayerTwoLen = 0;for(iColumn = 0; iColumn < WIDE_AND_LONG; iColumn ++)

{while(iRow

{if(static_cast(1) ==acBoard[iRow][iColumn])

{

iPlayerOneLen++;

iPlayerTwoLen= 0;

}else if(static_cast(2) ==acBoard[iRow][iColumn])

{

iPlayerTwoLen++;

iPlayerOneLen= 0;

}else{

iPlayerTwoLen= 0;

iPlayerOneLen= 0;

}

iRow++;

}if(iPlayerOneLen >= 5)

{return 1;

}if(iPlayerTwoLen >= 5)

{return 2;

}

iPlayerOneLen= 0;

iPlayerTwoLen= 0;

iRow= 0;

}return 0;

}//检查棋盘左上方(包括对角线)是否存在五子连珠

intGOBANG::CheckTopLeft()

{int iRow = 0;int iTempRow = 0;int iColumn = 0;int iPlayerOneLen = 0;int iPlayerTwoLen = 0;for(iRow = 4; iRow < WIDE_AND_LONG; iRow ++)

{

iTempRow=iRow;while(iTempRow >= 0)

{if(static_cast(1) ==acBoard[iTempRow][iColumn])

{

iPlayerOneLen++;

iPlayerTwoLen= 0;if(iPlayerOneLen >= 5)

{return 1;

}

}else if(static_cast(2) ==acBoard[iTempRow][iColumn])

{

iPlayerTwoLen++;

iPlayerOneLen= 0;if(iPlayerTwoLen >= 5)

{return 2;

}

}else{

iPlayerTwoLen= 0;

iPlayerOneLen= 0;

}

iTempRow--;

iColumn++;

}

iPlayerOneLen= 0;

iPlayerTwoLen= 0;

iColumn= 0;

}return 0;

}//检查棋盘右上方(包括对角线)是否存在五子连珠

intGOBANG::CheckTopRight()

{int iRow = 0;int iColumn = 0;int iTempColumn = 0;int iPlayerOneLen = 0;int iPlayerTwoLen = 0;for(iColumn = 0; iColumn < WIDE_AND_LONG - 4; iColumn ++)

{

iTempColumn=iColumn;while(iTempColumn

{if(static_cast(1) ==acBoard[iRow][iTempColumn])

{

iPlayerOneLen++;

iPlayerTwoLen= 0;if(iPlayerOneLen >= 5)

{return 1;

}

}else if(static_cast(2) ==acBoard[iRow][iTempColumn])

{

iPlayerTwoLen++;

iPlayerOneLen= 0;if(iPlayerTwoLen >= 5)

{return 2;

}

}else{

iPlayerTwoLen= 0;

iPlayerOneLen= 0;

}

iRow++;

iTempColumn++;

}

iPlayerOneLen= 0;

iPlayerTwoLen= 0;

iRow= 0;

}return 0;

}//检查棋盘左下方(不包括对角线)是否存在五子连珠

intGOBANG::CheckDownLeft()

{int iRow = 0;int iTempRow = 0;int iColumn = 0;int iPlayerOneLen = 0;int iPlayerTwoLen = 0;for(iRow = 1; iRow < WIDE_AND_LONG - 4; iRow ++)

{

iTempRow=iRow;while(iTempRow

{if(static_cast(1) ==acBoard[iTempRow][iColumn])

{

iPlayerOneLen++;

iPlayerTwoLen= 0;if(iPlayerOneLen >= 5)

{return 1;

}

}else if(static_cast(2) ==acBoard[iTempRow][iColumn])

{

iPlayerTwoLen++;

iPlayerOneLen= 0;if(iPlayerTwoLen >= 5)

{return 2;

}

}else{

iPlayerTwoLen= 0;

iPlayerOneLen= 0;

}

iTempRow++;

iColumn++;

}

iPlayerOneLen= 0;

iPlayerTwoLen= 0;

iColumn= 0;

}return 0;

}//检查棋盘右下方(不包括对角线)是否存在五子连珠

intGOBANG::CheckDownRight()

{int iRow = 0;int iTempRow = 0;int iColumn = WIDE_AND_LONG - 1;int iPlayerOneLen = 0;int iPlayerTwoLen = 0;for(iRow = 1; iRow < WIDE_AND_LONG - 4; iRow ++)

{

iTempRow=iRow;while(iTempRow

{if(static_cast(1) ==acBoard[iTempRow][iColumn])

{

iPlayerOneLen++;

iPlayerTwoLen= 0;if(iPlayerOneLen >= 5)

{return 1;

}

}else if(static_cast(2) ==acBoard[iTempRow][iColumn])

{

iPlayerTwoLen++;

iPlayerOneLen= 0;if(iPlayerTwoLen >= 5)

{return 2;

}

}else{

iPlayerTwoLen= 0;

iPlayerOneLen= 0;

}

iTempRow++;

iColumn--;

}

iPlayerOneLen= 0;

iPlayerTwoLen= 0;

iColumn= WIDE_AND_LONG - 1;

}return 0;

}//检查是否平局

intGOBANG::CheckDraw()

{int iRow = 0;int iColumn = 0;for(iRow = 0; iRow < WIDE_AND_LONG; iRow++)

{for(iColumn = 0; iColumn < WIDE_AND_LONG; iColumn++)

{if('+' ==acBoard[iRow][iColumn])

{return 1;

}

}

}return 0;

}//检查是否达到结束的条件(五子连珠或平局)

intGOBANG::CheckFinish()

{int iJudgeRow = 0;int iJudgeColumn = 0;int iJudgeTopLeft = 0;int iJudgeTopRight = 0;int iJudgeDownLeft = 0;int iJudgeDownRight = 0;int iJudgeDraw = 0;

iJudgeRow=CheckRow();

iJudgeColumn=CheckColumn();

iJudgeTopLeft=CheckTopLeft();

iJudgeTopRight=CheckTopRight();

iJudgeDownLeft=CheckDownLeft();

iJudgeDownRight=CheckDownRight();

iJudgeDraw=CheckDraw();if(1 == iJudgeRow || 1 == iJudgeColumn || 1 == iJudgeTopLeft || 1 == iJudgeTopRight || 1 == iJudgeDownLeft || 1 ==iJudgeDownRight)

{

cout<获胜!"<

}if(2 == iJudgeRow || 2 == iJudgeColumn || 2 == iJudgeTopLeft || 1 == iJudgeTopRight || 2 == iJudgeDownLeft || 2 ==iJudgeDownRight)

{

cout<获胜!"<

}if(0 ==iJudgeDraw)

{

cout<

}return 0;

}//显示棋盘到控制台

intGOBANG::ShowBoard()

{int iRow = 0;int iColumn = 0;

system("cls");

cout<

{if(9

{

cout<('A' + iRow - 10)<

}else{

cout<

}

}

cout<

{if(9

{

cout<('A' + iRow - 10)<

}else{

cout<

}for(iColumn = 0; iColumn < WIDE_AND_LONG; iColumn++)

{

cout<

}

cout<

}return 0;

}//开始下棋

intGOBANG::Chess()

{bool bJudge = false;while(1)

{char cRow = 0;char cSeparator = 0;char cColumn = 0;char cTemp = 0;int iLen =1;

fflush(stdin);if(!bJudge)

{

cout<输入对应的行和列 (格式: a,3 或a 3 或a 3):";

}else{

cout<输入对应的行和列 (格式: a,3 或a 3 或a 3):";

}while('\n' != (cTemp =getchar()))

{if(iLen > 3)

{

cout<

fflush(stdin);if(!bJudge)

{

cout<输入对应的行和列 (格式: a,3 或a 3 或a 3):";

}else{

cout<输入对应的行和列 (格式: a,3 或a 3 或a 3):";

}

iLen= 1;continue;

}if(1 ==iLen)

{

cRow=cTemp;

}else if(2 ==iLen)

{

cSeparator=cTemp;

}else{

cColumn=cTemp;

}

iLen++;

}if(-1 ==CheckIndexInput(cRow,cSeparator,cColumn))

{

cout<

}if(-1 ==WriteBoard(cRow,cColumn,bJudge))

{continue;

}

ShowBoard();if(1 ==CheckFinish())

{

BeginOrNot();

}

bJudge= !bJudge;

}return 0;

}//判断游戏结束后玩家是否选择继续还是退出

intGOBANG::BeginOrNot()

{char cTemp = 0;

cout<

fflush(stdin);

cTemp=getch();if('y' == cTemp || 'Y' ==cTemp)

{

InitBoard();

ShowBoard();

Chess();

}else{

exit(0); //程序的出口

}return 0;

}intmain()

{

GOBANG gobang;

memset(&gobang,0,sizeof(GOBANG));

gobang.InitPlayerName("玩家一","玩家二");

gobang.GetPlayerName();

gobang.InitBoard();

gobang.ShowBoard();

gobang.Chess();return 0;

}//五子棋

五子棋java源代码博客园_来来来,五子棋源代码相关推荐

  1. java数据结构博客园_常见数据结构的Java实现

    单链表的Java实现 首先参考wiki上的单链表说明,单链表每个节点包含数据和指向链表中下一个节点的指针或引用.然后看代码 import java.lang.*; public class Singl ...

  2. java list 博客园_Java集合系列(一)List集合

    List的几种实现的区别与联系 List主要有ArrayList.LinkedList与Vector几种实现. ArrayList底层数据结构是数组, 增删慢.查询快; 线程不安全, 效率高; 不可以 ...

  3. python博客园_用Python向博客园发布新文章

    最近在开发一个博客系统,经常把写的东西放在自己网站的博客上(之前写在Onenote),然后我在博客园也申请了一个博客,就有了同样一篇文章,我需要复制粘贴排版分别提交两次的情况.于是我就想能不能在我的网 ...

  4. python 面试题 博客园_常见的python面试问题1

    雷锋网按:本文为 AI 研习社编译的技术博客,原文 Top 35 Python Interview Questions and Answers in 2018 ,作者 DataFlair Team. ...

  5. java 金融面试题目_面试题 - java金融 - 博客园

    1,什么是线程安全 (参考书:https://book.douban.com/subject/10484692/) 不对共享变量进行修改 2,都说String是不可变的,为什么我可以这样做呢 Stri ...

  6. java orm框架 博客园_自己写ORM框架 DBUtils

    ORM框架想必大家都比较熟知了,即对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同 ...

  7. java ee 博客园_JAVAEE 介绍

    软件151  雷楷文 1.  为什么需要JavaEE 我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展.当业务需求发生变化的时候,对于程序员和美工都是一 ...

  8. java数据结构博客园_Java数据结构

    一.线性数据结构 1.Java一维数组的创建 (1)预先定义数组的内存空间 int[] arr = new int[3]; // new int[3]是代表创建3个内存地址空间 // 地址空间的序号是 ...

  9. java 入门 博客园_javaweb入门

    复习: css的常用样式: border background padding margin float position 定位top left确定div在页面中的位置,这两个值可以为负数. css+ ...

  10. java吧 博客系统_【Java】SpringMVC + Mybatis 实现的个人博客系统

    [Java] 纯文本查看 复制代码DEBUG - Resolved location pattern [classpath:com/wp/dao/**/*.xml] to resources [fil ...

最新文章

  1. 图像复原的神经网络稀疏表示
  2. idea mybatis plugin插件,免费mybatis插件
  3. 设计模式-结构型-代理
  4. 在win8.1 64位系统+cocos2d-x2.2.3下搭建android交叉编译环境
  5. JAVA SSM框架+Redis 实现单点登录
  6. Java中complex怎么被调用_java中存在三种调用机制
  7. 舍弃Python,为什么知乎选用Go重构推荐系统?
  8. python 自定义函数语句_python 自定义函数
  9. 把word地址做链接在线打开word
  10. Spring(三)之自动装配、表达式
  11. TeXworks 设置成默认用XeLaTeX排版
  12. 尚硅谷Java Spring注解驱动开发视频教程
  13. QT中关于信号与槽机制的实现原理
  14. wacom数位板怎么调压感_怎么设置PS的画笔利用到数位板压感?
  15. OneNote PC端同步时遇到0×80004005
  16. cdr怎么抠图轮廓线条_CDR怎么抠图?CorelDRAW快速抠图方法
  17. win下brat安装与使用
  18. mongoDB数据库安装报错问题SocketException: Error connecting to和Shutting down
  19. Unbuntu 安装 TeamViewer14
  20. 安卓开发中的一些经验总结

热门文章

  1. 【转】numpy.random.randn()与rand()的区别
  2. Vue安装 devTool 时报错的解决办法
  3. Qcon2017实录|Service Mesh:下一代微服务
  4. 把Ubuntu打造成Mac Macbuntu
  5. iPhone位置跟踪器 For Windows版
  6. Exchange2003不能自动删除日志
  7. 小程序如何避免多次点击,重复触发事件
  8. Abp框架 Abp中使用Redis
  9. php 写博客教程,最近写了一个博客程序: QuickBlog PHP 开源的一文多发系统
  10. python三引号的作用_Python学习笔记(三)基本数据类型