搜索热词

三子棋、五子棋之类的游戏,非常简单,对于初学者来说是一个不错的练手的小项目,以前用C语言写过三子棋游戏。最近在看C++,所以就想到在三子棋的基础上利用C++语言实现五子棋游戏。

主要功能:

有3个模式:0表示退出、1表示电脑vs玩家、2表示玩家vs玩家。

当一局完成之后选择'y'则又会进入选择模式。

源代码(VS2013编译器下写的):

#include

#include

#include

#include

using namespace std;

const int N=15; //15*15的棋盘

const char ChessBoardflag = ' '; //棋盘标志

const char flag1='o'; //玩家1或电脑的棋子标志

const char flag2='X'; //玩家2的棋子标志

typedef struct Coordinate //坐标类

{

int x; //代表行

int y; //代表列

}Coordinate;

class GoBang //五子棋类

{

public:

GoBang() //初始化

{

InitChessBoard();

}

void Play() //下棋

{

Coordinate Pos1; // 玩家1或电脑

Coordinate Pos2; //玩家2

int n = 0;

while (1)

{

int mode = ChoiceMode();

while (1)

{

if (mode == 1) //电脑vs玩家

{

ComputerChess(Pos1,flag1); // 电脑下棋

if (GetVictory(Pos1,flag1) == 1) //0表示电脑,真表示获胜

break;

PlayChess(Pos2,2,flag2); //玩家2下棋

if (GetVictory(Pos2,flag2)) //2表示玩家2

break;

}

else //玩家1vs玩家2

{

PlayChess(Pos1,1,flag1); // 玩家1下棋

if (GetVictory(Pos1,flag1)) //1表示玩家1

break;

PlayChess(Pos2,flag2)) //2表示玩家2

break;

}

}

cout << "***再来一局***" << endl;

cout << "y or n :";

char c = 'y';

cin >> c;

if (c == 'n')

break;

}

}

protected:

int ChoiceMode() //选择模式

{

int i = 0;

system("cls"); //系统调用,清屏

InitChessBoard(); //重新初始化棋盘

cout << "***0、退出 1、电脑vs玩家 2、玩家vs玩家***" << endl;

while (1)

{

cout << "请选择:";

cin >> i;

if (i == 0) //选择0退出

exit(1);

if (i == 1 || i == 2)

return i;

cout << "输入不合法" << endl;

}

}

void InitChessBoard() //初始化棋盘

{

for (int i = 0; i < N + 1; ++i)

{

for (int j = 0; j < N + 1; ++j)

{

_ChessBoard[i][j] = ChessBoardflag;

}

}

}

void PrintChessBoard() //打印棋盘,这个函数可以自己调整

{

system("cls"); //系统调用,清空屏幕

for (int i = 0; i < N+1; ++i)

{

for (int j = 0; j < N+1; ++j)

{

if (i == 0) //打印列数字

{

if (j!=0)

printf("%d ",j);

else

printf(" ");

}

else if (j == 0) //打印行数字

printf("%2d ",i);

else

{

if (i < N+1)

{

printf("%c |",_ChessBoard[i][j]);

}

}

}

cout << endl;

cout << " ";

for (int m = 0; m < N; m++)

{

printf("--|");

}

cout << endl;

}

}

void PlayChess(Coordinate& pos,int player,int flag) //玩家下棋

{

PrintChessBoard(); //打印棋盘

while (1)

{

printf("玩家%d输入坐标:",player);

cin >> pos.x >> pos.y;

if (JudgeValue(pos) == 1) //坐标合法

break;

cout << "坐标不合法,重新输入" << endl;

}

_ChessBoard[pos.x][pos.y] = flag;

}

void ComputerChess(Coordinate& pos,char flag) //电脑下棋

{

PrintChessBoard(); //打印棋盘

int x = 0;

int y = 0;

while (1)

{

x = (rand() % N) + 1; //产生1~N的随机数

srand((unsigned int) time(NULL));

y = (rand() % N) + 1; //产生1~N的随机数

srand((unsigned int) time(NULL));

if (_ChessBoard[x][y] == ChessBoardflag) //如果这个位置是空的,也就是没有棋子

break;

}

pos.x = x;

pos.y = y;

_ChessBoard[pos.x][pos.y] = flag;

}

int JudgeValue(const Coordinate& pos) //判断输入坐标是不是合法

{

if (pos.x > 0 && pos.x <= N&&pos.y > 0 && pos.y <= N)

{

if (_ChessBoard[pos.x][pos.y] == ChessBoardflag)

{

return 1; //合法

}

}

return 0; //非法

}

int JudgeVictory(Coordinate pos,char flag) //判断有没有人胜负(底层判断)

