⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 牛角棋的源码
💻 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 + -