mantischessstd.cpp

来自「一个博弈论的经典游戏,规则是两边轮流走棋,走到最后一步者胜.先手只有一种走法能胜」· C++ 代码 · 共 98 行

CPP
98
字号
/***************************************************************
  MantisChessStd.cpp : MantisChess 标准函数    JiaJu   2004.10.16

  

******************************************************************/

#include "StdAfx.h"
#include "MantisChessDef.h"
#include "MantisChessStd.h"

/******************************************************************
CanGo:		判断一步棋合不合法

参数:
manmap:		棋位状态
man:		所移动的棋子
from:		所移动的棋子原始位置
to:			所要移动到的位置

返回值:		合法返回TRUE,不合法返回FALSE
******************************************************************/
BOOL  CanGo(POINT manpoint[6],int manmap[6][13],int man,const POINT &from,const POINT &to,int side)
{
	
	switch(man)	
		{
		case 0:
			if(to.y > from.y)return FALSE;
			if(to.y <= manpoint[3].y)return FALSE;
			if(abs(to.x-from.x)>0)return FALSE;	
			break;
		case 1:
			if(to.y > from.y)return FALSE;
			if(to.y <= manpoint[4].y)return FALSE;
			if(abs(to.x-from.x)>0)return FALSE;	
			break;
		case 2:
			if(to.y > from.y)return FALSE;
			if(to.y <= manpoint[5].y)return FALSE;
			if(abs(to.x-from.x)>0)return FALSE;	
			break;
		case 3:
			if(to.y < from.y)return FALSE;
			if(to.y >= manpoint[0].y)return FALSE;
			if(abs(to.x-from.x)>0)return FALSE;	
			break;
		case 4:
			if(to.y < from.y)return FALSE;
			if(to.y >= manpoint[1].y)return FALSE;
			if(abs(to.x-from.x)>0)return FALSE;	
			break;
		case 5:
			if(to.y < from.y)return FALSE;
			if(to.y >= manpoint[2].y)return FALSE;
			if(abs(to.x-from.x)>0)return FALSE;	
			break;

		default:	
			break;
		}

	if(!side&&to.x==1&&to.y-manpoint[3].y==1&&manpoint[4].y==1&&manpoint[5].y==1)
		return FALSE;
	if(!side&&to.x==2&&to.y-manpoint[4].y==1&&manpoint[3].y==1&&manpoint[5].y==1)
		return FALSE;
	if(!side&&to.x==3&&to.y-manpoint[5].y==1&&manpoint[3].y==1&&manpoint[4].y==1)
		return FALSE;

	return TRUE;	//上面的规则全通过!
}



/******************************************************************
FixManMap:		根据棋子坐标计算棋位状态

参数:
map:			棋位状态(存放结果)
manpoint:		棋子坐标
side:			轮到哪一方走

返回值:			无
******************************************************************/
void  FixManMap(int map[6][13],POINT manpoint[6],int side)
{
	memcpy(map,_defaultmap,65*sizeof(int));

	static POINT * pman;
	static int i;
	for(i=0;i<6;i++)
	{
		pman = & manpoint[i];
		if(pman->x)
			map[pman->x][pman->y]=i;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?