資源簡介
程設實驗上寫的一個小程序,五子棋,用的評估分值法(甚至沒有深度搜索)。寫著玩的,比較弱智,人機贏不了我。有和我一樣剛接觸代碼的,需要的可以做個參考。
代碼片段和文件信息
#include
#include
#include
#include
#include
int?board[15][15]?=?{?0?};
int?res[2][2];
int?F;
#define?cfive??10000000
#define?pfive???1000000
#define?clfour???100000
#define?plfour????40000
#define?cdfour?????1000
#define?clthree?????600
#define?pdfour??????800
#define?plthree?????500
#define?cdthree??????30
#define?cltwo???????100
#define?pdthree??????20
#define?pltwo????????10
#define?pdtwo?????????1
#define?cdtwo?????????1
#define?diepos????????0
//各個情形的權重
long?int?weight(int?numint?statechar?c){
int?weight?=?0;
switch?(c)?{
case?‘c‘:
switch?(state)?{
case?2:switch?(num)?{
case?1:break;
case?2:weight?=?cltwo;??break;
case?3:weight?=?clthree;???break;
case?4:weight?=?clfour;?break;
case?5:weight?=?cfive;?break;
}break;
case?1:switch?(num)?{
case?1:break;
case?2:weight?=?cdtwo;?break;
case?3:weight?=?cdthree;?break;
case?4:weight?=?cdfour;?break;
case?5:weight?=?cfive;break;
}break;
case?0:if?(num?==?5)?weight?=?cfive;break;
default:break;
}break;
case?‘p‘:
switch?(state)?{
case?2:switch?(num)?{
case?1:break;
case?2:weight?=?pltwo;?break;
case?3:weight?=?plthree;?break;
case?4:weight?=?plfour;?break;
case?5:weight?=?pfive;?break;
}break;
case?1:switch?(num)?{
case?1:break;
case?2:weight?=?pdtwo;?break;
case?3:weight?=?pdthree;break;
case?4:weight?=?pdfour;?break;
case?5:weight?=?pfive;break;
}break;
case?0:if?(num?==?5)?weight?=?pfive;break;
default:break;
}break;
default:weight?=?0;?break;
}
return?weight;
}
//打印當前棋盤白子為負,黑子為正
void?print_board()?{
int?i?=?0;
int?j?=?0;
int?k?=?0;
int?s?=?0;
for?(i?=?0;?i?15;?i++)
printf(“???%c???“?i?+?97);
printf(“\n“);
for?(i?=?0;?i?15;?i++)?{
if?(i?<=?8)?{
printf(“?“);
printf(“%d?“?i?+?1);
}
else?printf(“%d?“?i?+?1);
for?(j?=?0;?j?15;?j++)?{
if?(board[i][j]?0)?printf(“\b●“);
else?if?(board[i][j]?>?0)?printf(“\b○“);?
else?{
if?((i?==?7?&&?j?==?7)?||?((i?==?3?||?i?==?11)?&&?(j?==?3?||?j?==?11)))printf(“*“);
else?{
if?(i?!=?0)?printf(“|“);
else?printf(“?“);
}
} if?(j?!=?14)?printf(“______“);
}printf(“\n“);
if?(i?!=?14)?{
for?(k?=?0;?k?2;?k++)?{
printf(“???“);
for?(s?=?0;?s?15;?s++)?{
printf(“|??????“);
}printf(“\n“);
}
}
}
return;
}
//清棋盤,可連續下多局
void?clear_board()?{
int?i?j;
for?(i?=?0;?i?15;?i++)
for?(j?=?0;?j?15;?j++)
board[i][j]?=?0;
return;
}
//判斷輸贏函數
int?judge(int?x?int?y)
{
int?i?j;
i?=?x;
j?=?y;
int?lu?=?0?up?=?0?ru?=?0?ld?=?0?dow?=?0?rd?=?0?r?=?0?l?=?0;
while?((i?!=?0?&&?j?!=?0)?&&?(board[i?-?1][j?-?1]?==?board[i][j]))?{
lu++;
j--;
i--;
}
res[0][0]?=?i;
res[0][1]?=?j;
i?=?x;
j?=?y;
while?((i?!=?14?&&?j?!=?14)?&&?(board[i?+?1][j?+?1]?==?board[i][j]))?{
rd++;
i++;
j++;
}
res[1][0]?=?i;
res[1][1]?
- 上一篇:利用隊列實現迷宮問題
- 下一篇:操作系統進程調度模擬算法
評論
共有 條評論