//全部代码12 .26.2017

#include<iostream>
#include<stdlib.h>
#include<iomanip>     //格式化输出
using namespace std;
const int N = 9;       //修饰N为常量
static int A=0, B=0;
char command;

class jiemian
{
public:

void Jiemainbuzhi();
void initBoard();
void Qijubuzhi();
void Chesspainter(int x,int y);
int check(int x, int y);
int checkcommand(int x, int y);
void  chessicont(int x);
int Checkzuobiao(int i, int j, char flag);
int x, y;    //设置路障
protected:

bool flag = 0;      //下棋次数计数
char  chessBord[N + 1][N + 1];
};

void jiemian::chessicont(int x)
{
if (x == 1)
A++;
if (x == 2)
B++;
cout << "A : B —" << A << ":" << B << '\t';
}

void jiemian::Jiemainbuzhi()
{
cout << "————五子棋游戏————ZXL" << endl;
cout << "################################" << endl;
cout << "#     1.进入游戏   E           # " << endl;
cout << "#     2.退出游戏   0 0         # " << endl;
cout << "#     3.选择关卡   C           # " << endl;        
cout << "################################" << endl;
}

void jiemian::Qijubuzhi()
{
cout << "plaese entry — x — y " << endl;
cout << setw(3) << setfill(' ') << left << 0;
for (int i = 1; i < N + 1; i++) {
cout << setw(6) << setfill(' ') << right << i;
}
cout << endl;
cout << "   |";
for (int i = 1; i < N + 1; i++) {
cout << "-----|";
}
cout << endl;
for (int i = 1; i < N + 1; i++) {
for (int j = 0; j < N + 1; j++) {
if (j == 0) {
cout << setw(3) << setfill(' ') << left << i << '|';
}
else {
cout << "  " << chessBord[i][j] << "  |";
}
}
cout << endl;
cout << "   |";
for (int i = 1; i < N + 1; i++) {
cout << "-----|";
}
cout << endl;
}
}

void jiemian::initBoard()
{
for (int i = 0; i < N + 1; i++)
for (int j = 0; j < N + 1; j++)
{
chessBord[i][j] = ' ';     //初始化
}
}

void  jiemian::Chesspainter(int x, int y)    //下棋
{

if (-1 == check(x, y))
{
cout << "坐标请输入棋盘之间的数"<<endl;
}
else if (0 == check(x, y))
{
cout << "坐标已经输入过,请不要重复输入" << endl;
}
else
{
system("CLS");
if (flag == 0)
{
chessBord[x][y] = 'x';
cout << "Palyer " << "A with 'x' IS " << "X ," << x << "Y ," << y << endl;
flag = 1;
}
else if (flag == 1)
{
chessBord[x][y] = 'o';
cout << "Palyer " << "B with 'o' IS " << "X ," << x << "Y ," << y << endl;
flag = 0;
}
Qijubuzhi();
}
}

int  jiemian::checkcommand(int x,int y)    //缺少容错机制
{
if(0==x&&0==y)
{
return 1;
}
else
return 0;
}

int  jiemian::check(int x, int y)
{
if (x > N + 1 || y > N + 1 || x < 1 || y < 1)
{
return -1;
}
if (chessBord[x][y] != ' ')
{
return 0;
}
return 1;
}

int  jiemian::Checkzuobiao(int i,int j ,char flag)  //入参坐标和选手的旗子
{
int x = i, y = j;
int begin = 0;  
int end = 0;

int begin1 = 0;
int end1 = 0;

//判断列是否满足条件  hao
(i - 4) > 0 ? begin = i - 4 : begin = 1; //已经将列减4 或者从边界算
(i + 4) < N ? end = N : end = (i + 4);

for (j, i = begin; i + 4 <= end; i++)
{
if (chessBord[i][j] == flag&&chessBord[i + 1][j] == flag&&chessBord[i + 2][j] == flag&&chessBord[i + 3][j] == flag&&chessBord[i + 4][j] == flag)
{
return 1;
}
}

//判断行是否满足条件 hao
i = x, j = y;
(j - 4) > 0 ? begin = j - 4 : begin = 1;  //已经将横坐标减4
(j + 4) < N ? end = N : end = (j + 4); //如果末尾大于N则,从N算最后一个

for (i, j = begin; j + 4 <= end; j++)
{
if (chessBord[i][j] == flag&&chessBord[i][j + 1] == flag&&chessBord[i][j + 2] == flag&&chessBord[i][j + 3] == flag&&chessBord[i][j + 4] == flag)
{
return 1;
}
}

//判断正对角线是否满足 HAO
int len = 0;
i = x, j = y;
i >j ? len = j - 1 : len = i - 1;   //判断i>j的作用,按照离边距小的坐标减做初始值
if (len > 4)
len = 4;
begin = i - len;       //横坐标的起始位置
begin1 = j - len;      //纵坐标,,因为是正斜边所以两边要减相同数

i > j ? len = (N - i) : len = (N - j);   //结束坐标也要按照距离边界近的点去减
if (len>4)
len = 4;
end= i + len;       //横坐标的结束位置
end1 = j + len;      //纵坐标的结束位置

for (int i = begin, j = begin1; (i + 4 < end) && (j + 4 < end1); i++, j++)
{
if (chessBord[i][j] == flag&&chessBord[i + 1][j + 1] == flag&&chessBord[i + 2][j + 2] == flag&&chessBord[i + 3][j + 3] == flag&&chessBord[i + 4][j + 4] == flag)
{
return 1;
}
}

//判断负对角线是否满足 HAO
i = x, j = y;
(i - 1) >(N - j) ? len = (N - j) : len = i - 1;  //判断负对角线坐标的位置是否在上下减小的距离
if (len > 4)
len = 4;
begin = i - len;       //横坐标的起始位置
begin1 = j + len;      //纵坐标的起始位置

(N - i) > (j - 1) ? len = (j - 1) : len = (N - i);
if (len>4)
len = 4;
end = i + len;       //横坐标的结束位置
end1 = j - len;      //纵坐标的结束位置

for (int i = begin, j = begin1; (i + 4 < end) && (j - 4 > end1); i++, j--)
{
if (chessBord[i][j] == flag&&chessBord[i + 1][j - 1] == flag&&chessBord[i + 2][j - 2] == flag&&chessBord[i + 3][j - 3] == flag&&chessBord[i + 4][j - 4] == flag)
{
return 1;
}
}

//判断棋盘是否下满 .ZUIHOU
for (int z = 1; z < N + 1; z++)           //棋盘有没有下满
{
for (int l = 1; l < N + 1; l++)
{
if (chessBord[z][l] == ' ')
return -1;      //说明棋盘中还有空格

}
}

return 0;
}

int main()
{
jiemian obj;
obj.Jiemainbuzhi();
while(1)
{
int x=0, y=0;
char flager;
cout << "请输入命令 —";
cin >> command;
if ('E' == command)
{
system("CLS");
obj.initBoard();
obj.Qijubuzhi();
while ('E' == command)
{
cout << "请输入坐标";
cin >> x >> y;
if (1 == obj.checkcommand(x, y))
{
break;
}
obj.Chesspainter(x, y);

if (0 == obj.Checkzuobiao(x, y, ' '))     //判断棋盘是否下满HAO
{
cout << "DRAW: againt ?  Y  OR  N  " << endl;
cin >> flager;
if (flager == 'N')
{
break;
}
else
{
system("CLS");
obj.initBoard();
}
}
if (1== obj.Checkzuobiao(x, y,'x')|| 1== obj.Checkzuobiao(x, y, 'o'))
{
if (1 == obj.Checkzuobiao(x, y, 'x'))
{
obj.chessicont(1);     //显示比分
cout << "   A IS WIN" << endl;
}
    if (1 == obj.Checkzuobiao(x, y, 'o'))
{
obj.chessicont(2);
cout << "   B IS WIN" << endl;
}
cout << "againt ?  Y  OR  N  " << endl;
cin >> flager;
if (flager == 'N')
{
break;
}
else
{
obj.initBoard();
}
}
}
}
else if ('C' == command)
{
system("CLS");
cout << "please waitting___" << endl;
}
else
{
system("CLS");
cout << "请输入正确的命令" << endl;
obj.Jiemainbuzhi();
}

}
}

