五子棋java源代码博客园_来来来,五子棋源代码
#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源代码博客园_来来来,五子棋源代码相关推荐
- java数据结构博客园_常见数据结构的Java实现
单链表的Java实现 首先参考wiki上的单链表说明,单链表每个节点包含数据和指向链表中下一个节点的指针或引用.然后看代码 import java.lang.*; public class Singl ...
- java list 博客园_Java集合系列(一)List集合
List的几种实现的区别与联系 List主要有ArrayList.LinkedList与Vector几种实现. ArrayList底层数据结构是数组, 增删慢.查询快; 线程不安全, 效率高; 不可以 ...
- python博客园_用Python向博客园发布新文章
最近在开发一个博客系统,经常把写的东西放在自己网站的博客上(之前写在Onenote),然后我在博客园也申请了一个博客,就有了同样一篇文章,我需要复制粘贴排版分别提交两次的情况.于是我就想能不能在我的网 ...
- python 面试题 博客园_常见的python面试问题1
雷锋网按:本文为 AI 研习社编译的技术博客,原文 Top 35 Python Interview Questions and Answers in 2018 ,作者 DataFlair Team. ...
- java 金融面试题目_面试题 - java金融 - 博客园
1,什么是线程安全 (参考书:https://book.douban.com/subject/10484692/) 不对共享变量进行修改 2,都说String是不可变的,为什么我可以这样做呢 Stri ...
- java orm框架 博客园_自己写ORM框架 DBUtils
ORM框架想必大家都比较熟知了,即对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同 ...
- java ee 博客园_JAVAEE 介绍
软件151 雷楷文 1. 为什么需要JavaEE 我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展.当业务需求发生变化的时候,对于程序员和美工都是一 ...
- java数据结构博客园_Java数据结构
一.线性数据结构 1.Java一维数组的创建 (1)预先定义数组的内存空间 int[] arr = new int[3]; // new int[3]是代表创建3个内存地址空间 // 地址空间的序号是 ...
- java 入门 博客园_javaweb入门
复习: css的常用样式: border background padding margin float position 定位top left确定div在页面中的位置,这两个值可以为负数. css+ ...
- java吧 博客系统_【Java】SpringMVC + Mybatis 实现的个人博客系统
[Java] 纯文本查看 复制代码DEBUG - Resolved location pattern [classpath:com/wp/dao/**/*.xml] to resources [fil ...
最新文章
- 图像复原的神经网络稀疏表示
- idea mybatis plugin插件,免费mybatis插件
- 设计模式-结构型-代理
- 在win8.1 64位系统+cocos2d-x2.2.3下搭建android交叉编译环境
- JAVA SSM框架+Redis 实现单点登录
- Java中complex怎么被调用_java中存在三种调用机制
- 舍弃Python,为什么知乎选用Go重构推荐系统?
- python 自定义函数语句_python 自定义函数
- 把word地址做链接在线打开word
- Spring(三)之自动装配、表达式
- TeXworks 设置成默认用XeLaTeX排版
- 尚硅谷Java Spring注解驱动开发视频教程
- QT中关于信号与槽机制的实现原理
- wacom数位板怎么调压感_怎么设置PS的画笔利用到数位板压感?
- OneNote PC端同步时遇到0×80004005
- cdr怎么抠图轮廓线条_CDR怎么抠图?CorelDRAW快速抠图方法
- win下brat安装与使用
- mongoDB数据库安装报错问题SocketException: Error connecting to和Shutting down
- Unbuntu 安装 TeamViewer14
- 安卓开发中的一些经验总结
热门文章
- 【转】numpy.random.randn()与rand()的区别
- Vue安装 devTool 时报错的解决办法
- Qcon2017实录|Service Mesh:下一代微服务
- 把Ubuntu打造成Mac Macbuntu
- iPhone位置跟踪器 For Windows版
- Exchange2003不能自动删除日志
- 小程序如何避免多次点击,重复触发事件
- Abp框架 Abp中使用Redis
- php 写博客教程,最近写了一个博客程序: QuickBlog PHP 开源的一文多发系统
- python三引号的作用_Python学习笔记(三)基本数据类型