命令行人机对战五子棋.docx

上传人:b****5 文档编号:8309737 上传时间:2023-01-30 格式:DOCX 页数:16 大小:16.99KB
下载 相关 举报
命令行人机对战五子棋.docx_第1页
第1页 / 共16页
命令行人机对战五子棋.docx_第2页
第2页 / 共16页
命令行人机对战五子棋.docx_第3页
第3页 / 共16页
命令行人机对战五子棋.docx_第4页
第4页 / 共16页
命令行人机对战五子棋.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

命令行人机对战五子棋.docx

《命令行人机对战五子棋.docx》由会员分享,可在线阅读,更多相关《命令行人机对战五子棋.docx(16页珍藏版)》请在冰豆网上搜索。

命令行人机对战五子棋.docx

命令行人机对战五子棋

////////////main.cpp

#include

#include

#include

#include"point.h"

#include"vertical.h"

#include"horizontal.h"

usingnamespacestd;

constintx=20;

constinty=20;

intMARK[]={0,1,10,100,1000,10000};

voidpeopleA(char(*flag)[y],vector&vec);

voidBegin(char(*flag)[y],vector&vec);

intworkOutGains(inti,vector&vec);

//初始化容器

voidinintVecQ(vector&vec,char(*flag)[y])

{

for(inti=0;i

for(intj=0;j

vec.push_back(point(flag[i][j],i,j));

}

//初始化棋盘

voidinit(char(*flag)[y])

{

intnumbleW[y];

intnumbleH[x];

for(inti=0;i

numbleW[i]=i;

for(inti=0;i

numbleH[i]=i;

for(inti=0;i

{

cout<

(2)<

if(i==0)

{

for(intk=0;k

{

cout<

}

cout<

cout<<""<<0;

}

for(intj=0;j

{

flag[i][j]='|';

cout<<"--";

cout<

}

cout<

}

}

//画出指定棋盘

voiddraw(char(*flag)[y])

{

intnumbleW[y];

intnumbleH[x];

for(inti=0;i

numbleW[i]=i;

for(inti=0;i

numbleH[i]=i;

for(inti=0;i

{

cout<

(2)<

if(i==0)

{

for(intk=0;k

{

cout<

}

cout<

cout<<""<<0;

}

for(intj=0;j

{

cout<<"--";

cout<

}

cout<

}

}

//判断输入坐标是否合法

boolcheck(inti,intj,char(*flag)[y])

{

if(i<0||i>=x||j<0||j>=y)

{

cout<<"输入坐标不合法!

请重新输入!

"<

return0;

}

else

{

if(flag[i][j]=='X'||flag[i][j]=='O')

{

cout<<"该点已存在棋子,请重新输入!

"<

return0;

}

else

{

returntrue;

}

}

}

//判断是否胜利

booltest(char(*flag)[y],charc)

{

for(inti=0;i

for(intj=0;j

{

if((c==flag[i][j]&&c==flag[i+1][j]&&c==flag[i+2][j]&&c==flag[i+3][j]&&c==flag[i+4][j])

||(c==flag[i][j]&&c==flag[i][j+1]&&c==flag[i][j+2]&&c==flag[i][j+3]&&c==flag[i][j+4])

||(c==flag[i][j]&&c==flag[i+1][j+1]&&c==flag[i+2][j+2]&&c==flag[i+3][j+3]&&c==flag[i+4][j+4]))

{

return1;

}

}

return0;

}

//电脑出棋

voidcomputer(char(*flag)[y],vector&vec)

{

for(inti=0;i<399;++i)

{

if(vec[i].c=='|')

vec[i].gains=workOutGains(i,vec);

}

intgain=vec[0].gains;

intxx,yy;

for(inti=1;i<=399;++i)

{

if(vec[i].c=='|')

if(vec[i].gains>gain)

{

gain=vec[i].gains;

xx=vec[i].h;

yy=vec[i].w;

}

else

{

continue;

}

else

{

continue;

}

}

flag[xx][yy]='O';

draw(flag);

vec[xx*20+yy].c='O';

if(test(flag,'O'))

{

charf;

cout<<"电脑胜利!

是否再来一局:

【Y】|【N】?

"<

cin>>f;

if(f=='Y'||f=='y')

Begin(flag,vec);

}

else

{

peopleA(flag,vec);

}

}

//玩家B走棋

voidpeopleB(charflag[x][y],vector&vec)

{

inti,j;

cout<<"玩家B出棋,请输入坐标:

"<

cin>>i>>j;

while(!

check(i,j,flag))

{

cin>>i;

cin>>j;

}

if(check(i,j,flag))

{

flag[i][j]='O';

draw(flag);

}

if(test(flag,'O'))

{

charf;

cout<<"玩家B胜利!

是否再来一局:

【Y】|【N】?

"<

cin>>f;

if(f=='Y'||f=='y')

Begin(flag,vec);

}

else

{

peopleA(flag,vec);

}

}

//玩家A走棋

voidpeopleA(char(*flag)[y],vector&vec)

{

inti,j;

cout<<"玩家A出棋,请输入坐标:

"<

cin>>i>>j;

while(!

check(i,j,flag))

{

cin>>i;

cin>>j;

}

if(check(i,j,flag))

{

flag[i][j]='X';

draw(flag);

vec[i*20+j].c='X';

}

if(test(flag,'X'))

{

charf;

cout<<"玩家A胜利!

是否再来一局:

【Y】|【N】?

"<

cin>>f;

if(f=='Y'||f=='y')

Begin(flag,vec);

}

else

{

computer(flag,vec);

}

}

//开始游戏

voidBegin(char(*flag)[y],vector&vec)

{

init(flag);//初始化棋盘

inintVecQ(vec,flag);//初始化容器信息

peopleA(flag,vec);

}

 

//计算某点的收益

intworkOutGains(inti,vector&vec)

{

intm=MARK[horizontal(i,'O',vec)]+MARK[vertical(i,'O',vec)]+

MARK[slant(i,'O',vec)]+MARK[Rslant(i,'O',vec)]+

MARK[horizontal(i,'X',vec)]+MARK[vertical(i,'X',vec)]+

MARK[slant(i,'X',vec)]+MARK[Rslant(i,'X',vec)];

returnm;

}

intmain()

{

charflag[x][y];

vectorvectorQ;//定义棋盘信息容器

Begin(flag,vectorQ);

//for(inti=0;i

//for(intj=0;j

//{

//flag[i][j]='|';

//vectorQ.push_back(point(flag[i][j],i,j));

//}

//vectorQ[21].c='O';

//cout<

////cout<

system("pause");

return0;

}

/////////////point.h

#ifndefPOINT_H

#definePOINT_H

classpoint

{

public:

point(){};

point(charthec,intxx,intyy):

c(thec),h(xx),w(yy),gains(0){}

charc;

intgains,h,w;//分别为该点的收益值和坐标

~point(){};

};

#endif

 

/////////horizontal.h

#ifndefHORIZONTAL_H

#defineHORIZONTAL_H

#include"point.h"

#include

usingnamespacestd;

//判断水平状态

inthorizontal(inti,charc,vector&vec)

{

intj,k;

for(j=i-1;vec[j+1].w>0&&vec[j].c==c;--j)

{}

for(k=i+1;vec[k-1].w<19&&vec[k].c==c;++k)

{}

intm=k-j-1;

if(vec[j+1].w==0)

{

if(vec[k].c=='|')

returnm-1;//

else

{

return0;

}

}

elseif(vec[k-1].w==19)

{

if(vec[j].c=='|')

returnm-1;

else

{

return0;

}

}

else

{

if(vec[j].c=='|'&&vec[k].c=='|')

returnm;

else

{

return0;

}

}

}

//判断正斜状态

intslant(inti,charc,vector&vec)

{

intj,k,m;

for(j=i-1-20;vec[j+1+20].w>0&&vec[j+1+20].h>0&&vec[j].c==c;j=j-1-20)

{}

for(k=i+1+20;vec[k-1-20].w<19&&vec[k-1-20].h<19&&vec[k].c==c;k=k+1+20)

{}

m=(k-j)%20-1;

if(vec[j+1+20].w==0||vec[j+1+20].h==0)

{

if(vec[k-1-20].w==19||vec[k-1-20].h==19)

{

return0;

}

elseif(vec[k].c=='|')

{

returnm-1;

}

else

{

return0;

}

}

elseif(vec[j].c=='|')

{

if(vec[k-1-20].w==19||vec[k-1-20].h==19)

returnm-1;

elseif(vec[k].c=='|')

returnm;

else

{

returnm-1;

}

}

else

{

if(vec[k-1-20].w==19||vec[k-1-20].h==19)

return0;

elseif(vec[k].c=='|')

returnm-1;

else

{

return0;

}

}

}

#endif

//////vertical.h

#ifndefVERTICAL_H

#defineVERTICAL_H

#include

#include"point.h"

usingnamespacestd;

//判断纵向状态

intvertical(inti,charc,vector&vec)

{

intj,k;

for(j=i-20;j>=0&&vec[j].c==c;j=j-20)

{}

for(k=i+20;k<=399&&vec[k].c==c;k=k+20)

{}

intm=(k-j)/20-1;

if(j<0)

{

if(vec[k].c=='|')

returnm-1;

else

{

return0;

}

}

elseif(k>399)

{

if(vec[j].c=='|')

returnm-1;

else

{

return0;

}

}

else

{

if(vec[j].c=='|'&&vec[k].c=='|')

returnm;

else

{

returnm-1;

}

}

}

//判断反斜状态

intRslant(inti,charc,vector&vec)

{

intj,k,m;

for(j=i+1-20;vec[j+20-1].h>0&&vec[j+20-1].w<19&&vec[j].c==c;j=j+1-20)

{

}

for(k=i-1+20;vec[k+1-20].h<19&&vec[k+1-20].w>0&&vec[k].c==c;k=k-1+20)

{

}

m=(k-j)/19-1;

if(vec[j+20-1].h==0||vec[j+20-1].w==19)

{

if(vec[k].c=='|')

returnm-1;

else

{

return0;

}

}

else

{

if(vec[j].c=='|')

{

if(vec[k+1-20].h==19||vec[k+1-20].w==0)

returnm-1;

elseif(vec[k].c=='|')

returnm;

else

{

returnm-1;

}

}

else

{

if(vec[k].c=='|')

returnm-1;

else

{

return0;

}

}

}

}

#endif

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1