用C++写的五子棋代码(基于DOS界面)
来源:互联网 发布:戏曲服装淘宝网 编辑:程序博客网 时间:2024/05/21 17:09
#include<iostream>
#include<cstdlib>
using namespace std;
const char outstr[11][4]={"┌","┬","┐","├","┼","┤","└","┴","┘","○","●"};
int com[15][15],luozi[15][15],c,d;
void jushi() //这是判断落子重要性的函数
{
int x,y,i,m,n,lianzi1=0,lianzi2=0,life=0;
memset(com,0,sizeof(com));
for(x=0;x<=14;x++)
for(y=0;y<=14;y++)
{
if(luozi[x][y]==0)
{
for(m=-1;m<=1;m++)
for(n=-1;n<=1;n++)
{
if(m!=0 || n!=0)
{
for(i=1;i<=4;i++)
{
if( x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && luozi[x+i*m][y+i*n]==1 )
{lianzi1++;}
else
if(luozi[x+i*m][y+i*n]==0)
{life++; break;}
else
{break;}
}
for(i=-1;i>=-4;i--)
{
if( x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && luozi[x+i*m][y+i*n]==1 )
{lianzi1++;}
else
if(luozi[x+i*m][y+i*n]==0)
{life++; break;}
else
{break;}
}
if(lianzi1==1) {com[x][y]+=1;}
else if(lianzi1==2)
{
if(life==1) {com[x][y]+=5;}
else if(life==2) {com[x][y]+=10;}
}
else if(lianzi1==3)
{
if(life==1) {com[x][y]+=20;}
else if(life==2) {com[x][y]+=100;}
}
else if(lianzi1==4) {com[x][y]+=500;}
life=0;
for(i=1;i<=4;i++)
{
if( x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && luozi[x+i*m][y+i*n]==2 )
{lianzi2++;}
else
if(luozi[x+i*m][y+i*n]==0)
{life++; break;}
else
{break;}
}
for(i=-1;i>=-4;i--)
{
if( x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && luozi[x+i*m][y+i*n]==2 )
{lianzi2++;}
else
if(luozi[x+i*m][y+i*n]==0)
{life++; break;}
else
{break;}
}
if(lianzi2==1) {com[x][y]+=2;}
else if(lianzi2==2)
{
if(life==1) {com[x][y]+=8;}
else if(life==2) {com[x][y]+=30;}
}
else if(lianzi2==3)
{
if(life==1) {com[x][y]+=50;}
else if(life==2) {com[x][y]+=200;}
}
else if(lianzi2==4) {com[x][y]+=1000;}
lianzi1=0;
lianzi2=0;
life=0;
}
}
}
}
}
void computer(int a[15][15]) //这是电脑落子的函数
{
int i,j,max=0;
jushi();
for(i=0;i<=14;i++)
for(j=0;j<=14;j++)
{
if(com[i][j]>max)
{
max=com[i][j];
c=i;
d=j;
}
}
a[c][d]=10;
luozi[c][d]=2;
}
int panduan(int x,int y,int sum) //判断胜负的函数
{
int m,n,i,lianzi=0;
for(m=-1;m<=1;m++)
for(n=-1;n<=1;n++)
{
if(m!=0 || n!=0)
{
for(i=1;i<=4;i++)
{
if( x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && luozi[x+i*m][y+i*n]==sum )
{lianzi++;}
else
{break;}
}
for(i=-1;i>=-4;i--)
{
if( x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && luozi[x+i*m][y+i*n]==sum )
{lianzi++;}
else
{break;}
}
if(lianzi>=4)
{
return 1;
}
else
{
lianzi=0;
}
}
}
return 0;
}
int main() //主函数 ,主要进行人落子工作
{
system ("color 2f");
system ("mode con cols=50 lines=25");
system ("title 欢迎使用!");
int a[15][15]={0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
6,7,7,7,7,7,7,7,7,7,7,7,7,7,8};
int x,y,i,j;
memset(luozi,0,sizeof(luozi));
cout<<" 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4"<<endl;
for(i=0;i<=14;i++)
{
if(i!=0)
cout<<endl;
cout<<i%10;
for(j=0;j<=14;j++)
{
cout<<outstr[a[i][j]];
}
}
cout<<endl;
cout<<"请输入您要下的棋子 行\\列 用空格隔开:";
while(cin>>x>>y)
{
if(luozi[x][y]==0 && x>=0 && x<=14 && y>=0 && y<=14)
{
a[x][y]=9;
luozi[x][y]=1;
if(panduan(x,y,1)==0)
{
system ("cls");
computer(a);
if(panduan(c,d,2)==0)
{
cout<<" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4"<<endl;
for(i=0;i<=14;i++)
{
if(i!=0)
cout<<endl;
cout<<i%10;
for(j=0;j<=14;j++)
{
cout<<outstr[a[i][j]];
}
}
cout<<endl;
cout<<"您的棋子落在"<<x<<"行"<<" "<<y<<"列"<<endl;
cout<<"电脑的棋子落在"<<c<<"行"<<" "<<d<<"列"<<endl;
cout<<"请输入您要下的棋子";
}
else
{
cout<<" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4"<<endl;
for(i=0;i<=14;i++)
{
if(i!=0)
cout<<endl;
cout<<i%10;
for(j=0;j<=14;j++)
{
cout<<outstr[a[i][j]];
}
}
cout<<endl;
cout<<"电脑的棋子落在"<<c<<"行"<<" "<<d<<"列"<<endl;
cout<<"电脑获胜!"<<endl;
break;
}
}
else
{
system ("cls"); //清屏
cout<<" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4"<<endl;
for(i=0;i<=14;i++)
{
if(i!=0)
cout<<endl;
cout<<i%10;
for(j=0;j<=14;j++)
{
cout<<outstr[a[i][j]];
}
}
cout<<endl;
cout<<"您获胜啦!"<<endl;
break;
}
}
else
{
cout<<"输入错误,请重新输入:"<<endl;
}
}
system ("title 谢谢使用!");
system ("color 03");
cout<<"谢谢使用"<<endl;
system("pause>nul");
return 0;
}
- 用C++写的五子棋代码(基于DOS界面)
- 用C++写的三子棋代码(基于DOS界面)
- C/C++用QT写的五子棋源码
- 第一次用c语言写的五子棋,求大神修改
- C/C++用QT写的五子棋源码
- C/C++用QT写的五子棋源码
- 很久以前写的五子棋的代码
- 用C#写的五子棋
- 写一个简单的打飞机游戏(Dos界面)
- C写五子棋
- 用c语言代码编写的游戏“简易五子棋”
- 幼稚的五子棋界面(java实现)
- 用C++写的五子棋 [转]
- 自己写的五子棋
- C语言写五子棋练习
- 本人用 C 和 WinAPI 写的一个 带AI的五子棋
- 基于MFC的五子棋应用(一)
- 基于MFC的五子棋应用(二)
- 构建自己的Linux 之二 BusyBox移植
- Social Media Expert社交媒体专家真的存在么?
- 用C++写的三子棋代码(基于DOS界面)
- 使用ANSI C and Microsoft C++中常用的预定义宏
- 团购在升温
- 用C++写的五子棋代码(基于DOS界面)
- 在线票务活动销售平台在国内的可行性
- 使用VS2010的CMFCToolbar实现真彩色工具栏
- 互联网商务的广告烧钱模式讨论
- ZZ 一致性hash(负载分担)
- 分析优酷HTML5地址
- 关于字符串处理,equal和==都没有效果
- 自定义silverlight控件
- Hibernate学习文档_集合映射