final List<MapItem> map_list = [
MapItem(fromIndex:1, pathType:MapType.Right, toIndex:2, stateType: MapType.Start),
MapItem(fromIndex:2, pathType:MapType.Bottom, toIndex:5, stateType: MapType.Road),
MapItem(fromIndex:5, pathType:MapType.Left, toIndex:4, stateType: MapType.Road),
MapItem(fromIndex:5, pathType:MapType.Right, toIndex:6, stateType: MapType.Road),
MapItem(fromIndex:6, pathType:MapType.Top, toIndex:3, stateType: MapType.Road),
MapItem(fromIndex:8, pathType:MapType.Left, toIndex:7, stateType: MapType.Road),
MapItem(fromIndex:8, pathType:MapType.Right, toIndex:9, stateType: MapType.End)
];
void main() {
MazeOptionHandler().init(x:3, y:3, mapList:map_list);
}
class MazeOptionHandler {
int x = 0;
int y = 0;
List<MapItem> _mapList = [];
List<List<ModelItem>> _dataList = [];
init({int x,int y,List<MapItem> mapList}) {
this.x = x;
this.y = y;
this._mapList = mapList;
_createItems();
}
increment() {}
_createItems(){
int index = 1;
List<ModelItem> items = [];
for(int i = 0; i < x; i++){
List<ModelItem> rows = [];
for(int j = 0; j < y; j++){
print("$i:$j");
ModelItem item = ModelItem(xy: [i+1,j+1], index: index++);
rows.add(item);
items.add(item);
}
_dataList.add(rows);
}
_mapList.forEach((MapItem mapItem){
int fromIndex = mapItem.fromIndex;
MapType pathType = mapItem.pathType;
ModelItem item = items[fromIndex -1];
if(pathType == MapType.Left) item.leftNode = item;
});
}
}
class ModelItem {
List<int> point = [0, 0, 0, 0];
List<int> xy = [0, 0];
int index = 0;
int size = 0;
bool selected = false;
bool isStart = false;
bool isEnd = false;
ModelItem topNode;
ModelItem leftNode;
ModelItem rightNode;
ModelItem bottomNode;
ModelItem({this.xy,
this.index,
this.leftNode,
this.rightNode,
this.topNode,
this.bottomNode});
@override
toString(){
return {
"xy": xy,
"index": index,
"topNode": topNode,
"leftNode": leftNode,
"rightNode": rightNode,
"bottomNode": bottomNode
}.toString();
}
}
enum MapType{
Left,
Right,
Top,
Bottom,
Start,
End,
Road
}
class MapItem {
int fromIndex;
MapType pathType;
int toIndex;
MapType stateType;
MapItem({this.fromIndex,this.pathType,this.toIndex,this.stateType});
@override
toString(){
return {
"fromIndex": fromIndex,
"pathType": pathType,
"toIndex": toIndex,
"stateType": stateType
}.toString();
}
}