[收藏]C++简单五子棋
#include<iostream>
#include<iomanip>
using namespace std; const int X = ; //棋盘行数
const int Y = ; //棋盘列数
char p[X][Y]; //定义棋盘
int m = ;//定义临时点,保存输入坐标
int n = ; void display() //输出棋盘
{
for (int i = ; i < X; i++)
cout << setw() << setfill(' ') << i;
cout << endl;
for ( int i = ; i < Y; i++)
{
cout << setw() << setfill(' ') << i;
for (int j = ; j < X; j++)
cout << setw() << setfill(' ') << p[i][j];
cout << endl;
} } void black() //黑方落子
{
cout << "请黑方输入落子位置:\n"
<< "请输入落子的行数:";
cin >> m;
cout << "请输入落子的列数:";
cin >> n;
if (m <= || m >= X || n >= Y || n <= )
{
cout << "超出棋盘范围,请重新输入正确坐标!\n";
black();
}
else if ((p[m][n] == ) || p[m][n] == )
{
cout << "该点已有棋子,请重新选取落子点!\n";
black();
}
else
p[m][n] = ; //黑方用1来表示
system("cls");
display();
} void red() //红方落子
{
cout << "请红方输入落子位置:\n"
<< "请输入落子的行数:";
cin >> m;
cout << "请输入落子的列数:";
cin >> n;
if (m >= X || m <= || n <= || n >= Y)
{
cout << "超出棋盘范围,请重新输入正确坐标!\n";
red();
}
else if ((p[m][n] == ) || p[m][n] == )
{
cout << "该点已有棋子,请重新选取落子点!\n";
red();
}
else
p[m][n] = ; //红方用2来表示
system("cls");
display();
} int evalue() //只需要判断落子点为中心的九点“米”字是否连续即可
{
int k = , r = ;
/*斜线判断*/
for (k = ; k < X - ; k++) //两条,其中的p[k][r]!='-'是排除空子的情况
{
for (r = ; r < Y - ; r++)
{
if (p[k][r] != '-'&&p[k - ][r - ] == p[k][r]
&&p[k - ][r - ] == p[k][r] && p[k + ][r + ] == p[k][r]
&&p[k + ][r + ] == p[k][r])
return ;
else if (p[k][r] != '-'&&p[k + ][r - ] == p[k][r]
&& p[k + ][r - ] == p[k][r]
&& p[k - ][r + ] == p[k][r] && p[k - ][r + ] == p[k][r])
return ;
}
}
/*横线判断*/
for (k = ; k < X; k++) //p[k][r]!='-'是排除空子的情况
for (r = ; r < Y - ; r++)
if (p[k][r] != '-'&&p[k][r - ] == p[k][r]
&& p[k][r - ] == p[k][r]
&& p[k][r + ] == p[k][r] && p[k][r + ] == p[k][r])
return ;
/*竖线判断*/
for (k = ; k < X - ; k++) //p[k][r]!='-'是排除空子的情况
for (r = ; r < Y; r++)
if (p[k][r] != '-'&&p[k - ][r] == p[k][r]
&& p[k - ][r] == p[k][r]
&& p[k + ][r] == p[k][r] && p[k + ][r] == p[k][r])
return ;
return ;
} int main()
{
memset(p, '-', ); //初始化为‘-’
cout << "欢迎使用简易双人对战五子棋游戏\n"
<< "五子棋棋谱如下:\n";
display();
while ()
{
red();
if (evalue())
{
cout << "红方赢!\n";
break;
}
black();
if (evalue())
{
cout << "黑方赢!\n";
break;
}
}
return ;
}
小知识解释:
setw和setfill函数(#include<iomanip>)
setw(n)使得输出结果右对齐,左边默认用空格填充,若设置了setfill,则用setfill里面的字符来填充。
如果输出选项少于n,则填充,否则不会填充,自然输出。相关代码解释见"C++小知识积累"
[收藏]C++简单五子棋的更多相关文章
- 简单五子棋,没有电脑AI
刚学了C#委托,做了个五子棋练习,把前台绘制和后台逻辑分开,前台绘制方法用委托传给后台逻辑. 界面好简单... 先看类图 控制类控制整个游戏的逻辑,包括调用棋盘类的属性初始化棋盘.初始化两个棋手.轮流 ...
- 用Java写的简单五子棋游戏(原创五子连珠算法)
源码jar包(已安装jdk环境可直接运行) 下载地址:http://download.csdn.net/detail/eguid_1/9532912 五子连珠算法为自创算法,对于五子棋该算法性能足以. ...
- C++的简单“五子棋”游戏,只是核心代码,资源代码未添加
ChessBoard.h #ifndef __CHESS_BOARD_H__ #define __CHESS_BOARD_H__ #include "DataStruct.h" # ...
- Leo-io 的C语言实现简单五子棋游戏观后感
源代码: /************************************************************** ** 文 件 名:wuziqi.cpp ** 功 能:扫 ...
- C++ 之 简单的五子棋AI程序
本人是大一新生,寒假无聊,抱着试试看的心态(没有想到可以完成),写了C++的简单五子棋程序,开心. 下面是效果图: 一.首先讲讲大致思路. 五子棋实现的基础: ...
- angular实现了一个简单demo,angular-weibo-favorites
前面必须说一段 帮客户做了一个过渡期的项目,唯一的要求就是速度,我只是会点儿基础的php,于是就用tp帮客户做了这个项目.最近和客户架构沟通,后期想把项目重新做一下,就用现在最流行的技术,暂时想的使用 ...
- 基于redis分布式缓存实现
Redis的复制功能是完全建立在之前我们讨论过的基 于内存快照的持久化策略基础上的,也就是说无论你的持久化策略选择的是什么,只要用到了Redis的复制功能,就一定会有内存快照发生,那么首先要注意你 的 ...
- Js仿弹框
收藏一个简单实用的JS弹框,通过隐藏和显示div来实现,代码来自脚本之家! <html> <head> <title> LIGHTBOX EXAMPLE </ ...
- 涂鸦之作WanAndroid第三方APP
Wan Android App Introduction 我的涂鸦之作,正如名字一样 这个一个WanAndroid 的第三方Android客户端,采用MVP架构+Kotlin语言+一大堆轮子.现在的代 ...
随机推荐
- windows下nginx安装、配置与使用(转载)
目前国内各大门户网站已经部署了Nginx,如新浪.网易.腾讯等:国内几个重要的视频分享网站也部署了Nginx,如六房间.酷6等.新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx ...
- toArray(),toJson(),hidden([ ]),visible([ ])
toArray() 转换为数组,hidden()不输出的字段 public function index(){ $user = model('User'); $data = $user::)-> ...
- 移动端下拉刷新、加载更多插件dropload.js(基于jQuery/Zepto)[转]
使用方法 引用css和js <link rel="stylesheet" href="../dist/dropload.min.css"> < ...
- html内的空格占位
写html的时候有时因为字数不够会根据字段长度添加多个空格,但是在html中添加空格是没有用的,所以使用空格的代替符号有: 不断行的空白(1个字符宽度) 半个空白(1个字符宽度) 一个空白 ...
- 3.2 配置构建Angular应用——简单的笔记存储应用
本节我们会通过构建一个简单的笔记存储应用(可以载入并修改一组简单的笔记)来学习如何应用Angular的特性.这个应用用到的特性有: 在JSON文件中存储笔记 展示.创建.修改和删除笔记 在笔记中使用M ...
- Delphi之通过代码示例学习XML解析、StringReplace的用法
这个程序可以用于解析任何合法的XML字符串. 首先是看一下程序的运行效果: 以解析这样一个XML的字符串为例: <?xml version="1.0" encoding=&q ...
- Azure Site to Site VPN 配置手册
目录 1 Azure Site to Site VPN配置前的准备 1 1.1 设备兼容 1 1.2 网络要求和注意事项 1 2 配置Azure site t ...
- winform快速开发平台->让有限的资源创造无限的价值!
最近一直在维护一套自己的快速开发平台. 主要应对针对C/S架构下的项目.然而对winform这快,还真没有看到过相对好的快速开发平台, 何为快速,在博客园逛了了好久, 预览了很多通用权限管理系统. 确 ...
- jq size()与length的区别
size()跟length同样的功能,都是取元素的个数,那么他们的区别是什么呢,一个是方法一个是属性? 从图中可以看到size()方法比length慢38%,原因何在? size: function ...
- Content Negotiation in ASP.NET Web API
本文描述Web API实现内容协商(content negotiation). The HTTP specification (RFC 2616) defines content negotiatio ...