{

int begin = 0;

int end = 0;

int begin1 = 0;

int end1 = 0;

//判断行是否满足条件

(pos.y - 4) > 0 ? begin = (pos.y - 4) : begin = 1;

(pos.y + 4) >N ? end = N : end = (pos.y + 4);

for (int i = pos.x,j = begin; j + 4 <= end; j++)

{

if (_ChessBoard[i][j] == flag&&_ChessBoard[i][j + 1] == flag&&

_ChessBoard[i][j + 2] == flag&&_ChessBoard[i][j + 3] == flag&&

_ChessBoard[i][j + 4] == flag)

return 1;

}

//判断列是否满足条件

(pos.x - 4) > 0 ? begin = (pos.x - 4) : begin = 1;

(pos.x + 4) > N ? end = N : end = (pos.x + 4);

for (int j = pos.y,i = begin; i + 4 <= end; i++)

{

if (_ChessBoard[i][j] == flag&&_ChessBoard[i + 1][j] == flag&&

_ChessBoard[i + 2][j] == flag&&_ChessBoard[i + 3][j] == flag&&

_ChessBoard[i + 4][j] == flag)

return 1;

}

int len = 0;

//判断主对角线是否满足条件

pos.x > pos.y ? len = pos.y - 1 : len = pos.x - 1;

if (len > 4)

len = 4;

begin = pos.x - len; //横坐标的起始位置

begin1 = pos.y - len; //纵坐标的起始位置

pos.x > pos.y ? len = (N - pos.x) : len = (N - pos.y);

if (len>4)

len = 4;

end = pos.x + len; //横坐标的结束位置

end1 = pos.y + len; //纵坐标的结束位置

for (int i = begin,j = begin1; (i + 4 <= end) && (j + 4 <= end1); ++i,++j)

{

if (_ChessBoard[i][j] == flag&&_ChessBoard[i + 1][j + 1] == flag&&

_ChessBoard[i + 2][j + 2] == flag&&_ChessBoard[i + 3][j + 3] == flag&&

_ChessBoard[i + 4][j + 4] == flag)

return 1;

}

//判断副对角线是否满足条件

(pos.x - 1) >(N - pos.y) ? len = (N - pos.y) : len = pos.x - 1;

if (len > 4)

len = 4;

begin = pos.x - len; //横坐标的起始位置

begin1 = pos.y + len; //纵坐标的起始位置

(N - pos.x) > (pos.y - 1) ? len = (pos.y - 1) : len = (N - pos.x);

if (len>4)

len = 4;

end = pos.x + len; //横坐标的结束位置

end1 = pos.y - len; //纵坐标的结束位置

for (int i = begin,j = begin1; (i + 4 <= end) && (j - 4 >= end1); ++i,--j)

{

if (_ChessBoard[i][j] == flag&&_ChessBoard[i + 1][j - 1] == flag&&

_ChessBoard[i + 2][j - 2] == flag&&_ChessBoard[i + 3][j - 3] == flag&&

_ChessBoard[i + 4][j - 4] == flag)

return 1;

}

for (int i = 1; i < N + 1; ++i) //棋盘有没有下满

{

for (int j =1; j < N + 1; ++j)

{

if (_ChessBoard[i][j] == ChessBoardflag)

return 0; //0表示棋盘没满

}

}

return -1; //和棋

}

bool GetVictory(Coordinate& pos,int flag) //对JudgeVictory的一层封装,得到具体那个玩家获胜

{

int n = JudgeVictory(pos,flag); //判断有没有人获胜

if (n != 0) //有人获胜,0表示没有人获胜

{

PrintChessBoard();

if (n == 1) //有玩家赢棋

{

if (player == 0) //0表示电脑获胜,1表示玩家1,2表示玩家2

printf("***电脑获胜***\n");

else

printf("***恭喜玩家%d获胜***\n",player);

}

else

printf("***双方和棋***\n");

return true; //已经有人获胜

}

return false; //没有人获胜

}

private:

char _ChessBoard[N+1][N+1];

};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是编程之家为你收集整理的C++实现五子棋游戏全部内容,希望文章能够帮你解决C++实现五子棋游戏所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

