为了与各位一起学习一起成长,大家可以把这段代码运行下。将五子棋源代码1和五子棋源代码2,连起来编译运行。
# include
# include
# include
# include
# include
# include
# define SPA 0//在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。 “define”为宏定义命令。
# define MAN 1
# define COM 2
/* 空位置设为0 ,玩家下的位置设为1 ,电脑下的位置设为2 */
#define ORDEX 15
int qipan[ORDEX][ORDEX]; //自己定义的预处理函数,以二维数组形式构建棋盘 /* 15*15的棋盘 */
typedef struct//typedef的作用是在C中定义一个结构体类型
{
int iFlag;
int iX, iY;
}ScmPiece;
int g_iPieceLen;
ScmPiece g_ScmGame1, g_ScmGame2;
void start(); /* 程序的主要控制函数 */
void draw(); /* 画棋盘 */
int Victory( ScmPiece * pScmPiece ); /* 判断胜利 p q为判断点坐标 */
void AI(int *p,int *q); /* 电脑下子 p q返回下子坐标 */
int value(int p,int q); /* 计算空点p q的价值 */
int qixing(int n,int p,int q); /* 返回空点p q在n方向上的棋型 n为1-8方向 从右顺时针开始数 */
void yiwei(int n,int *i,int *j); /* 在n方向上对坐标 i j 移位 n为1-8方向 从右顺时针开始数 */
void InitGame(){
“我自己是一名从事了多年开发的C++老程序员,辞职目前在做自己的C++私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的C++学习干货,从最基础的到各种框架都有整理,送给每一位c++小伙伴,想要获取的可以在7253,91790免费获取。
int i;
g_iPieceLen = ORDEX * ORDEX;
g_ScmGame1.iX = 0;
g_ScmGame1.iY = 0;
g_ScmGame1.iFlag = COM;
g_ScmGame2.iX = 7;
g_ScmGame2.iY = 7;
g_ScmGame2.iFlag = MAN;
for( i=0; i < ORDEX*ORDEX; ++i )
*( (int*)qipan + i ) = SPA;
}
int main()
{
char k;
do{
InitGame();
start();
printf("还要再来一把吗?输入y或n:"); getchar(); scanf("%c",&k);
while(k!='y'&&k!='n'){ printf("输入错误,请重新输入 "); scanf("%c",&k); }
system("cls");
}while(k=='y');
printf("谢谢使用! ");
return 0;
}
void MakePiece( ScmPiece * pScmPiece, int iGameFlag ){
if( iGameFlag )
{
printf("请下子:");
while( scanf( "%d%d", &pScmPiece->iX, &pScmPiece->iY ) )
{
if( ( pScmPiece->iX < 0 || pScmPiece->iX > ORDEX-1 ) || ( pScmPiece->iY < 0 || pScmPiece->iY > ORDEX-1 ) )
printf( "坐标错误!请重新输入:");
else if( qipan[pScmPiece->iX][pScmPiece->iY] )
printf( "该位置已有子!请重新输入:");
else break;
}
}
qipan[pScmPiece->iX][pScmPiece->iY] = pScmPiece->iFlag;
--g_iPieceLen;
system("cls");
draw();
if( iGameFlag == 0 )
printf("电脑下在%d %d ", pScmPiece->iX, pScmPiece->iY );
}
void start()
{
int choice;
//ScmPiece ScmGameTemp1, ScmGameTemp2;/* a1 b1储存玩家上手坐标 c1 d1储存电脑上手坐标 */
printf(" ╔═══════════════════════════════╗ ");
printf(" ║ ║ ");
printf(" ║ 欢迎使用五子棋对战程序 祝您玩的愉快挑战无极限 ║ ");
printf(" ║ ║ ");
printf(" ║ ._______________________. ║ ");
printf(" ║ | _____________________ | ║ ");
printf(" ║ | I I | ║ ");
printf(" ║ | I I | ║ ");
printf(" ║ | I 五 子 棋 I | ║ ");
printf(" ║ | I I | ║ ");
printf(" ║ | I___________________I | ║ ");
printf(" ║ !_______________________! ║ ");
printf(" ║ ._[__________]_. ║ ");
printf(" ║ .___|_______________|___. ║ ");
printf(" ║ |::: ____ | ║ ");
printf(" ║ | ~~~~ [CD-ROM] | ║ ");
printf(" ║ !_____________________! ║ ");
printf(" ║ ║ ");
printf(" ║ ║ ");
printf(" ║ 寒 星 溪 月 疏 星 首,花 残 二 月 并 白 莲。 ║ ");
printf(" ║ 雨 月 金 星 追 黑 玉,松 丘 新 宵 瑞 山 腥。 ║ ");
printf(" ║ 星 月 长 峡 恒 水 流,白 莲 垂 俏 云 浦 岚。 ║ ");
printf(" ║ 黑 玉 银 月 倚 明 星,斜 月 明 月 堪 称 朋。 ║ ");
printf(" ║ 二 十 六 局 先 弃 二,直 指 游 星 斜 彗 星。 ║ ");
printf(" ║ ║ ");
printf(" ║ ║ ");
printf(" ║ 1.人机对战 2.人人对战 ║ ");
printf(" ║ ║ ");
printf(" ╚═══════════════════════════════╝ ");
printf(" 请输入1或2:");
while( scanf( "%d", &choice ), choice!=1 && choice!=2 )
printf( "输入错误,请重新输入:" );
system("cls");
if( choice == 1 )
{ /* 人机模式 */
printf(" 欢迎使用五子棋人机对战! 下子请输入坐标(如13 6)中间以空格分隔。 ");
draw();
printf("先下请按1,后下请按2:");
while( scanf( "%d", &choice ), choice!=1 && choice!=2 )
printf( "输入错 误,请重新输入:" );
if( choice == 2 )
MakePiece( &g_ScmGame2, 0 );
choice = 1;
}
else
{
printf("欢迎使用五子棋人人对战!下子请输入坐标(如13 6)。悔棋请输入15 15。 ");
draw();
}
while( g_iPieceLen )
{
MakePiece( &g_ScmGame1, 1 );
if( Victory( &g_ScmGame1 ) )
{
printf("电脑神马的都是浮云!!! ");
return;
} /* 玩家赢 */
if( choice == 1 )
{
AI( &g_ScmGame2.iY, &g_ScmGame2.iX );
MakePiece( &g_ScmGame2, 0 );
if( Victory( &g_ScmGame2 ) )
{ /* 电脑赢 */
int iChoice;
printf("要悔棋吗?请输入y或n:");
STARTFLAGE:
setbuf( stdin, NULL );
scanf( "%c", &iChoice );
switch( (char)iChoice ){
case 'y':
case 'Y':
g_iPieceLen += 2;
qipan[g_ScmGame2.iX][g_ScmGame2.iY] = SPA;
qipan[g_ScmGame1.iX][g_ScmGame1.iY] = SPA;
system("cls"); draw();
break;
case 'n':
case 'N':
printf( "下不过电脑很正常,请不要灰心!!! " );
return;
default:
printf("输入错误,请重新输入:");
goto STARTFLAGE;
}
}
}
else
{
MakePiece( &g_ScmGame2, 1 );
if( Victory( &g_ScmGame2 ) )
{
printf("电脑神马的都是浮云!!! ");
return;
}
}
}
printf("和局 ");
}
可能编辑时没注意格式,有点乱,你们自己整理一下咯~