1. #include<iostream>
  2. #include<iomanip>
  3. using namespace std;
  4.  
  5. const int X = ; //棋盘行数
  6. const int Y = ; //棋盘列数
  7. char p[X][Y]; //定义棋盘
  8. int m = ;//定义临时点,保存输入坐标
  9. int n = ;
  10.  
  11. void display() //输出棋盘
  12. {
  13. for (int i = ; i < X; i++)
  14. cout << setw() << setfill(' ') << i;
  15. cout << endl;
  16. for ( int i = ; i < Y; i++)
  17. {
  18. cout << setw() << setfill(' ') << i;
  19. for (int j = ; j < X; j++)
  20. cout << setw() << setfill(' ') << p[i][j];
  21. cout << endl;
  22. }
  23.  
  24. }
  25.  
  26. void black() //黑方落子
  27. {
  28. cout << "请黑方输入落子位置:\n"
  29. << "请输入落子的行数:";
  30. cin >> m;
  31. cout << "请输入落子的列数:";
  32. cin >> n;
  33. if (m <= || m >= X || n >= Y || n <= )
  34. {
  35. cout << "超出棋盘范围,请重新输入正确坐标!\n";
  36. black();
  37. }
  38. else if ((p[m][n] == ) || p[m][n] == )
  39. {
  40. cout << "该点已有棋子,请重新选取落子点!\n";
  41. black();
  42. }
  43. else
  44. p[m][n] = ; //黑方用1来表示
  45. system("cls");
  46. display();
  47. }
  48.  
  49. void red() //红方落子
  50. {
  51. cout << "请红方输入落子位置:\n"
  52. << "请输入落子的行数:";
  53. cin >> m;
  54. cout << "请输入落子的列数:";
  55. cin >> n;
  56. if (m >= X || m <= || n <= || n >= Y)
  57. {
  58. cout << "超出棋盘范围,请重新输入正确坐标!\n";
  59. red();
  60. }
  61. else if ((p[m][n] == ) || p[m][n] == )
  62. {
  63. cout << "该点已有棋子,请重新选取落子点!\n";
  64. red();
  65. }
  66. else
  67. p[m][n] = ; //红方用2来表示
  68. system("cls");
  69. display();
  70. }
  71.  
  72. int evalue() //只需要判断落子点为中心的九点“米”字是否连续即可
  73. {
  74. int k = , r = ;
  75. /*斜线判断*/
  76. for (k = ; k < X - ; k++) //两条,其中的p[k][r]!='-'是排除空子的情况
  77. {
  78. for (r = ; r < Y - ; r++)
  79. {
  80. if (p[k][r] != '-'&&p[k - ][r - ] == p[k][r]
  81. &&p[k - ][r - ] == p[k][r] && p[k + ][r + ] == p[k][r]
  82. &&p[k + ][r + ] == p[k][r])
  83. return ;
  84. else if (p[k][r] != '-'&&p[k + ][r - ] == p[k][r]
  85. && p[k + ][r - ] == p[k][r]
  86. && p[k - ][r + ] == p[k][r] && p[k - ][r + ] == p[k][r])
  87. return ;
  88. }
  89. }
  90. /*横线判断*/
  91. for (k = ; k < X; k++) //p[k][r]!='-'是排除空子的情况
  92. for (r = ; r < Y - ; r++)
  93. if (p[k][r] != '-'&&p[k][r - ] == p[k][r]
  94. && p[k][r - ] == p[k][r]
  95. && p[k][r + ] == p[k][r] && p[k][r + ] == p[k][r])
  96. return ;
  97. /*竖线判断*/
  98. for (k = ; k < X - ; k++) //p[k][r]!='-'是排除空子的情况
  99. for (r = ; r < Y; r++)
  100. if (p[k][r] != '-'&&p[k - ][r] == p[k][r]
  101. && p[k - ][r] == p[k][r]
  102. && p[k + ][r] == p[k][r] && p[k + ][r] == p[k][r])
  103. return ;
  104. return ;
  105. }
  106.  
  107. int main()
  108. {
  109. memset(p, '-', ); //初始化为‘-’
  110. cout << "欢迎使用简易双人对战五子棋游戏\n"
  111. << "五子棋棋谱如下:\n";
  112. display();
  113. while ()
  114. {
  115. red();
  116. if (evalue())
  117. {
  118. cout << "红方赢!\n";
  119. break;
  120. }
  121. black();
  122. if (evalue())
  123. {
  124. cout << "黑方赢!\n";
  125. break;
  126. }
  127. }
  128. return ;
  129. }

小知识解释:

