private void button5_Click(object sender, EventArgs e) { String ex = ""; if (name.Text == "" && surname.Text == "" && secname.Text == "") { ex = "У кролика нет имени!\n"; } //if (rab.address == OneRabbit.NullAddress) ex += "У кролика нет места жительства!\n"; if (gens.Items.Count == 0) { int level = 0; int rab_gen_depth = Engine.opt().getIntOption(Options.OPT_ID.RAB_GEN_DEPTH); RabbitGen.GetFullGenLevels(_rab.RabGenoms, ref level); //if (rab_gen_depth > level) { // ex += "У кролика нет ни одного Номера Гена!\n"; //} } if (ex != "") { _can_commit = false; MessageBox.Show(this, ex, "Невозможно продолжить", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { _can_commit = true; applyData(); updateData(); } }
/// <summary> /// Если 7 поколений рожденных прошло через программу, то номера генов отметаются. /// </summary> /// <returns>Генезис ID</returns> private static int bornRabbitGenesis(MySqlConnection sql, OneRabbit fml, OneRabbit ml) { int fLevel = 0, mLevel = 0; fml.RabGenoms = RabbitGenGetter.GetRabGenoms(sql, fml.ID); RabbitGen.GetFullGenLevels(fml.RabGenoms, ref fLevel); if (ml != null) { ml.RabGenoms = RabbitGenGetter.GetRabGenoms(sql, ml.ID); RabbitGen.GetFullGenLevels(ml.RabGenoms, ref mLevel); } MySqlCommand cmd = new MySqlCommand("SELECT o_value FROM options WHERE o_name='opt' AND o_subname='rab_gen_depth'", sql); object o = cmd.ExecuteScalar(); if (o != null) { int rab_gen_depth = 0; if (int.TryParse(o.ToString(), out rab_gen_depth)) { if (Math.Min(fLevel, mLevel) >= rab_gen_depth) { return(0); } } } return(RabbitGenGetter.MakeCommonGenesis(sql, fml.Genoms, (ml != null ? ml.Genoms : fml.Genoms), fml.Zone)); }
public RabbitPair GetHalhPairData(RabbitGen rg, ref int pairsCount) { RabbitGen rabbM = Engine.db().getRabbitGen(rg.MotherId); RabbitGen rabbF = Engine.db().getRabbitGen(rg.FatherId); if ((rabbM != null) || (rabbF != null)) { pairsCount++; RabbitPair rp = new RabbitPair(); rp._id = pairsCount; _RabbitPairs.Add(pairsCount, rp); rp.SetParentControl(RabbitsHolder); rp.SetMom(rabbM); rp.SetDad(rabbF); log.Debug(string.Format("Getting parents for rabbit pair #{0:d} mom.", pairsCount)); GetPairData(rp, ref pairsCount); return(rp); } else { log.Debug(string.Format("There's no parents :(", pairsCount)); return(null); } }
public void DrawRabbit(RabbitGen rbt) { Dictionary <int, Color> b_colors = new Dictionary <int, Color>(); b_colors = Engine.db().getBreedColors(); ProgressPanel.Visible = true; RabbitsHolder.Visible = false; //_rootRabbitData = rbt; _rootRabbit = new RabbitBar(); _rootRabbit.SetRabbit(rbt); _rootRabbit.ReplaceGenomeColors(b_colors); _rootRabbit.BackColor = this.BackColor; _rootRabbit.WindowRabbitID = rbt.ID; RabbitsHolder.Controls.Add(_rootRabbit); ///рисуем мать и отца выделенного кролика RabbitPair parents = new RabbitPair(); _rootRabbitPair = parents; _rootRabbitPair.WindowRabbitID = rbt.ID; _rootRabbitPair.SearchGoingOn += new EvSearchGoingOn(SearchProc); parents.Location = new Point(1000, 100); int cnt = 0; _RabbitPairs.Clear(); _RabbitPairs.Add(cnt, parents); parents.ReplaceGenomeColors(b_colors); RabbitGen rabbF = Engine.db().getRabbitGen(rbt.FatherId); RabbitGen rabbM = Engine.db().getRabbitGen(rbt.MotherId); parents.SetMom(rabbM); parents.SetDad(rabbF); parents._id = cnt; RabbitsHolder.SuspendLayout(); parents.SetParentControl(RabbitsHolder); GetPairData(parents, ref cnt); CenterTree(); CenterHolder(); ProgressPanel.Visible = false; RabbitsHolder.Visible = true; RabbitsHolder.ResumeLayout(); this.ScrollControlIntoView(_rootRabbit); this.ActiveControl = _rootRabbit; //RabbitsHolder.AutoScrollMinSize }
public static void getRabbitRodK(MySqlConnection sql, ref RabbitGen rabbit) { if (rabbit.Sex == Rabbit.SexType.FEMALE) { MySqlCommand cmd = new MySqlCommand(String.Format(@"SELECT COALESCE((sum(f_children)-sum(f_killed)+sum(f_added))/(sum(f_children)+sum(f_added)),0) k FROM f***s WHERE f_rabid={0:d};", rabbit.ID), sql); MySqlDataReader rd = cmd.ExecuteReader(); if (rd.Read()) { rabbit.RodK = rd.GetFloat("k"); } rd.Close(); } if (rabbit.Sex == Rabbit.SexType.MALE) { MySqlCommand cmd = new MySqlCommand(String.Format(@"SELECT (SELECT COUNT(f_state) FROM f***s WHERE f_partner={0:d} AND f_state='okrol' AND f_times=1) o, (SELECT COUNT(f_state) FROM f***s WHERE f_partner={0:d} AND f_state='proholost' AND f_times=1) p;" , rabbit.ID), sql ); MySqlDataReader rd = cmd.ExecuteReader(); if (rd.Read()) { float o = rd.GetFloat("o"); float p = rd.GetFloat("p"); if (p + 0 == 0) { rabbit.RodK = 0; } else { rabbit.RodK = o / (o + p); } } rd.Close(); } }
public static void getRabbitPriplodK(MySqlConnection sql, ref RabbitGen rabbit) { string f = "f_rabid"; if (rabbit.Sex == Rabbit.SexType.MALE) { f = "f_partner"; } MySqlCommand cmd = new MySqlCommand(String.Format(@" SELECT coalesce(sum(f_children)/(sum(f_times)-( SELECT count(f_state) FROM f***s WHERE {1}={0:d} AND f_state='sukrol')),0) k FROM f***s WHERE {1}={0:d};" , rabbit.ID, f), sql); MySqlDataReader rd = cmd.ExecuteReader(); if (rd.Read()) { rabbit.PriplodK = rd.GetFloat("k"); } rd.Close(); }
public static RabbitGen GetRabbitGen(MySqlConnection sql, int rid) { if (rid == 0) { return(null); } const string QUERY = @"SELECT Coalesce(r_mother,0) AS r_mother, Coalesce(r_father,0) AS r_father, r_sex, Coalesce(n1.n_name, 0) name, Coalesce(n2.n_surname, 0) surname, Coalesce(n2.n_surname, 0) secname, b.b_color, r_breed, b.b_name FROM {0:s} INNER JOIN breeds b ON b.b_id = r_breed LEFT JOIN names n1 ON n1.n_id = r_name LEFT JOIN names n2 ON n2.n_id = r_surname LEFT JOIN names n3 ON n3.n_id = r_secname WHERE r_id = {1:d} LIMIT 1;"; Boolean IsDead = false; MySqlCommand cmd = new MySqlCommand(String.Format(QUERY, "rabbits", rid), sql); MySqlDataReader rd = cmd.ExecuteReader(); if (!rd.HasRows) { IsDead = true; rd.Close(); rd.Dispose(); cmd = new MySqlCommand(String.Format(QUERY, "dead", rid), sql); rd = cmd.ExecuteReader(); } RabbitGen r = new RabbitGen(); r.ID = rid; if (rd.Read()) { r.FatherId = rd.GetInt32("r_father"); //0 r.MotherId = rd.GetInt32("r_mother"); //1 //string sx = rd.GetString("r_sex"); //2 //r.Sex = Rabbit.SexType.VOID; //if (sx == "male") //{ // r.Sex = Rabbit.SexType.MALE; //} //if (sx == "female") //{ // r.Sex = Rabbit.SexType.FEMALE; //} r.Sex = Rabbit.GetSexType(rd.GetString("r_sex")); r.Name = rd.GetString("name"); //3 r.Surname = rd.GetString("surname"); //4 r.Secname = rd.GetString("secname"); //5 r.BreedColorName = rd.IsDBNull(rd.GetOrdinal("b_color")) ? "" : rd.GetString("b_color"); //5 r.IsDead = IsDead; int res; if (int.TryParse(r.BreedColorName, System.Globalization.NumberStyles.HexNumber, null, out res)) { r.BreedColor = Color.FromArgb(res); } else { r.BreedColor = Color.FromName(r.BreedColorName); } r.BreedId = rd.GetInt32("r_breed"); //6 r.BreedName = rd.IsDBNull(rd.GetOrdinal("b_name")) ? "" : rd.GetString("b_name"); //7 } else { r = null; } // rd.HasRows rd.Close(); if (r != null) { getRabbitPriplodK(sql, ref r); getRabbitRodK(sql, ref r); } return(r); }
private void fillTable() { cs.PrepareForUpdate(); Filters flt = new Filters(); flt[Filters.RAB_ID] = _rabFemale.ID.ToString(); flt[Filters.HETEROSIS] = chHetererosis.Checked ? "1" : "0"; flt[Filters.INBREEDING] = chInbreed.Checked ? "1" : "0"; flt[Filters.MALE_REST] = _opt_malewait.ToString(); flt[Filters.MAKE_CANDIDATE] = _opt_makeCand.ToString(); flt[Filters.SHOW_CANDIDATE] = chCandidates.Checked ? "1" : "0"; flt[Filters.SHOW_REST] = chRest.Checked ? "1" : "0"; //TODO здесь трахатели идеалогически неверно передаются через объекты Трахов FuckPartner[] fs = Engine.db().GetAllFuckers(flt); listView1.BeginUpdate(); foreach (FuckPartner fP in fs) { bool heter = (fP.BreedId != _rabFemale.BreedID); bool inbr = RabNetEngHelper.inbreeding(_rabFemale.Genoms, fP.OldGenoms); ListViewItem li = listView1.Items.Add(fP.FullName); li.UseItemStyleForSubItems = false; if (fP.LastFuck != DateTime.MinValue && DateTime.Now < fP.LastFuck.Date.AddDays(_opt_malewait)) { li.SubItems[IND_NAME].ForeColor = chRest.ForeColor; } li.Tag = fP; li.SubItems.Add("Мальчик"); if (fP.Status == 1 || (fP.Status == 0 && fP.Age >= _opt_makeCand)) { li.SubItems[IND_STATE].Text = "Кандидат"; li.SubItems[IND_STATE].ForeColor = chCandidates.ForeColor; } if (fP.Status == 2) { li.SubItems[IND_STATE].Text = "Производитель"; } li.SubItems.Add(_breeds[fP.BreedId]); li.SubItems.Add(fP.F***s.ToString()); li.SubItems.Add(fP.MutualChildren.ToString()); li.SubItems.Add(inbr ? "ДА" : "-"); int inbrLevel = 0; if (RabbitGen.DetectInbreeding(_rabFemale.RabGenoms, fP.RabGenoms, ref inbrLevel)) { li.SubItems.Add(inbrLevel.ToString() + " поколение"); } else { li.SubItems.Add("-"); } if (heter) { li.SubItems[IND_BREED].ForeColor = chHetererosis.ForeColor; } if (inbr) { li.SubItems[IND_INBR].ForeColor = chInbreed.ForeColor; } if (_rabMaleId == fP.Id) { li.Selected = true; li.EnsureVisible(); } } // если был передан партнер, но его нет в списке, то обнуляем его, т.к. он не был выбран if (listView1.SelectedItems.Count == 0) { _rabMaleId = 0; } else { listView1_SelectedIndexChanged(null, null); } listView1.EndUpdate(); cs.RestoreAfterUpdate(); }