五子棋C++代码
来源:互联网 发布:对于人工智能的看法600 编辑:程序博客网 时间:2024/05/15 23:44
小学期完成老师交代的五子棋游戏,现在把代码上传一下,希望我们老师看到不要以为我是从网上扒的。
class Gobang
{
public:
Gobang();
void paint(); //画棋盘
void set(intt); //下棋
int check(); //判断是否赢
int Out(intt);
void Reset();
private:
intM[19][19]; //以一个二维的数组来存储棋盘,放置棋子
};
#include<iostream>
#include<cstdlib>
#include<fstream>
#include"gobang.h"
usingnamespace std;
ofstreamfout("gobang.txt");
voidmain()
{
int n;
Gobang gobang;//对象初始化
while(1)
{
gobang.Reset();//初始化棋盘
int t = 1;
while(1)//再一次无限循环
{ system("cls");//调用系统命令清屏
gobang.paint();//清屏之后需要马上绘制棋盘
if(t)
cout<<"黑子: ";
else
cout<<"白子:";
gobang.set(t);
if(gobang.check())
break;//满足if条件语句时跳出循环
t=!t;
}
do{
cout<<"1.继续"<<endl;
cout<<"2.结束"<<endl;
cin>>n;
}while(n!=1&& n!=2);
if(n==2)
break;
}
}
void Gobang::set(int t)//该函数的作用是判断输入的坐标是否合适,以及判断放置棋子
{
int a;
int b;
cin>>a>>b;
if(a>19||b>16)
{
cout<<"输入错误,请重新输入!"<<endl;
cin>>a>>b;
}
if(t) //这里t为1时下黑子,为-1时下白子
M[a-1][b-1] = 1;
else
M[a-1][b-1] = -1;
}
voidGobang::paint() //绘制棋盘,以及将放置棋子的操作
{
cout<<" 1 2 3 4 5 6 7 8910111213141516171819"<<endl;
cout<<" ┏┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┓";
for(int i=0;i<19;i++)
{
if(i>=9)
cout<<"\n"<<i+1<<"┠";
else
cout<<"\n "<<i+1<<""<<"┠";
for(int j=0;j<19;j++)
{
switch(M[i][j])
{
case 0:
cout<<"┼";
break;
case 1:
cout<<"●";
break;
case -1:
cout<<"○";
break;
}
}
cout<<"┨";
}
cout<<"\n ┗┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┛ "<<endl;
}
int Gobang::check()//判断游戏输赢
{
int s;
for(int i=15;i>=0;i--)//这块代码是判断斜线五子棋,从左下角一直判断到右上角
for(int j=0;j<=15;j++)
{
s = 0;
for(int k=0;k<5;k++)
{
if(M[i+k][j+k] == 0)
break;
s+=M[i+k][j+k];
if(Out(s))
return 1;
}
}
for(int i=0;i<=15;i++)//从左上角判断到右下角
for(int j=5;j<19;j++)
{
s= 0;
for(int k=0;k<5;k++)
{
if(M[i+k][j-k] ==0)
break;
s+=M[i+k][j-k];
if(Out(s))
return 1;
}
}
for(int i=0;i<19;i++)//这整个三层的for循环作用是遍历整个棋盘然后找到横向的五个连续的棋子
for(int j=0;j<15;j++)
{
s= 0;
for(int k=0;k<5;k++)
{
if( M[i][j+k] ==0)
break;//跳出最近的for循环
s+=M[i][j+k];
if(Out(s))
return 1;
}
}
for(int i=0;i<19;i++)//判断是否是纵向的五个相同的棋子
for(int j=0;j<15;j++)
{
s =0;
for(int k=0;k<5;k++)
{
if(M[i+k][j] ==0)
break;
s+=M[i+k][j];
if(Out(s))
return 1;
}
}
return 0;
}
intGobang::Out(int t)
{
if(t == 5)
{
cout<<"黑方胜!"<<endl;
fout<<"黑方胜!\n";
return 1;
}
else if(t == -5)
{
cout<<"白方胜!"<<endl;
fout<<"白方胜!\n";
return 1;
}
return 0;
}
voidGobang::Reset()//初始化棋盘
{
for(int i=0;i<19;i++)
for(int j=0;j<19;j++)
M[i][j]=0;
}
Gobang::Gobang()
{
for(int i=0;i<19;i++)
for(int j=0;j<19;j++)
M[i][j]=0;
}
- C语言实现五子棋代码
- 五子棋人机互弈代码 C
- 五子棋代码
- 用c语言代码编写的游戏“简易五子棋”
- 五子棋服务器端代码
- 五子棋客户端代码
- java五子棋游戏 代码
- c++代码(五子棋)
- 五子棋代码解析
- 一个五子棋代码
- j2me 五子棋代码啊
- 网络五子棋代码
- 五子棋C++代码
- 【java】双人五子棋代码
- 五子棋代码详细注解
- 五子棋的小代码
- VB.Net五子棋代码
- C语言五子棋算法
- LeetCode | Unique Paths(唯一路径)
- 关于补码运算原理
- uploadify3.2 jquery上传组件
- simple-spring-memcached-3.0.x 注解详解
- centos-6.4 64位u盘安装盘制作
- 五子棋C++代码
- NYOJ27,水池数目
- MVP视频播放器详解(三)
- ios编码规范
- Android开发环境的搭建
- Notes导入excel表格
- 【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群-安装Ubuntu系统(3)
- C语言字符输入/输出函数
- 什么是VPN