五子棋程序(运行环境:C++builder)
来源:百度文库 编辑:神马文学网 时间:2024/04/30 23:27:05
#include
#define uchar unsigned char
#define lsh 13
//棋盘为13路
enum result{natu,nonl,nonu,vict,surr};
//对应落子后的结果:常规、非法、弃权、获胜、投降
enum crossing{black,white,air};
//对应一个交叉点的状态:黑子、白子、空
enum crossing qp[lsh][lsh];//声明一个数组,对应棋盘
bool w_play;//轮白方下棋
void init();//声明初始化函数
void show();//声明显示函数
enum result play();//声明对弈函数
bool verd(char*);//声明判断落子合法性的函数
bool five(char,char);//声明判断五子相连的函数
void main()
{
enum result result0; //落子后的结果
init(); //初始化函数
while(true)
{
show(); //显示函数
result0=play(); //对弈函数
if(result0>nonu)
break;
}
getchar();
getchar();
}
void init()
{
for(int i=0;i for(int j=0;j qp[i][j]=air;
w_play=false;//初始为黑棋下
}
void show()//显示函数
{
int i,j;
char b;
cout< b='a';
cout<<' ';
for(i=0;i {
cout< b++;
}
b='A';
for(i=0;i {
cout< cout< b++;
for(j=0;j {
switch(qp[i][j])
{
case black:
cout<<"○"; //显示黑子
break;
case white:
cout<<"●"; //显示白子
break;
case air: //在不同位置显示交叉点
if(i==0)
{
if(j==0)
cout<<"┏";
else if(j==lsh-1)
cout<<"┓";
else
cout<<"┯";
}
else if(i==lsh-1)
{
if(j==0)
cout<<"┗";
else if(j==lsh-1)
cout<<"┛";
else
cout<<"┷";
}
else
{
if(j==0)
cout<<"┠";
else if(j==lsh-1)
cout<<"┨";
else
cout<<"┼";
}
break;
}
}
}
cout< cout<<"弃权:*"< cout<<"投降:$"< if(w_play)
cout<<"●";//显示当前的走棋方为白方
else
cout<<"○";//显示当前的走棋方为黑方}
enum result play()//五子棋对弈函数
{
char key[3];//用于输入落子的坐标
cin>>key;
if(key[0]=='*')//弃权
{
w_play=!w_play;//换为另一方下棋
return nonu;
}
else if(key[0]=='$')//投降
{
if(w_play)
cout<<"黑方获胜!";
else
cout<<"白方获胜!";
return surr;
}
else if(verd(key))//普通的合法输入
{
if(five(key[0],key[1]))//判断五子
{
if(w_play)
cout<<"白方获胜!";
else
cout<<"黑方获胜!";
return vict;
}
w_play=!w_play;//换为另一方下棋
return natu;
}
else//非法输入
{
cout<<"输入错误!请重新输入!";
return nonl;
}
}
bool verd(char *p)
{//判断输入是否合法,如合法则转换成相应的坐标
if(p[0]<'A' || p[0]>=('a'+lsh) || p[0]>=('A'+lsh) && p[0]<'a')//非法字符
return false;
if(p[1]<'A' || p[1]>=('a'+lsh) || p[1]>=('A'+lsh) && p[1]<'a')//非法字符
return false;
if(p[0]>0x60)//以下把输入的字母转换成数值下标
p[0]=p[0]-0x61;
else
p[0]=p[0]-0x41;
if(p[1]>0x60)
p[1]=p[1]-0x61;
else
p[0]=p[0]-0x41;
if(qp[p[0]][p[1]]!=air)//该处有子
return false;
if(w_play)//在棋盘数组中进行记录
qp[p[0]][p[1]]=white;
else
qp[p[0]][p[1]]=black;
return true;
}
bool five(char x,char y)//判断五子相连的函数
{
char n,i,j;
enum crossing z=qp[x][y];//Z是刚落下的棋子
n=0;
j=y;
while(j>0)//检查横向是否五子相连
{
if(qp[x][j-1]==z)//看看左边是不是同色棋子
j--;
else
break;
}
while(qp[x][j]==z)//看看右边是不是同色棋子
{
if(j++==lsh)
break;
if(++n==5)
return true;
}
n=0;
i=x;
while(i>0)//检查纵向是否五子相连
{
if(qp[i-1][y]==z)//看看上边是不是同色棋子
i--;
else
break;
}
while(qp[i][y]==z)//看看下边是不是同色棋子
{
if(i++==lsh)
break;
if(++n==5)
return true;
}
i=x;
j=y;
n=0;
while(i>0 && j>0)//检查左上右下方向是否五子相连
{
if(qp[i-1][j-1]==z)//看看左上是不是同色棋子
{
i--;
j--;
}
else
break;
}
while(qp[i][j]==z)//看看右下是不是同色棋子
{
if(i++==lsh)
break;
if(j++==lsh)
break;
if(++n==5)
return true;
}
i=x;
j=y;
n=0;
while(i>0 && j {
if(qp[i-1][j+1]==z)//看看右上是不是同色棋子
{
i--;
j++;
}
else
break;
}
while(qp[i][j]==z)//看看左下是不是同色棋子
{
if(i++==lsh)
break;
if(j--==-1)
break;
if(++n==5)
return true;
}
return false;
}
#define uchar unsigned char
#define lsh 13
//棋盘为13路
enum result{natu,nonl,nonu,vict,surr};
//对应落子后的结果:常规、非法、弃权、获胜、投降
enum crossing{black,white,air};
//对应一个交叉点的状态:黑子、白子、空
enum crossing qp[lsh][lsh];//声明一个数组,对应棋盘
bool w_play;//轮白方下棋
void init();//声明初始化函数
void show();//声明显示函数
enum result play();//声明对弈函数
bool verd(char*);//声明判断落子合法性的函数
bool five(char,char);//声明判断五子相连的函数
void main()
{
enum result result0; //落子后的结果
init(); //初始化函数
while(true)
{
show(); //显示函数
result0=play(); //对弈函数
if(result0>nonu)
break;
}
getchar();
getchar();
}
void init()
{
for(int i=0;i
w_play=false;//初始为黑棋下
}
void show()//显示函数
{
int i,j;
char b;
cout<
cout<<' ';
for(i=0;i
cout< b++;
}
b='A';
for(i=0;i
cout<
for(j=0;j
switch(qp[i][j])
{
case black:
cout<<"○"; //显示黑子
break;
case white:
cout<<"●"; //显示白子
break;
case air: //在不同位置显示交叉点
if(i==0)
{
if(j==0)
cout<<"┏";
else if(j==lsh-1)
cout<<"┓";
else
cout<<"┯";
}
else if(i==lsh-1)
{
if(j==0)
cout<<"┗";
else if(j==lsh-1)
cout<<"┛";
else
cout<<"┷";
}
else
{
if(j==0)
cout<<"┠";
else if(j==lsh-1)
cout<<"┨";
else
cout<<"┼";
}
break;
}
}
}
cout<
cout<<"●";//显示当前的走棋方为白方
else
cout<<"○";//显示当前的走棋方为黑方}
enum result play()//五子棋对弈函数
{
char key[3];//用于输入落子的坐标
cin>>key;
if(key[0]=='*')//弃权
{
w_play=!w_play;//换为另一方下棋
return nonu;
}
else if(key[0]=='$')//投降
{
if(w_play)
cout<<"黑方获胜!";
else
cout<<"白方获胜!";
return surr;
}
else if(verd(key))//普通的合法输入
{
if(five(key[0],key[1]))//判断五子
{
if(w_play)
cout<<"白方获胜!";
else
cout<<"黑方获胜!";
return vict;
}
w_play=!w_play;//换为另一方下棋
return natu;
}
else//非法输入
{
cout<<"输入错误!请重新输入!";
return nonl;
}
}
bool verd(char *p)
{//判断输入是否合法,如合法则转换成相应的坐标
if(p[0]<'A' || p[0]>=('a'+lsh) || p[0]>=('A'+lsh) && p[0]<'a')//非法字符
return false;
if(p[1]<'A' || p[1]>=('a'+lsh) || p[1]>=('A'+lsh) && p[1]<'a')//非法字符
return false;
if(p[0]>0x60)//以下把输入的字母转换成数值下标
p[0]=p[0]-0x61;
else
p[0]=p[0]-0x41;
if(p[1]>0x60)
p[1]=p[1]-0x61;
else
p[0]=p[0]-0x41;
if(qp[p[0]][p[1]]!=air)//该处有子
return false;
if(w_play)//在棋盘数组中进行记录
qp[p[0]][p[1]]=white;
else
qp[p[0]][p[1]]=black;
return true;
}
bool five(char x,char y)//判断五子相连的函数
{
char n,i,j;
enum crossing z=qp[x][y];//Z是刚落下的棋子
n=0;
j=y;
while(j>0)//检查横向是否五子相连
{
if(qp[x][j-1]==z)//看看左边是不是同色棋子
j--;
else
break;
}
while(qp[x][j]==z)//看看右边是不是同色棋子
{
if(j++==lsh)
break;
if(++n==5)
return true;
}
n=0;
i=x;
while(i>0)//检查纵向是否五子相连
{
if(qp[i-1][y]==z)//看看上边是不是同色棋子
i--;
else
break;
}
while(qp[i][y]==z)//看看下边是不是同色棋子
{
if(i++==lsh)
break;
if(++n==5)
return true;
}
i=x;
j=y;
n=0;
while(i>0 && j>0)//检查左上右下方向是否五子相连
{
if(qp[i-1][j-1]==z)//看看左上是不是同色棋子
{
i--;
j--;
}
else
break;
}
while(qp[i][j]==z)//看看右下是不是同色棋子
{
if(i++==lsh)
break;
if(j++==lsh)
break;
if(++n==5)
return true;
}
i=x;
j=y;
n=0;
while(i>0 && j
if(qp[i-1][j+1]==z)//看看右上是不是同色棋子
{
i--;
j++;
}
else
break;
}
while(qp[i][j]==z)//看看左下是不是同色棋子
{
if(i++==lsh)
break;
if(j--==-1)
break;
if(++n==5)
return true;
}
return false;
}
五子棋程序(运行环境:C++builder)
C程序的运行环境 - rocky的日志 - 网易博客
运行程序
C++Builder程序设计经验五则
C++Builder IDE使用技巧与快捷键
C++Builder常用的文件函数
C++builder编程修改注册表的问题
C++Builder程序设计经验五则
C++builder编程修改注册表的问题
debian linux下java运行环境的建立(页 1) - Linux - PHP C...
如何编译这段Tuxedo Pro*C程序? 环境设置与编译选项
[程序宝典]经典c程序(1-20)
VB开机运行程序
怎样限制程序运行
程序运行计时技巧
[程序宝典]经典c程序
[程序宝典]经典c程序
[程序宝典]经典c程序
新手功略(如何运行好一个HelloWorld程序)
新手功略(如何运行好一个HelloWorld程序)
新手功略(如何运行好一个HelloWorld程序)
开始→运行 可以打开的程序(大全)
javascript运行环境运行时设置javascript
请教高手有关Data alignment C Builder / 基础类