c++语言设计五子棋游戏,C++实现五子棋游戏相关推荐

  1. HTML五子棋游戏论文,五子棋毕业论文-HTML开发五子棋的原型设计.doc

    毕业设计论文 院校:广州城建职业学院 院系:信息工程学院 班级:15软件五班 姓名:黄智彬 学号:1504220518 题目:h5的五子棋 指导老师:俞新凯 日期:2017年11月20 摘要 随着IT ...

  2. easyx游戏编程:五子棋(C语言游戏开发)

    easyx游戏编程:五子棋(C语言游戏开发) 五子棋: 本游戏用到了图形界面库graphics.h,图形界面库下载安装: 下载链接: https://easyx.cn/downloads/. 下方有源 ...

  3. 【C#+Socker+SQL Server】实现可多人联机和对话的五子棋游戏 五:五子棋大厅窗体设计(附源码和资源)

    需要源码请点赞关注收藏后评论区留言私信~~~ 一.五子棋大厅窗体概述 五子棋大厅窗体主要是在游戏者进入指定区域的指定 房间后,在用户信息列表框中显示当前进入房间的所有用户信息,当单击指定位置时,在座位 ...

  4. Win32游戏制作之---五子棋的简单设计

    想必每个人都玩过五子棋,其实对于我而言,五子棋是小时候玩的最多的棋类游戏,当然小时候也爱玩象棋以及国际象棋之类的,不过由于五子棋比较简单,所以就先实现一个简单的人机五子棋.最近我就在想如今学会了一点编 ...

  5. C语言大一课设——不会五子棋

    大一课程设计--不会五子棋 在编写此次课程设计后,我了解到其实C语言不但可以在黑白色的命令提示符界面进行运行,还可以有很美观的窗口界面.课程设计中我完成了自学EasyX这一图形库内各种函数的使用,不仅 ...

  6. 【C语言实现】玩家互战五子棋(具体步骤和代码)

    文章目录 前言 一.问题描述 二.基本流程 三.步骤 1.构建程序主体框架以及菜单的实现 2.良好的宏定义增强代码可读性 3.构建游戏入口PlayersGame()函数 4.实现打印棋盘函数 5.实现 ...

  7. C语言扫地雷游戏的题目简介,C语言程序设计课程设计(论文)-扫地雷游戏.doc...

    C语言程序设计课程设计(论文)-扫地雷游戏 辽 宁 工 业 大 学 C语言程序设计 课程设计(论文) 题目: 扫地雷游戏 院(系): 软件学院 专业班级: 电子商务091班 学 号: 学生姓名: 指导 ...

  8. Python百日百行代码挑战-day8,day9,day10,游戏实战系列-五子棋

    Python百日百行代码挑战-day8,day9,day10,游戏实战系列-五子棋 写在前面 需要用到的工具包和参考 游戏设定 初始化 切换下棋方 判断五子连珠(核心) 鼠标点击流程事件 成品展示 打 ...

  9. 三星游戏java ball_JavaBallGame 使用 语言设计的弹球游戏,可以学习 编写小 的方法。 Program 238万源代码下载- www.pudn.com...

    文件名称: JavaBallGame下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 55 KB 上传时间: 2014-03-18 下载次数: 0 提 供 者: p ...

  10. 用C++实现五子棋人机对战小游戏

    如何用C++实现五子棋小游戏呢? 五子棋可谓是家喻户晓了,在科技如此发达的今天,我们能不能用电脑实现五子棋人机对弈呢? 答案当然是可以的 首先,思考一下我们需要完成哪些步骤 1.打印棋盘(使用二维数组 ...

最新文章

  1. R绘制QQ图并解读QQ图
  2. Linux属于下面哪一种软件,【单选题】下面软件中属于自由软件开放源码的是( )。 A. Unix B. Linux C. Mi...
  3. CentOS装LAMP服务器(Apache2+PHP5+MySQL)
  4. golang中的strings.LastIndexAny
  5. 香帅的北大金融学课笔记11 -- 资产配置
  6. apm java_非Java专家的APM:什么泄漏?
  7. 维吉尼亚密码和一次性密码本_密码学中的一次性密码
  8. php edm 系统,edm.php
  9. 马斯克称面临巨大通胀压力 暗示特斯拉可能涨价
  10. krpano JS动态切换旋转角
  11. 七年级画图计算机教案,信息技术画图软件学习教案
  12. 可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合
  13. 显示一个立方体的一点透视投影图;(用数组存放正方体的各顶点坐标)。
  14. EndNote简明教程(三分钟上手EndNote)
  15. nacos is starting with cluster
  16. linux 析构函数地址获取_c语言中有析构函数吗
  17. LATTICE FPGA MICO32 uCOS开发流程
  18. 抖音拍摄脚本怎么写,掌握这几点快速拍摄爆款视频丨国仁网络资讯
  19. 《Editing Text in the wild》学习笔记
  20. 熊孩子乱敲键盘攻破linux桌面,“熊孩子”乱敲键盘攻破了Linux桌面,怎么做到的?...

热门文章

  1. WordPress网站数据库报错 Error establishing a database connection
  2. C#进阶系列——使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)
  3. 考研复试(控制工程专硕)及大学本科(物联网工程)知识点回顾(三)——模拟电子技术
  4. # 杂谈偶感 × 基于QFD方法的质量屋构建
  5. FXCG: 日内交易与波段交易有什么区别
  6. npm/package.json/package-lock.json文件
  7. 巧用RoaringBitMap处理海量数据内存diff问题
  8. visual studio C++冒号:与双冒号::的使用说明
  9. 关于使用火车采集器采集分页URL不变化网站
  10. bzoj 4518: [Sdoi2016]征途