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 + -
显示快捷键?