setw和setfill函数(#include<iomanip>)

setw(n)使得输出结果右对齐,左边默认用空格填充,若设置了setfill,则用setfill里面的字符来填充。

如果输出选项少于n,则填充,否则不会填充,自然输出。相关代码解释见"C++小知识积累"

[收藏]C++简单五子棋的更多相关文章

  1. 简单五子棋,没有电脑AI

    刚学了C#委托,做了个五子棋练习,把前台绘制和后台逻辑分开,前台绘制方法用委托传给后台逻辑. 界面好简单... 先看类图 控制类控制整个游戏的逻辑,包括调用棋盘类的属性初始化棋盘.初始化两个棋手.轮流 ...

  2. 用Java写的简单五子棋游戏(原创五子连珠算法)

    源码jar包(已安装jdk环境可直接运行) 下载地址:http://download.csdn.net/detail/eguid_1/9532912 五子连珠算法为自创算法,对于五子棋该算法性能足以. ...

  3. C++的简单“五子棋”游戏,只是核心代码,资源代码未添加

    ChessBoard.h #ifndef __CHESS_BOARD_H__ #define __CHESS_BOARD_H__ #include "DataStruct.h" # ...

  4. Leo-io 的C语言实现简单五子棋游戏观后感

    源代码: /************************************************************** ** 文 件 名:wuziqi.cpp ** 功    能:扫 ...

  5. C++ 之 简单的五子棋AI程序

    本人是大一新生,寒假无聊,抱着试试看的心态(没有想到可以完成),写了C++的简单五子棋程序,开心.     下面是效果图:     一.首先讲讲大致思路.            五子棋实现的基础:  ...

  6. angular实现了一个简单demo,angular-weibo-favorites

    前面必须说一段 帮客户做了一个过渡期的项目,唯一的要求就是速度,我只是会点儿基础的php,于是就用tp帮客户做了这个项目.最近和客户架构沟通,后期想把项目重新做一下,就用现在最流行的技术,暂时想的使用 ...

  7. 基于redis分布式缓存实现

    Redis的复制功能是完全建立在之前我们讨论过的基 于内存快照的持久化策略基础上的,也就是说无论你的持久化策略选择的是什么,只要用到了Redis的复制功能,就一定会有内存快照发生,那么首先要注意你 的 ...

  8. Js仿弹框

    收藏一个简单实用的JS弹框,通过隐藏和显示div来实现,代码来自脚本之家! <html> <head> <title> LIGHTBOX EXAMPLE </ ...

  9. 涂鸦之作WanAndroid第三方APP

    Wan Android App Introduction 我的涂鸦之作,正如名字一样 这个一个WanAndroid 的第三方Android客户端,采用MVP架构+Kotlin语言+一大堆轮子.现在的代 ...

随机推荐

  1. CC2540串口输出调试功能

    可以用printf()做串口打印输出 这个功能非常简单,首先在工程管理下的preprocessor把串口打开HAL_UART=TRUE. 然后看我的npi.c文件,多了什么自己琢磨,懒点的就直接复制吧 ...

  2. linux下误删mysql的root用户,解决方法

    开始对liunx界面不熟悉,可能由于不小心,把root误删了,怎么办? 1. # killall mysqld    干掉所有mysql进程 2. # mysqld_safe --skip-grant ...

  3. Js中 md5 sha1 base64 加密

    js的3中加密方式: .sha1加密,加密性高 调用: var sha = hex_sha1(str); .base64加密 调用: var b = new Base64(); var str = b ...

  4. C#设计模式之建造者模式

    建造者模式可以将部件本身和它们的组装过程分开,关注如何一步步创建一个包含多个组成部分的复杂对象,用户只需要指定复杂对象的类型即可得到该对象,而无须知道其内部的具体构造细节. 建造者模式:将一个复杂对象 ...

  5. Linux Memcached安装以及PHP扩展安装

    一:安装libevent 由于memcached安装时,需要使用libevent类库,所以先安装libevent 1.下载 #wget   http://www.monkey.org/~provos/ ...

  6. python之I/O操作

    IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口. 比如你打开 ...

  7. Delphi在创建和使用DLL的时候如果使用到string,请引入ShareMem单元

    当使用了长字符串类型的参数.变量时,如string,要引用ShareMem. 虽然Delphi中的string功能很强大,但若是您编写的Dll文件要供其它编程语言调用时,最好使用PChar类型.如果您 ...

  8. .Net中Remoting通信机制

    Remoting通信机制 Remoting介绍 主要元素 通道类型 激活方式 对象定义 Remoting介绍 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式. 从微软的产品角度 ...

  9. Oracle跟踪文件

    1.跟踪文件分类 1)计划内的.由用户请求所产生的跟踪文件 2)计划外的.数据库服务器自动产生的跟踪文件 2.计划内的.由用户请求所产生的跟踪文件 2.1 生成 ①alter session set ...

  10. thinkphp验证是否登录并跳转

    CommonController.class.php <?php namespace Admin\Controller; use Think\Controller; class CommonCo ...