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 积分,解读结果公开显示在下面。

还没有人解读过这个文件。