public void Refresh() { quantity = 1; trump = CardTrump.NotYetDefined; Contra = false; ReContra = false; born = true; }
public void Empty() { quantity = 0; trump = CardTrump.NotYetDefined; Contra = false; ReContra = false; born = false; }
// Минор или мажор или БК public static TrumpType WhatTrumpType(CardTrump t) { switch (t) { case CardTrump.Clubs: case CardTrump.Diamonds: return(TrumpType.Minor); case CardTrump.Hearts: case CardTrump.Spades: return(TrumpType.Major); case CardTrump.NT: return(TrumpType.NT); default: throw new Exception("Масть не определена!"); } }
public ContractStruct(int q, CardTrump t, bool c, bool rc) { if ((q >= 1 && q <= 7 && (int)t >= 1 && (int)t <= 5 && !(c && rc)) || (q == 0 && t == CardTrump.NotYetDefined && c == false && rc == false)) { this.quantity = q; this.trump = t; this.contra = c; this.recontra = rc; born = true; } else { this.quantity = 0; this.trump = CardTrump.NotYetDefined; this.contra = false; this.recontra = false; born = false; } }
public static CardSuit TrumpToSuit(CardTrump trump) { switch (trump) { case CardTrump.NT: case CardTrump.NotYetDefined: throw new Exception(trump == CardTrump.NotYetDefined ? "Приведение TrumpToSuit невозможно: козырная масть не определена!" : "Приведение TrumpToSuit невозможно: нет козыря!"); case CardTrump.Clubs: return(CardSuit.Clubs); case CardTrump.Diamonds: return(CardSuit.Diamonds); case CardTrump.Hearts: return(CardSuit.Hearts); case CardTrump.Spades: return(CardSuit.Spades); default: throw new Exception("Приведение TrumpToSuit невозможно"); } }
void CountScore() { bool ready = true; bool inzone = checkBox1.Checked; int contract_quantity = 0; if (comboBox1.SelectedIndex == -1) { ready = false; } else { contract_quantity = int.Parse(comboBox1.Items[comboBox1.SelectedIndex] as string); } CardTrump contract_trump = CardTrump.NotYetDefined; if (comboBox2.SelectedIndex == -1) { ready = false; } else { string trump_str = (string)comboBox2.Items[comboBox2.SelectedIndex]; switch (trump_str) { case "Hearts": contract_trump = CardTrump.Hearts; break; case "Diamonds": contract_trump = CardTrump.Diamonds; break; case "Clubs": contract_trump = CardTrump.Clubs; break; case "Spades": contract_trump = CardTrump.Spades; break; case "NT": contract_trump = CardTrump.NT; break; } } bool contract_double = checkBox2.Checked; bool contract_redouble = checkBox3.Checked; int result = -1; if (comboBox3.SelectedIndex == -1) { ready = false; } else { result = int.Parse(comboBox3.Items[comboBox3.SelectedIndex] as string); } //--------------------------------- int score = 0; int bonus = 0; if (ready) { int result_diff = result - (6 + contract_quantity); // ----------------------------- robber --------------------------- if (IsRobber) { // --- Если контракт сыгран --- if (result_diff >= 0) { // Очки за взятки: score = contract_quantity * (SmallHelper.WhatTrumpType(contract_trump) == TrumpType.Minor ? 20 : 30) + (contract_trump == CardTrump.NT ? 10 : 0); if (contract_double) { score *= 2; } else if (contract_redouble) { score *= 4; } // Премия за превышение взяток: ArrayOfInt bonuses = new ArrayOfInt(); if (result_diff > 0) { if (contract_double) { bonuses.Add(result_diff * (inzone ? 200 : 100)); } else if (contract_redouble) { bonuses.Add(result_diff * (inzone ? 400 : 200)); } else { bonuses.Add(result_diff * (SmallHelper.WhatTrumpType(contract_trump) == TrumpType.Minor ? 20 : 30)); } } if (contract_quantity == 6) //малый шлем { bonuses.Add(inzone ? 750 : 500); } else if (contract_quantity == 7) //большой шлем { bonuses.Add(inzone ? 1500 : 1000); } // Дополнительная премия за оскорбление: if (contract_double) { bonuses.Add(50); } else if (contract_redouble) { bonuses.Add(100); } // Посчитать сумму бонусов for (int i = 0; i < bonuses.Count; i++) { bonus += bonuses[i]; } } // --- Если контракт проигран --- else { int enemy_score = 0; for (int i = -1; i >= result_diff; i--) { if (i == -1) { if (contract_double) { enemy_score += (inzone ? 200 : 100); } else if (contract_redouble) { enemy_score += (inzone ? 400 : 200); } else { enemy_score += (inzone ? 100 : 50); } } else { if (contract_double) { enemy_score += (inzone ? 300 : 200); } else if (contract_redouble) { enemy_score += (inzone ? 600 : 400); } else { enemy_score += (inzone ? 100 : 50); } } } bonus = -enemy_score; } } // ----------------------------- sport --------------------------- else { // --- Если контракт сыгран --- if (result_diff >= 0) { // Очки за взятки: score = contract_quantity * (SmallHelper.WhatTrumpType(contract_trump) == TrumpType.Minor ? 20 : 30) + (contract_trump == CardTrump.NT ? 10 : 0); if (contract_double) { score *= 2; } else if (contract_redouble) { score *= 4; } // Премия за превышение взяток: if (result_diff > 0) { if (contract_double) { bonus += result_diff * (inzone ? 200 : 100); } else if (contract_redouble) { bonus += result_diff * (inzone ? 400 : 200); } else { bonus += result_diff * (SmallHelper.WhatTrumpType(contract_trump) == TrumpType.Minor ? 20 : 30); } } if (contract_quantity == 6) //малый шлем { bonus += (inzone ? 750 : 500); } if (contract_quantity == 7) //большой шлем { bonus += (inzone ? 1500 : 1000); } if (score >= 100) //за гейм { bonus += (inzone ? 500 : 300); } else //за частичную запись { bonus += 50; } // Дополнительная премия: if (contract_double) { bonus += 50; } else if (contract_redouble) { bonus += 100; } } // --- Если контракт проигран --- else { int enemy_score = 0; for (int i = -1; i >= result_diff; i--) { if (i == -1) { if (contract_double) { enemy_score += (inzone ? 200 : 100); } else if (contract_redouble) { enemy_score += (inzone ? 400 : 200); } else { enemy_score += (inzone ? 100 : 50); } } else if (i == -2 || i == -3) { if (contract_double) { enemy_score += (inzone ? 300 : 200); } else if (contract_redouble) { enemy_score += (inzone ? 600 : 400); } else { enemy_score += (inzone ? 100 : 50); } } else { if (contract_double) { enemy_score += (inzone ? 300 : 300); } else if (contract_redouble) { enemy_score += (inzone ? 600 : 600); } else { enemy_score += (inzone ? 100 : 50); } } } bonus = -enemy_score; } } } //--------------------------------- if (IsRobber) { label6.Text = score.ToString(); label7.Text = bonus.ToString(); } else { label6.Text = (score + bonus).ToString(); } }
public bool IsTrumpGood(CardTrump t) { return((int)t >= 1 && (int)t <= 5); }
public void ChangeContract(int q, CardTrump tr, bool co, bool reco) { this.ChangeContract(new ContractStruct(q, tr, co, reco)); }
public Contract(int q, CardTrump tr, bool co, bool reco) { val = new ContractStruct(q, tr, co, reco); }
//возврат: 0 "-", 1 "NS 4o", 2 "NS 5o", 3 "NS 4A", 4 "EW 4o", 5 "EW 5o", 6 "EW 4A" public static int CountOners(CardsDistribution cd, CardTrump trump) { if (trump == CardTrump.NotYetDefined) { return 0; //- } // Посчитать, кому приндледат 4 туза else if (trump == CardTrump.NT) { int countN = 0, countS = 0, countE = 0, countW = 0; Quarters q; for (CardSuit cs = (CardSuit)0; cs < (CardSuit)4; cs++) { q = cd.Get(CardValue.Ace, cs); switch (q) { case Quarters.N: countN++; break; case Quarters.S: countS++; break; case Quarters.E: countE++; break; case Quarters.W: countW++; break; } } if (countN == 4 || countS == 4) return 3; //NS 4A else if (countE == 4 || countW == 4) return 6; //EW 4A else return 0; //- } // Посчитать, кому принадлежат козырные онеры else { int countN = 0, countS = 0, countE = 0, countW = 0; Quarters q; for (CardValue cv = CardValue.Ten; cv <= CardValue.Ace; cv++) { q = cd.Get(cv, SmallHelper.TrumpToSuit(trump)); switch (q) { case Quarters.N: countN++; break; case Quarters.S: countS++; break; case Quarters.E: countE++; break; case Quarters.W: countW++; break; } } if (countN == 5 || countS == 5) return 2; //NS 5o else if (countE == 5 || countW == 5) return 5; //EW 5o else if (countN == 4 || countS == 4) return 1; //NS 4o else if (countE == 4 || countW == 4) return 4; //EW 4o else return 0; //- } }