public AnalyzeData Clone() { var clone = new AnalyzeData(Value); if (_analyzed) { clone.Analyzed(); } return(clone); }
private void pattern11Row() { int row = 0; foreach (var rowlist in rowNumbers) { if (rowlist.IsAnalyzed()) { row++; continue; } rowlist.AnalyzeDatas.Reverse(); // 塗られている連続したマスを数える List <List <BitmapData> > data = new List <List <BitmapData> >(); { List <BitmapData> dataList = new List <BitmapData>(); for (int col = 0; col < colNumbers.Count; col++) { if (_bitmapData[row, col].IsPainted() == true) { dataList.Add(_bitmapData[row, col]); } else { if (dataList.Count != 0) { data.Add(dataList); dataList = new List <BitmapData>(); } } } if (dataList.Count != 0) { data.Add(dataList); } if (data.Count == 0) { row++; rowlist.AnalyzeDatas.Reverse(); continue; } } List <BitmapData> targetDataList = null; // 最大の物を取得する foreach (var datalist in data) { if (targetDataList == null) { targetDataList = datalist; } else if (targetDataList.Count < datalist.Count) { targetDataList = datalist; } } AnalyzeData targetRowList = null; bool sameflg = false; foreach (var rowdata in rowlist.AnalyzeDatas) { if (targetRowList == null) { targetRowList = rowdata; } else if (targetRowList.Value < rowdata.Value) { sameflg = false; targetRowList = rowdata; } else if (targetRowList.Value == rowdata.Value) { sameflg = true; } } if (sameflg) { rowlist.AnalyzeDatas.Reverse(); row++; continue; } if (targetDataList.Count == targetRowList.Value) { //解析済みにする targetRowList.Analyzed(); if (targetDataList[0].Col > 0) { if (_bitmapData[targetDataList[0].Row, targetDataList[0].Col - 1].IsValid() == false) { _bitmapData[targetDataList[0].Row, targetDataList[0].Col - 1].Mask(); } } if (targetDataList[targetDataList.Count - 1].Col < colNumbers.Count - 1) { if (_bitmapData[targetDataList[targetDataList.Count - 1].Row, targetDataList[targetDataList.Count - 1].Col + 1].IsValid() == false) { _bitmapData[targetDataList[targetDataList.Count - 1].Row, targetDataList[targetDataList.Count - 1].Col + 1].Mask(); } } } rowlist.AnalyzeDatas.Reverse(); row++; } }
private void pattern14Col() { int col = 0; foreach (var collist in colNumbers) { if (collist.IsAnalyzed()) { col++; continue; } // 有効な数字を取り出す List <AnalyzeData> aData = new List <AnalyzeData>(); foreach (var data in collist.AnalyzeDatas) { if (data.IsAnalyzed()) { continue; } aData.Add(data); } // 対象となるマスを抽出する List <List <BitmapData> > bitmapLists = extractTargetBitmapListsRow(col); bitmapLists.Reverse(); // 数字とマスを照合する if (bitmapLists.Count != aData.Count) { col++; continue; } AnalyzeData maxData = null; int remi = 0; for (int i = 0; i < aData.Count; i++) { if (maxData == null) { maxData = aData[i]; } else { if (maxData.Value < aData[i].Value) { remi = i; } } } if (maxData != null) { if (bitmapLists[remi].Count == maxData.Value) { foreach (var b in bitmapLists[remi]) { b.Paint(); } maxData.Analyzed(); } } col++; } }