C++实现简单的五子棋程序相关推荐

  1. 人工智能实现简单的五子棋程序

    我这个程序在QQ五子棋上实验了一下,结果是黑棋先手全胜,白棋后手的胜率却惨不忍睹,原因有下: 1.五子棋的先手是有优势的,所以职业比赛里都会有禁手来实现公平 2.水平有限,对局面的评估只有一小部分 主 ...

  2. 简单的五子棋程序(可悔棋版和普通版)

    //普通版 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <wind ...

  3. vc6.0c语言五子棋程序,哪位大虾可以给我个VC6.0下用C语言编的五子棋,要有流程图...

    五子棋 代码 VC6.0 qq_29018467112015-06-14 五子棋 (用C语言编写五子棋游戏) rannianzhixia170392017-04-20 基于easyx图形的五子棋游戏 ...

  4. java人际对战五子棋_系统框图如下 java实现五子棋程序 可以实现人人对战 人机对战 简单功能 悔棋 认输...

    展开全部 一.实验题目 五子棋游戏e69da5e6ba9062616964757a686964616f31333365633835. 二.问题分析 五子棋是双人博弈棋类益智游戏,由围棋演变而来,属纯策 ...

  5. 用c语言做一个五子棋程序,C语言制作简单五子棋游戏

    原标题:C语言制作简单五子棋游戏 C语言制作简单的五子棋游戏 学习C语言的人很多,但是用C语言很少,而用来为自己所用,来做游戏的人就更少了,很多人都是跟着学校学习,学校讲到哪就坐到哪,但是以后却还是不 ...

  6. 【C语言】实现简单的五子棋

    用c语言实现简单的五子棋 (2019年10月文档) ps:那时候刚刚学会用走迷宫就自己从零开始实现了下五子棋,这里下棋的思路现在想起来也特别新奇,并不是简单的输入坐标下棋,我一开始就琢磨出了wasd去 ...

  7. 网络版五子棋程序的开发

    前言 这是小的一个五子棋联网对战的小程序,可以实行网络对战. 我们的开发过程是了解五子棋的运行原理,然后开发网络部分进行实现. 开发工具 开发语言:Java 开发工具:Eclipse Neon 开发平 ...

  8. 简单五子棋游戏c语言简单,C语言制作简单的五子棋游戏

    原标题:C语言制作简单的五子棋游戏 C语言制作简单的五子棋游戏 学习C语言的人很多,但是用C语言很少,而用来为自己所用,来做游戏的人就更少了,很多人都是跟着学校学习,学校讲到哪就坐到哪,但是以后却还是 ...

  9. 基于Java实现五子棋程序

    五子棋程序实现起来逻辑不复杂,五子棋的规则也比较简单,只要5个相同颜色棋子连成一条线就说明玩家获胜. 因此实现五子棋程序主要有两个问题去解决. 1 五子棋的界面如何实现. 2 给出一个棋盘如何判断有玩 ...

最新文章

  1. MySQL共有data和redo的后果
  2. VUE-生命周期钩子
  3. pg数据库生成随机时间_如何测试数据库查询优化器
  4. linux的开机网络设置
  5. 逆向查找_CTFer成长之路--一道数独逆向题目解题过程(算法分析、查找线索)...
  6. 【iOS XMPP】使用XMPPFramewok(二):用户登录
  7. django--通过model拿到字段对象
  8. (pytorch-深度学习系列)pytorch避免过拟合-权重衰减的实现-学习笔记
  9. 图像处理自相关函数c语言,图像处理实验书.docx
  10. 配置tomcat远程debug
  11. 偶师傅说过的很有意思的话
  12. 大型集团法务工作中的电子签章应用场景
  13. Python 欧卡2导入音乐 批量转ogg格式
  14. NXP MC9S12中断寄存器配置说明
  15. ——黑马程序员——OC中Foundation下NSFileManager的使用
  16. Markdown学习指南
  17. ISP (互联网服务提供商)
  18. 一文看懂一般性采购、战略采购与项目型采购的区别
  19. mysql显示中文乱码问题解决办法(部分情况下适用)
  20. HoloLens2通过Wifi部署应用到HoloLens2设备上

热门文章

  1. 分布表示(distributional representation)与分布式表示(distributed representation)
  2. cesium CLAMP_TO_GROUND 报错 Cannot read property ‘globe‘ of undefined
  3. sci论文图排版技巧分享
  4. time秒和年月日时分秒的转化
  5. 百度主动推送怎么用?
  6. 跨交换机实现VLAN 入门实验
  7. revit插件建模助手怎么快速标注轴网距离
  8. JAVA的3DES加密代码转成oc_iOS之DES加密
  9. 【Spark GraphX】社交网图分析
  10. 软件构造第11次课复习——工厂模式