為了與各位一起學(xué)習(xí)一起成長因妇,大家可以把這段代碼運(yùn)行下卫键。將五子棋源代碼1和五子棋源代碼2,連起來編譯運(yùn)行司抱。
# include<stdio.h>
# include<stdio.h>
# include<stdio.h>
# include<stdio.h>//插入輸入輸出頭文件
# include<string.h>//字符數(shù)組的函數(shù)定義的頭文件
# include<stdlib.h>//stdlib 頭文件即standard library標(biāo)準(zhǔn)庫頭文件stdlib 頭文件里包含了C蓖康、C++語言的最常用的系統(tǒng)函數(shù)該 ,文件包含了C語言標(biāo)準(zhǔn)庫函數(shù)的定義.
# define SPA 0//在C或C++語言源程序中允許用一個(gè)標(biāo)識符來表示一個(gè)字符串铐炫,稱為“宏”。 “define”為宏定義命令钓瞭。
# define MAN 1
# define COM 2
/* 空位置設(shè)為0 驳遵,玩家下的位置設(shè)為1 ,電腦下的位置設(shè)為2 */
#define ORDEX 15
int qipan[ORDEX][ORDEX]; //自己定義的預(yù)處理函數(shù)山涡,以二維數(shù)組形式構(gòu)建棋盤 /* 15*15的棋盤 */
typedef struct//typedef的作用是在C中定義一個(gè)結(jié)構(gòu)體類型
{
int iFlag;
int iX, iY;
}ScmPiece;
int g_iPieceLen;
ScmPiece g_ScmGame1, g_ScmGame2;
void start(); /* 程序的主要控制函數(shù) */
void draw(); /* 畫棋盤 */
int Victory( ScmPiece * pScmPiece ); /* 判斷勝利 p q為判斷點(diǎn)坐標(biāo) */
void AI(int *p,int *q); /* 電腦下子 p q返回下子坐標(biāo) */
int value(int p,int q); /* 計(jì)算空點(diǎn)p q的價(jià)值 */
int qixing(int n,int p,int q); /* 返回空點(diǎn)p q在n方向上的棋型 n為1-8方向 從右順時(shí)針開始數(shù) */
void yiwei(int n,int *i,int *j); /* 在n方向上對坐標(biāo) i j 移位 n為1-8方向 從右順時(shí)針開始數(shù) */
void InitGame(){
“我自己是一名從事了多年開發(fā)的C++老程序員堤结,辭職目前在做自己的C++私人定制課程,今年年初我花了一個(gè)月整理了一份最適合2019年學(xué)習(xí)的C++學(xué)習(xí)干貨鸭丛,從最基礎(chǔ)的到各種框架都有整理竞穷,送給每一位c++小伙伴,想要獲取的可以在7253鳞溉,91790免費(fèi)獲取瘾带。
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("輸入錯(cuò)誤,請重新輸入 "); 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( "坐標(biāo)錯(cuò)誤!請重新輸入:");
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儲存玩家上手坐標(biāo) c1 d1儲存電腦上手坐標(biāo) */
printf(" ╔═══════════════════════════════╗ ");
printf(" ║ ║ ");
printf(" ║ 歡迎使用五子棋對戰(zhàn)程序 祝您玩的愉快挑戰(zhàn)無極限 ║ ");
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.人機(jī)對戰(zhàn) 2.人人對戰(zhàn) ║ ");
printf(" ║ ║ ");
printf(" ╚═══════════════════════════════╝ ");
printf(" 請輸入1或2:");
while( scanf( "%d", &choice ), choice!=1 && choice!=2 )
printf( "輸入錯(cuò)誤,請重新輸入:" );
system("cls");
if( choice == 1 )
{ /* 人機(jī)模式 */
printf(" 歡迎使用五子棋人機(jī)對戰(zhàn)冒晰! 下子請輸入坐標(biāo)(如13 6)中間以空格分隔同衣。 ");
draw();
printf("先下請按1,后下請按2:");
while( scanf( "%d", &choice ), choice!=1 && choice!=2 )
printf( "輸入錯(cuò) 誤壶运,請重新輸入:" );
if( choice == 2 )
MakePiece( &g_ScmGame2, 0 );
choice = 1;
}
else
{
printf("歡迎使用五子棋人人對戰(zhàn)耐齐!下子請輸入坐標(biāo)(如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("輸入錯(cuò)誤询枚,請重新輸入:");
goto STARTFLAGE;
}
}
}
else
{
MakePiece( &g_ScmGame2, 1 );
if( Victory( &g_ScmGame2 ) )
{
printf("電腦神馬的都是浮云!!! ");
return;
}
}
}
printf("和局 ");
}
可能編輯時(shí)沒注意格式,有點(diǎn)亂浙巫,你們自己整理一下咯~