📄 chessman.cs
字号:
return false;
}
private bool CanMoveUp2(BlankPosition _blankPosition)
{
if (_blankPosition.IsBlank(_position - 8) && _blankPosition.IsBlank(_position - 16))
{
// 设置棋子新位置
_newPosition = _position - 16;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position - 8;
return true;
}
return false;
}
private bool CanMoveDown2(BlankPosition _blankPosition)
{
if (_blankPosition.IsBlank(_position + 8) && _blankPosition.IsBlank(_position + 16))
{
// 设置棋子新位置
_newPosition = _position + 16;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position + 8;
return true;
}
return false;
}
private bool CanMoveLeft2(BlankPosition _blankPosition)
{
if (_blankPosition.IsBlank(_position - 1) && _blankPosition.IsBlank(_position - 2))
{
// 设置棋子新位置
_newPosition = _position - 2;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position - 1;
return true;
}
return false;
}
private bool CanMoveRight2(BlankPosition _blankPosition)
{
if (_blankPosition.IsBlank(_position + 1) && _blankPosition.IsBlank(_position + 2))
{
// 设置棋子新位置
_newPosition = _position + 2;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position + 1;
return true;
}
return false;
}
private void CanMoveTurning(BlankPosition _blankPosition, CallBackDelegate _callback)
{
if (CanMoveUp(_blankPosition))
{
// 上移回调
_callback(_newPosition, _newBlankPosition, MoveMethod.Up);
if (_blankPosition.IsBlank(_position - 7)) // 右上
{
_newPosition = _position - 7;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position - 8;
// 右上回调
_callback(_newPosition, _newBlankPosition, MoveMethod.Turning);
return;
}
if (_blankPosition.IsBlank(_position - 9)) // 左上
{
_newPosition = _position - 9;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position - 8;
// 左上回调
_callback(_newPosition, _newBlankPosition, MoveMethod.Turning);
return;
}
}
if (CanMoveDown(_blankPosition))
{
// 下移回调
_callback(_newPosition, _newBlankPosition, MoveMethod.Down);
if (_blankPosition.IsBlank(_position + 9)) // 右下
{
_newPosition = _position + 9;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position + 8;
// 右下回调
_callback(_newPosition, _newBlankPosition, MoveMethod.Turning);
return;
}
if (_blankPosition.IsBlank(_position + 7)) // 左下
{
_newPosition = _position + 7;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position + 8;
// 左下回调
_callback(_newPosition, _newBlankPosition, MoveMethod.Turning);
return;
}
}
if (CanMoveLeft(_blankPosition))
{
// 左回调
_callback(_newPosition, _newBlankPosition, MoveMethod.Left);
if (_blankPosition.IsBlank(_position - 9)) // 左上
{
_newPosition = _position - 9;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position - 1;
// 左上回调
_callback(_newPosition, _newBlankPosition, MoveMethod.Turning);
return;
}
if (_blankPosition.IsBlank(_position + 7)) // 左下
{
_newPosition = _position + 7;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position - 1;
// 左下回调
_callback(_newPosition, _newBlankPosition, MoveMethod.Turning);
return;
}
}
if (CanMoveRight(_blankPosition))
{
// 右回调
_callback(_newPosition, _newBlankPosition, MoveMethod.Right);
if (_blankPosition.IsBlank(_position - 7)) // 右上
{
_newPosition = _position - 7;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position + 1;
// 右上回调
_callback(_newPosition, _newBlankPosition, MoveMethod.Turning);
return;
}
if (_blankPosition.IsBlank(_position + 9)) // 右下
{
_newPosition = _position + 9;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position + 1;
// 右下回调
_callback(_newPosition, _newBlankPosition, MoveMethod.Turning);
return;
}
}
}
private void ResetNewBlankPosition1(BlankPosition _blankPosition)
{
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _blankPosition.Pos2;
}
private void ResetNewBlankPosition2(BlankPosition _blankPosition)
{
_newBlankPosition.Pos1 = _blankPosition.Pos1;
_newBlankPosition.Pos2 = _position;
}
#endregion
public override ChessmanType chessmanType
{
get
{
return ChessmanType.Solider;
}
}
public override void CheckAvailableSteps(BlankPosition _blankPosition, CallBackDelegate _callback)
{
// 包括了拐角以及上下左右移动
CanMoveTurning(_blankPosition, _callback);
if (CanMoveUp2(_blankPosition))
_callback(_newPosition, _newBlankPosition, MoveMethod.Up2);
if (CanMoveDown2(_blankPosition))
_callback(_newPosition, _newBlankPosition, MoveMethod.Down2);
if (CanMoveLeft2(_blankPosition))
_callback(_newPosition, _newBlankPosition, MoveMethod.Left2);
if (CanMoveRight2(_blankPosition))
_callback(_newPosition, _newBlankPosition, MoveMethod.Right2);
return;
}
}
public class VChessman : Chessman
{
public VChessman(int x, int y)
: base(x, y)
{
}
#region Private Functions
private bool CanMoveUp(BlankPosition _blankPosition)
{
if (_blankPosition.IsBlank(_position - 8))
{
// 设置棋子新位置
_newPosition = _position - 8;
// 设置新的空白位置
if (_blankPosition.Pos1 == _position - 8)
{
_newBlankPosition.Pos1 = _position + 8;
_newBlankPosition.Pos2 = _blankPosition.Pos2;
}
else
{
_newBlankPosition.Pos1 = _blankPosition.Pos1;
_newBlankPosition.Pos2 = _position + 8;
}
return true;
}
return false;
}
private bool CanMoveDown(BlankPosition _blankPosition)
{
if (_blankPosition.IsBlank(_position + 16))
{
// 设置棋子新位置
_newPosition = _position + 8;
// 设置新的空白位置
if (_blankPosition.Pos1 == _position + 16)
{
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _blankPosition.Pos2;
}
else
{
_newBlankPosition.Pos1 = _blankPosition.Pos1;
_newBlankPosition.Pos2 = _position;
}
return true;
}
return false;
}
private bool CanMoveLeft(BlankPosition _blankPosition)
{
if (_blankPosition.IsBlank(_position - 1) && _blankPosition.IsBlank(_position + 7))
{
// 设置棋子新位置
_newPosition = _position - 1;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position + 8;
return true;
}
return false;
}
private bool CanMoveRight(BlankPosition _blankPosition)
{
if (_blankPosition.IsBlank(_position + 1) && _blankPosition.IsBlank(_position + 9))
{
// 设置棋子新位置
_newPosition = _position + 1;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position + 8;
return true;
}
return false;
}
private bool CanMoveUp2(BlankPosition _blankPosition)
{
if (_blankPosition.IsBlank(_position - 8) && _blankPosition.IsBlank(_position - 16))
{
// 设置棋子新位置
_newPosition = _position - 16;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position + 8;
return true;
}
return false;
}
private bool CanMoveDown2(BlankPosition _blankPosition)
{
if (_blankPosition.IsBlank(_position + 16) && _blankPosition.IsBlank(_position + 24))
{
// 设置棋子新位置
_newPosition = _position + 16;
// 设置新的空白位置
_newBlankPosition.Pos1 = _position;
_newBlankPosition.Pos2 = _position + 8;
return true;
}
return false;
}
#endregion
public override ChessmanType chessmanType
{
get
{
return ChessmanType.VChessman;
}
}
public override void CheckAvailableSteps(BlankPosition _blankPosition, CallBackDelegate _callback)
{
if (CanMoveLeft(_blankPosition))
_callback(_newPosition, _newBlankPosition, MoveMethod.Left);
if (CanMoveRight(_blankPosition))
_callback(_newPosition, _newBlankPosition, MoveMethod.Right);
if (CanMoveUp(_blankPosition))
_callback(_newPosition, _newBlankPosition, MoveMethod.Up);
if (CanMoveDown(_blankPosition))
_callback(_newPosition, _newBlankPosition, MoveMethod.Down);
if (CanMoveUp2(_blankPosition))
_callback(_newPosition, _newBlankPosition, MoveMethod.Up2);
if (CanMoveDown2(_blankPosition))
_callback(_newPosition, _newBlankPosition, MoveMethod.Down2);
return;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -