FlagMoveRule.cs
(开头部分) 19KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Drawing;
using System.Windows.Forms;
//该源码下载自win.51aspx.com(51aspx.com)
namespace 智能象棋游戏
{
//*****自定义类*****
//*****记录旗盘位置特点类,各个旗子的走法*****
//特点:代码简练; 没有必要考虑所有情况,而只考虑情况真的情况; 能够避免作蔽,程序规定必须按每个旗子的走法走旗
//花费时间:1天 难度:2级
public class FlagMoveRule:智能象棋游戏.FlagContainer
{
public bool GenEatGen=false;
public FlagMoveRule()
{
this.rednum=0;
this.bluenum=0;
}
public FlagMoveRule(string[] soldiers,Point[] allPoint,Point[] partPoint,int width,int height): base(soldiers,allPoint,partPoint,width,height)
{
}
//*****为旗子判断步伐时候:为了提高执行效率,只判断旗子可以走的情况:
//***** 1.自己周围的规则点是不是在旗盘上; 2.如果周围的规则点在旗盘上,则该点是否是自己的旗子,如果是,则不允许走
public bool HorseFoot(Point fromPoint,Point toPoint) //判断***马***的走法是否合理
{
int fromIndex=this.CountIndex(fromPoint); //求标志起点信息的一维数组的索引
int toIndex=this.CountIndex(toPoint); //求标志终点信息的一维数组的索引
if(fromPoint==toPoint) //如果起点和终点是同一个点,则允许放回旗子,重新选其它路
{
return true;
}
if(who[fromIndex].Equals(who[toIndex])) //如果起点和终点是同一边的旗子,则不能走
{
return false;
}
double twoPoint_Right_Distance=Math.Sqrt((this.width*this.width)+(width+width)*(width+width));
double twoPoint_True_Distance=Math.Sqrt((fromPoint.X-toPoint.X)*(fromPoint.X-toPoint.X)+(fromPoint.Y-toPoint.Y)*(fromPoint.Y-toPoint.Y));
if(this.GetNextPoint(fromPoint,-2,1)==toPoint||this.GetNextPoint(fromPoint,-2,-1)==toPoint) //当马向上跳时有两种跳法(左上日和右上日)
if(this.have[this.CountIndex(this.GetNextPoint(fromPoint,-1,0))]==false) //起点上面没有旗子,也就是不 "挡马腿" 时可以往上走旗
{
if(twoPoint_True_Distance<=twoPoint_Right_Distance)
return true;
}
if(this.GetNextPoint(fromPoint,2,1)==toPoint||this.GetNextPoint(fromPoint,2,-1)==toPoint) //同上,只是变为向下跳马的情况
if(this.have[this.CountIndex(this.GetNextPoint(fromPoint,1,0))]==false)
{
if(twoPoint_True_Distance<=twoPoint_Right_Distance)
return true;
}
if(this.GetNextPoint(fromPoint,1,2)==toPoint||this.GetNextPoint(fromPoint,-1,2)==toPoint) //同上,只是变为向右跳马的情况
if(this.have[this.CountIndex(this.GetNextPoint(fromPoint,0,1))]==false)
{
if(twoPoint_True_Distance<=twoPoint_Right_Distance+5)
return true;
}
if(this.GetNextPoint(fromPoint,-1,-2)==toPoint||this.GetNextPoint(fromPoint,1,-2)==toPoint) //同上,只是变为向左跳马的情况
后面还有 426 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
