c++五子棋人机版

news/2024/10/17 20:23:49/

五子棋游戏人机版:

            电脑实现了阻挡对方连续的棋子

 

#include<iostream>
#include<iomanip>
using namespace std;
#include<stdlib.h>
#include<time.h>
/*class PerPlayer
{
public:int m;int n;int person();
};
PerPlayer pp;class CompPlayer
{
private:int k;int r;
public:int computer();
};
CompPlayer cp;
*/
const int X = 21; //棋盘行数
const int Y = 21; //棋盘列数
char p[X][Y];  //定义棋盘
int m=0;
int n=0;void display()  //输出棋盘
{for(int j=0; j<Y; j++)cout<<setw(3)<<setfill(' ')<<j;cout<<endl;for(int i=1; i<Y; i++){cout<<setw(3)<<setfill(' ')<<i;//setw(x)设置输出字符位宽for(int j=1;j<X;j++)cout<<setw(3)<<setfill(' ')<<p[i][j];//setfill是设置填充填充字符cout<<endl;}}void reclear()
{system("cls");display();
}int person()
{cout<<"请输入落子位置:\n"<<"请输入落子的行数:";cin>>m;cout<<"请输入落子的列数:";cin>>n;if(m>=X||m<=0||n<=0||n>=Y){cout<<"超出棋盘范围,请重新输入正确坐标!\n";person();return 0;//防止一步多次清屏}else if((p[m][n]==80)||p[m][n]==67){cout<<"该点已有棋子,请重新选取落子点!\n";person();return 0;}elsep[m][n]=80;reclear();return 1;
}int computer()
{int k=0;int r=0;for(k=3;k<X-2;k++){for(r=3;r<Y-2;r++){if(p[k][r]==80&&p[k-1][r-1]==p[k][r]&&p[k+1][r+1]==p[k][r]){if(p[k-2][r-2]=='-'||p[k+2][r+2]=='-'){if(p[k-2][r-2]=='-'){p[k-2][r-2]=67;reclear();return 0;}else{p[k+2][r+2]=67;reclear();return 0;}}else if(p[k-2][r-2]==80||p[k+2][r+2]==80){if(p[k+2][r+2]==80){p[k+3][r+3]=67;reclear();return 0;}else{p[k-3][r-3]=67;reclear();return 0;}}}else if(p[k][r]!='-'&&p[k+1][r-1]==p[k][r]&&p[k-1][r+1]==p[k][r]){if(p[k+2][r-2]=='-'||p[k-2][r+2]=='-'){if(p[k+2][r-2]=='-'){p[k+2][r-2]=67;reclear();return 0;}else{p[k-2][r+2]=67;reclear();return 0;}}else if(p[k+2][r-2]==80||p[k-2][r+2]==80){if(p[k+2][r-2]==80){p[k+3][r-3]=67;reclear();return 0;}else{p[k+3][r-3]=67;reclear();return 0;}}}}}for(k=1;k<X;k++){for(r=3;r<Y-2;r++){if(p[k][r]!='-'&&p[k][r-1]==p[k][r]&&p[k][r+1]==p[k][r]){if(p[k][r-2]=='-'||p[k][r+2]=='-'){if(p[k][r-2]=='-'){p[k][r-2]=67;reclear();return 0;}else{p[k][r+2]=67;reclear();return 0;}}else if(p[k][r-2]==80||p[k][r+2]==80){if(p[k][r+2]==80){p[k][r+3]=67;reclear();return 0;}else{p[k][r-3]=67;reclear();return 0;}}}}}for(k=3;k<X-2;k++){for(r=1;r<Y;r++){if(p[k][r]!='-'&&p[k-1][r]==p[k][r]&&p[k+1][r]==p[k][r]){if(p[k-2][r]=='-'||p[k+2][r]=='-'){if(p[k-2][r]=='-'){p[k-2][r]=67;reclear();return 0;}else{p[k+2][r]=67;reclear();return 0;}}else if(p[k-2][r]==80  ||p[k+2][r]==80){if(p[k+2][r]==80){p[k+3][r]=67;reclear();return 0;}else{p[k-3][r]=67;reclear();return 0;}}}}}while(1){srand((int)time(0));int a=(rand()%8);switch(a){case 0:if(p[m-1][n]=='-'){p[m-1][n]=67;reclear();return 0;}case 1:if(p[m][n-1]=='-'){p[m][n-1]=67;reclear();return 0;}case 2:if(p[m-1][n-1]=='-'){p[m-1][n-1]=67;reclear();return 0;}case 3:if(p[m+1][n+1]=='-'){  p[m+1][n+1]=67;reclear();return 0;}case 4:if(p[m+1][n]=='-'){p[m+1][n]=67;reclear();return 0;}case 5:if(p[m][n+1]=='-'){p[m][n+1]=67;reclear();return 0;}case 6:if(p[m+1][n-1]=='-'){p[m+1][n-1]=67;reclear();return 0;}case 7:if(p[m-1][n+1]=='-'){p[m-1][n+1]=67;reclear();return 0;}}}
}int evalue()
{int k=0,r=0;//斜线判断for(k=3;k<X-2;k++){for(r=3;r<Y-2;r++){if(p[k][r]!='-'&&p[k-2][r-2]==p[k][r]&&p[k-1][r-1]==p[k][r]&&p[k+1][r+1]==p[k][r]&&p[k+2][r+2]==p[k][r])return 1;else if(p[k][r]!='-'&&p[k+2][r-2]==p[k][r]&&p[k+1][r-1]==p[k][r]&&p[k-1][r+1]==p[k][r]&&p[k-2][r+2]==p[k][r])return 1;}}//横线判断for(k=1;k<X;k++)for(r=3;r<Y-2;r++)if(p[k][r]!='-'&&p[k][r-2]==p[k][r]&&p[k][r-1]==p[k][r]&&p[k][r+1]==p[k][r]&&p[k][r+2]==p[k][r])return 1;//竖线判断for(k=3;k<X-2;k++)for(r=1;r<Y;r++)if(p[k][r]!='-'&&p[k-2][r]==p[k][r]&&p[k-1][r]==p[k][r]&&p[k+1][r]==p[k][r]&&p[k+2][r]==p[k][r])return 1;return 0; 
}
int main()
{memset(p,'-',441);  //初始化为‘-’//在一段内存块中填充某个给定的值cout<<"五子棋人机大战开始\n"<<"五子棋棋谱如下:\n";display();while(1){person();if(evalue()){cout<<"你胜利啦!\n";break;}computer();if(evalue()){cout<<"失败,电脑胜出!\n";break;}  }return 0;
}

 


http://www.ppmy.cn/news/563045.html

相关文章

五子棋程序设计实现技术文档

五子棋程序设计实现文档 文章目录 五子棋程序设计实现文档前言一、运行截图二、基本思路1.实现过程2.落子3.悔棋4.人机对战的实现1.机器人落子逻辑**2.改进胜负判断方法3.计算目标点的权值(白棋ai使用)4.计算目标点的权值(黑棋ai使用)** 4.扩展功能1.智能“提示”功能 前言 博…

Windows平台下C++五子棋项目实战开发

1. 项目目标 2. 效果演示 3. 创建项目 4. 项目框架设计 4.1 设计项目框架 4.2 根据设计框架创建类 5. 给类添加主要接口 5.1 设计棋盘类Chess的主要接口 5.2 设计AI类的主要接口 5.3 设计Man类的主要接口 5.4 设计ChessGame的主要接口 5.5 添加各个接口的具体实现 6. 实…

基于java的五子棋游戏设计

技术&#xff1a;Java、JSP等摘要&#xff1a;随着互联网迅速的发展&#xff0c;网络游戏已经成为人们普遍生活中不可或缺的一部分&#xff0c;它不仅能使人娱乐&#xff0c;也能够开发人的智力&#xff0c;就像本文所主要讲的五子棋游戏一样能挖掘人们聪明的才干与脑袋的机灵程…

用Java实现五子棋对弈

目录 题目展示 题目分析 代码实现 结果展示 题目展示 1.使用二维数组存储五子棋棋盘 如下图 2.在控制台通过Scanner输入黑白棋坐标( 表示二维数组坐标),使用实心五角星和空心五角星表示黑白棋子。 如下图: 输入后重新输出棋盘如下图: 白棋输入后如下图&#xff1a; 黑白棋…

C++实现基于博弈树的5x5一子棋人机对战

基于博弈树的5x5一子棋人机对战 919106840637实验2 这是智能计算三个课程实验的第二个实验&#xff0c;即博弈树搜索 。我之前对博弈树的了解不多&#xff0c;所以实现起来比较的简略&#xff0c;仅仅是基本达到了要求 实验语言 C 实验内容 实践博弈树搜索——“5x5格子的一…

Java五子棋(人机版),昨天买的棋子今天就用不上了

Java五子棋&#xff0c;老程序员也花了3天 作者简介 作者名&#xff1a;编程界明世隐 简介&#xff1a;CSDN博客专家&#xff0c;从事软件开发多年&#xff0c;精通Java、JavaScript&#xff0c;博主也是从零开始一步步把学习成长、深知学习和积累的重要性&#xff0c;喜欢跟广…

文科生从0学Python转数据分析学习建议避坑指南

我本科是财务管理&#xff0c;文科专业&#xff0c;零基础学习Python转行数分后&#xff0c;现在我的日常工作都离不开它。 接下来&#xff0c;给各位跟我一样无编程经验的朋友一些学习的建议 目标导向&#xff1a;先搞清楚为啥要学 Python几乎可以做任何事&#xff0c;但我…

数据库是如何工作的

数据库是如何工作的 注&#xff1a; 本文翻译自db_tutorial. 数据库计算机世界的一个基础软件&#xff0c;要想深入了解数据库&#xff0c;就不得不思考如下几个问题&#xff1a; 数据以什么格式保存&#xff1f;&#xff08;在内存和磁盘上&#xff09;它何时从内存移动到磁…