//抽象数据结构,供插件使用,这是一个数据插件
public abstract class AbstractBlock2D
{
private AbstractBlock2D left;
private AbstractBlock2D right;
private AbstractBlock2D up;
private AbstractBlock2D down;
public abstract int X { get; set; }
public abstract int Y { get; set; }
public abstract int PlusX(int data);与另一个数据的X相加
public abstract int PlusY(int data);与另一个数据的Y相加
public abstract AbstractBlock2D Plus(AbstractBlock2D data);与另一数据相加
public AbstractBlock2D Left { get => left; set => left = value; }返回左边方块
public AbstractBlock2D Right { get => right; set => right = value; }返回右边方块
public AbstractBlock2D Up { get => up; set => up = value; }返回上边方块
public AbstractBlock2D Down { get => down; set => down = value; }返回下边方块
}
public class SearchDirection2D
{
public T Search<T>(T data,Direction direction) where T:AbstractBlock2D
{
switch (direction)
{
case Direction.Up:
return (T)data.Up;
case Direction.Down:
return (T)data.Down;
case Direction.Left:
return (T)data.Left;
case Direction.Right:
return (T)data.Right;
default:
return null;
}
}
}
其中AbstractBlock2D是抽象数据结构,它包含了一个2d十字链表所需要的基本的定义,也就是说定义了一个抽象的2d十字链表。同时定义了抽象的数据基本操作,具体含义看代码注释。
插件中的public T Search<T>(T data,Direction direction) where T:AbstractBlock2D方法是一个搜索周围方块的方法,给定一个方向他将会返回一个特定方向的方块。其中这个它依赖于抽象数据AbstractBlock2D所以规定范型T必须来自AbstractBlock2D类及其派生类。