📄 main.c
字号:
//main.c
//last modified: /04/24/07
//vs2005
#include <stdio.h>
#include "data.h"
#include "horn.h"
#include "utility.h"
#define ININT_STR "Let COMPUTER play first, input \"go\", else input your move.\n\nPlayer: "
void ResetGame()
{
//红方先走
side = RED;
//重置初始局面
stoneIntersection[REDSTONE] = 0;
stoneIntersection[BLUESTONE1] = 8;
stoneIntersection[BLUESTONE2] = 9;
//最大搜索层数
maxDepth = 26;
//初始化着法列表
memset(moveList, -1, 1024*sizeof(int));
//第0层着法列表首地址
pList[0] = moveList;
//初始窗口
rootAlpha = LOSE - 100;
rootBeta = WIN + 100;
}
void NewGame()
{
ResetGame();
newGame = 0;
}
/*
************************************************************************
main
功能描述:1)接收命令和着法;返回应着。
2)调用搜索模块。
*************************************************************************
*/
int main(int argc, char **argv)
{
int i;
int result;
int readStat;
int move;
int gameOver;
inputStream = stdin;
newGame = 1;
for (i = 0; i < 256; i++)
args[i] = (char *) malloc(128);
printf(ININT_STR);
while (1) {
//初始化一新局
if (newGame)
{
NewGame( );
gameOver = 0;
}
traceOut = 1;
//读输入:
//1)若输入了命令,就接受命令。等待读入下一条输入。
//2)若是go。可跳出读输入的循环。
//3)否则认为输入了着法,并将其转换成内部数据表示。可跳出读输入的循环。
do {
readStat = Read(1, buffer);
if (readStat < 0 && inputStream == stdin) {
strcpy(buffer, "end");
(void) Option( );
}
result = Option( );
if(gameOver)
{
result = 1;
}
if (0 == result) {
printf("Player: ");
//将读入的命令行,识别为单词
nArgs = ReadParse(buffer, args, " ;");
//将从界面接收的着法转换成引擎内部的着法表示
result = InputMove(buffer, side);
//把走棋权交给另一方
if(result < 0)
side = !side;
}
} while (result > 0);
//若接收到了“go”或者着法,则开始搜索
bestRootMove = INFINITEVAL;
Search(maxDepth, rootAlpha, rootBeta, side); //引擎思考
//输出着法,修改局面
if(INFINITEVAL != bestRootMove)
{
OutputMove(bestRootMove);
MakeMove(bestRootMove>>4, bestRootMove & 15);
Trace_board(stoneIntersection);
printf("Player: ");
if(GameOver(side, stoneIntersection, 0))
{
gameOver = 1;
printf("\nGame is over!");
}
side = !side;
}
else
{
gameOver = 1;
printf("Game is over!");
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -