public static void ExecMerge(DB_AGIN_Baccarat_Tbl tblOrg, DB_AGIN_Baccarat_Tbl tblNew, int dist) { #region For: Determine start index, for both int x_org_sta = -1; for (int x = 0; x < tblOrg.TotalCol; x++) { if (0 != tblOrg.Cells[x].Count && 2 > tblOrg.Cells[x][0].Matches.Count) { break; } x_org_sta = x; } int x_new_sta = (tblNew.TotalCol - 1 - dist) - (tblOrg.TotalCol - 1 - x_org_sta); if (-1 == x_org_sta) // For: Re-calculate start index, for origin { x_org_sta = 0; } if (0 > x_new_sta) // For: Re-calculate start index, for both { x_org_sta = -x_new_sta; x_new_sta = 0; } #endregion #region For: Allocating column/row, for origin int col_allocating = 0 != tblOrg.TotalCol ? dist : tblNew.TotalCol; while (0 != col_allocating) { col_allocating--; tblOrg.Cells.Add(new List <DB_AGIN_Baccarat_Cell>()); int row_allocating = 0; while (tblNew.TotalRow != row_allocating) { row_allocating++; tblOrg.Cells[tblOrg.Cells.Count - 1].Add(new DB_AGIN_Baccarat_Cell()); } } #endregion for (int x_new = x_new_sta; x_new < tblNew.TotalCol; x_new++) { for (int y_new = 0; y_new < tblNew.TotalRow; y_new++) { var cell_new = tblNew.Cells[x_new][y_new]; var cell_org = tblOrg.Cells[x_org_sta + (x_new - x_new_sta)][y_new]; #region For: Copy infomation, for origin cell_org.PercentB = cell_new.PercentB; cell_org.PercentG = cell_new.PercentG; cell_org.PercentR = cell_new.PercentR; cell_org.Matches = cell_new.Matches; #endregion } } tblOrg.UpdTotal(); tblOrg.UpdCoordinate(); }
public static int DistMerge(DB_AGIN_Baccarat_Tbl tblOrg, DB_AGIN_Baccarat_Tbl tblNew, int distMax) { int dist = 0; bool merged = 0 == tblOrg.TotalCol; // For: Can merge with origin was empty for (int x_new = tblNew.TotalCol - 1; x_new > -1; x_new--) { // For: Determine distance, for new dist = tblNew.TotalCol - 1 - x_new; if (distMax < dist) // For: Distance too far, not merge { break; } // For: Determine min index, for origin int x_org_min = tblOrg.TotalCol - tblNew.TotalCol + dist; if (0 > x_org_min) // For: Columns not enough, ignore it { continue; } // For: Check cells were order, for origin bool flag = true; for (int x_org = tblOrg.TotalCol - 1; x_org > x_org_min - 1; x_org--) { for (int y_org = tblOrg.TotalRow - 1; y_org > -1; y_org--) { DB_AGIN_Baccarat_Cell cell_org = tblOrg.Cells[x_org][y_org]; DB_AGIN_Baccarat_Cell cell_new = tblNew.Cells[x_org - x_org_min][y_org]; string color_org = cell_org.Matches.Contains("circle-blue") ? "circle-blue" : cell_org.Matches.Contains("circle-red") ? "circle-red" : ""; string color_new = cell_new.Matches.Contains("circle-blue") ? "circle-blue" : cell_new.Matches.Contains("circle-red") ? "circle-red" : ""; if (0 != cell_org.Order && color_org != color_new) // For: Cell was order but different, ignore it { flag = false; break; } } if (!flag) { break; } } if (flag) // For: Can merge with dist, for new { merged = true; break; } } return(merged ? dist : -1); }
public DB_AGIN_Baccarat_Tbl Clone() { DB_AGIN_Baccarat_Tbl tbl = new DB_AGIN_Baccarat_Tbl(); tbl.TotalCol = TotalCol; tbl.TotalRow = TotalRow; tbl.TotalInvalid = TotalInvalid; tbl.LatestOrder = LatestOrder; tbl.LatestOrderCircle = LatestOrderCircle; tbl.LatestOrderX = LatestOrderX; tbl.LatestOrderY = LatestOrderY; tbl.LatestOrderXR = LatestOrderXR; tbl.LatestOrderYR = LatestOrderYR; Cells.ForEach(x => { List <DB_AGIN_Baccarat_Cell> cells = new List <DB_AGIN_Baccarat_Cell>(); x.ForEach(y => { cells.Add(y.Clone()); }); tbl.Cells.Add(cells); }); return(tbl); }
public void HdlAGIN(string name) { try { string file_path = Path.Combine(CONFIG_DAFANBA_DIR_PRINT, name); if (File.Exists(file_path)) { AGIN_3840x2160_Baccarat agin_3840x2160_baccarat = null; ImageHelper.AnalysisImg_AGIN_3840x2160(file_path, out agin_3840x2160_baccarat); List <DB_AGIN_Baccarat> agins_img = DB_AGIN_Baccarat.ExtractImg(agin_3840x2160_baccarat, name, DateTime.Now, 0, DateTime.Now, 0); foreach (DB_AGIN_Baccarat agin_img in agins_img) { DB_AGIN_Baccarat agin_latest = LatestAGINs.Where(x => x.CoordinateX == agin_img.CoordinateX && x.CoordinateY == agin_img.CoordinateY).FirstOrDefault(); #region For: Save/Clean baccarat if (!new int[3] { 0, 203, 204 }.Contains(agin_img.DataAnalysis.TotalInvalid)) { agin_img.SaveDbTrack(ConnHelper); } if (0 != agin_img.DataAnalysis.TotalInvalid) { continue; } agin_img.Id = 0; agin_img.DataAnalysis.DelEmpty(); #endregion #region For: Merge baccarat bool merged = false; if (null != agin_latest) { int dist = DB_AGIN_Baccarat_Tbl.DistMerge( agin_latest.DataAnalysis, agin_img.DataAnalysis, DB_AGIN_Baccarat_Tbl.DistMax(agin_latest.DataAnalysis, agin_img.DataAnalysis)); if (-1 != dist) { DB_AGIN_Baccarat_Tbl.ExecMerge(agin_latest.DataAnalysis, agin_img.DataAnalysis, dist); agin_latest.FileNames = Regex.Replace(agin_latest.FileNames + agin_img.FileNames, @"(;;)", ";"); agin_latest.LastModifiedOn = agin_img.LastModifiedOn; agin_latest.LastModifiedBy = agin_img.LastModifiedBy; merged = true; } } #endregion #region For: Add baccarat if (!merged) { if (null != agin_latest) { LatestAGINs.Remove(agin_latest); } LatestAGINs.Add(agin_img); agin_latest = LatestAGINs.Single(x => x.CoordinateX == agin_img.CoordinateX && x.CoordinateY == agin_img.CoordinateY); } #endregion #region For: Order baccarat agin_latest.DataAnalysis.UpdOrder( agin_latest.DataAnalysis.LatestOrder, agin_latest.DataAnalysis.LatestOrderCircle, agin_latest.DataAnalysis.LatestOrderX, agin_latest.DataAnalysis.LatestOrderY, agin_latest.DataAnalysis.LatestOrderXR, agin_latest.DataAnalysis.LatestOrderYR); #endregion #region For: Save baccarat agin_latest.SaveDb(ConnHelper); #endregion #region For: Alert via pattern(s) #region For: Baccarat pattern IEnumerable <DB_AGIN_Baccarat_Check_RstItem> pattern = agin_latest.ChkPattern(CONFIG_DAFANBA_ALERT_BACCARAT_PATTERN); foreach (DB_AGIN_Baccarat_Check_RstItem item in pattern) { AlertBaccaratPattern(agin_latest.CoordinateX, agin_latest.CoordinateY, item.NFreq, item.CellsFreq.Count, item.CellsSub.Count, item.ColorsFreq, file_path); } #endregion #endregion } } } catch (Exception ex) { throw new Exception(string.Format("{0}{1}", ex.Message, ex.StackTrace), ex); } }
public static int DistMax(DB_AGIN_Baccarat_Tbl tblOrg, DB_AGIN_Baccarat_Tbl tblNew) { return(tblNew.TotalCol / 2); }
public DB_AGIN_Baccarat() { DataAnalysis = new DB_AGIN_Baccarat_Tbl(); AlertPattern = new List <DB_AGIN_Baccarat_Check_RstItem>(); }