5.方块变形信息类
5.1 知识点
要实现的代码
相关示图
主要操作
发现每一堆方块其实就是有一个原点方块。旋转就是按照这个原点方块修改其他方块的坐标。所以知道原点方块位置可以算出其他方块的位置。
创建方块信息类,用于搬砖工人搬不同的方块时的获得不同方块的信息。
创建一个方块信息坐标的 List,List 装的类型是整形数组。方块信息类构造函数初始化方块信息坐标的 List,写一个 Switch 根据方块类型,将各方块集合的四种形状坐标丢到 list 里。
编写一个索引器,用于根据索引快速获取位置偏移信息。
提供 list 获取长度的属性。
5.2 知识点代码
BlockInfo
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharp实践教学
{
class BlockInfo
{
//方块信息坐标的容器
private List<Position[]> list;
public BlockInfo(E_DrawType type)
{
//必须要初始化才能往里面装东西
list = new List<Position[]>();
switch (type)
{
case E_DrawType.Cube:
//添加了一个形状的位置信息
list.Add(new Position[3] {
new Position(2,0),
new Position(0,1),
new Position(2,1)
});
break;
case E_DrawType.Line:
//初始化 长条形状的4种形态的坐标信息
list.Add(new Position[3] {
new Position(0,-1),
new Position(0,1),
new Position(0,2)
});
list.Add(new Position[3] {
new Position(-4,0),
new Position(-2,0),
new Position(2,0)
});
list.Add(new Position[3] {
new Position(0,-2),
new Position(0,-1),
new Position(0,1)
});
list.Add(new Position[3] {
new Position(-2,0),
new Position(2,0),
new Position(4,0)
});
break;
case E_DrawType.Tank:
list.Add(new Position[3] {
new Position(-2,0),
new Position(2,0),
new Position(0,1)
});
list.Add(new Position[3] {
new Position(0,-1),
new Position(-2,0),
new Position(0,1)
});
list.Add(new Position[3] {
new Position(0,-1),
new Position(-2,0),
new Position(2,0)
});
list.Add(new Position[3] {
new Position(0,-1),
new Position(2,0),
new Position(0,1)
});
break;
case E_DrawType.Left_Ladder:
list.Add(new Position[3]{
new Position(0,-1),
new Position(2,0),
new Position(2,1)
});
list.Add(new Position[3]{
new Position(2,0),
new Position(0,1),
new Position(-2,1)
});
list.Add(new Position[3]{
new Position(-2,-1),
new Position(-2,0),
new Position(0,1)
});
list.Add(new Position[3]{
new Position(0,-1),
new Position(2,-1),
new Position(-2,0)
});
break;
case E_DrawType.Right_Ladder:
list.Add(new Position[3]{
new Position(0,-1),
new Position(-2,0),
new Position(-2,1)
});
list.Add(new Position[3]{
new Position(-2,-1),
new Position(0,-1),
new Position(2,0)
});
list.Add(new Position[3]{
new Position(2,-1),
new Position(2,0),
new Position(0,1)
});
list.Add(new Position[3]{
new Position(0,1),
new Position(2,1),
new Position(-2,0)
});
break;
case E_DrawType.Left_Long_Ladder:
list.Add(new Position[3]{
new Position(-2,-1),
new Position(0,-1),
new Position(0,1)
});
list.Add(new Position[3]{
new Position(2,-1),
new Position(-2,0),
new Position(2,0)
});
list.Add(new Position[3]{
new Position(0,-1),
new Position(2,1),
new Position(0,1)
});
list.Add(new Position[3]{
new Position(2,0),
new Position(-2,0),
new Position(-2,1)
});
break;
case E_DrawType.Right_Long_Ladder:
list.Add(new Position[3]{
new Position(0,-1),
new Position(0,1),
new Position(2,-1)
});
list.Add(new Position[3]{
new Position(2,0),
new Position(-2,0),
new Position(2,1)
});
list.Add(new Position[3]{
new Position(0,-1),
new Position(-2,1),
new Position(0,1)
});
list.Add(new Position[3]{
new Position(-2,-1),
new Position(-2,0),
new Position(2,0)
});
break;
default:
break;
}
}
/// <summary>
/// 提供给外部根据索引快速获取 位置偏移信息的
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public Position[] this[int index]
{
get
{
if (index < 0)
return list[0];
else if (index >= list.Count)
return list[list.Count - 1];
else
return list[index];
}
}
/// <summary>
/// 提供给外部 获取 形态有几种
/// </summary>
public int Count { get => list.Count; }
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com