private void InitUserAlgorithm() { if (!Directory.Exists("plugins")) { return; } string[] assemFiles = Directory.GetFiles("plugins", "*.dll"); foreach (string assemFile in assemFiles) { Assembly assem = Assembly.LoadFile(Path.GetFullPath(assemFile)); Type[] types = assem.GetTypes(); foreach (Type type in types) { if (type.IsClass && !type.IsAbstract) //如果继承接口 { IUserAlgorithm ua = Activator.CreateInstance(type) as IUserAlgorithm; if (ua != null) { ht.Add(ua.Name, type); } } } } }
internal SelectUserAlgorithm(MainForm mainForm) { InitializeComponent(); this.mainForm = mainForm; //初始化算法 ht = new Hashtable(); InitUserAlgorithm(); comboBox1.Items.Add("内置的算法"); comboBox2.Items.Add("内置的算法"); comboBox3.Items.Add("内置的算法"); comboBox4.Items.Add("内置的算法"); comboBox1.SelectedIndex = 0; comboBox2.SelectedIndex = 0; comboBox3.SelectedIndex = 0; comboBox4.SelectedIndex = 0; foreach (DictionaryEntry en in ht) { int i = comboBox1.Items.Add(en.Key); if (mainForm.UserAlgorithms[0] != null) { IUserAlgorithm ua = (IUserAlgorithm)mainForm.UserAlgorithms[0]; if (ua.Name == en.Key.ToString()) { comboBox1.SelectedIndex = i; } } i = comboBox2.Items.Add(en.Key); if (mainForm.UserAlgorithms[1] != null) { IUserAlgorithm ua = (IUserAlgorithm)mainForm.UserAlgorithms[1]; if (ua.Name == en.Key.ToString()) { comboBox2.SelectedIndex = i; } } i = comboBox3.Items.Add(en.Key); if (mainForm.UserAlgorithms[2] != null) { IUserAlgorithm ua = (IUserAlgorithm)mainForm.UserAlgorithms[2]; if (ua.Name == en.Key.ToString()) { comboBox3.SelectedIndex = i; } } i = comboBox4.Items.Add(en.Key); if (mainForm.UserAlgorithms[3] != null) { IUserAlgorithm ua = (IUserAlgorithm)mainForm.UserAlgorithms[3]; if (ua.Name == en.Key.ToString()) { comboBox4.SelectedIndex = i; } } } }
private void button1_Click(object sender, EventArgs e) { if (comboBox1.SelectedIndex > 0) { Type type = (Type)ht[comboBox1.SelectedItem]; IUserAlgorithm ua = (IUserAlgorithm)((Activator.CreateInstance(type))); mainForm.UserAlgorithms[0] = ua; } else { mainForm.UserAlgorithms[0] = null; } //北 if (comboBox2.SelectedIndex > 0) { Type type = (Type)ht[comboBox2.SelectedItem]; IUserAlgorithm ua = (IUserAlgorithm)((Activator.CreateInstance(type))); mainForm.UserAlgorithms[1] = ua; } else { mainForm.UserAlgorithms[1] = null; } //西 if (comboBox3.SelectedIndex > 0) { Type type = (Type)ht[comboBox3.SelectedItem]; IUserAlgorithm ua = (IUserAlgorithm)((Activator.CreateInstance(type))); mainForm.UserAlgorithms[2] = ua; } else { mainForm.UserAlgorithms[2] = null; } //东 if (comboBox4.SelectedIndex > 0) { Type type = (Type)ht[comboBox4.SelectedItem]; IUserAlgorithm ua = (IUserAlgorithm)((Activator.CreateInstance(type))); mainForm.UserAlgorithms[3] = ua; } else { mainForm.UserAlgorithms[3] = null; } }
//别人已出,自己应该出的牌 internal static ArrayList MustSendedCards(MainForm mainForm, int whoseOrder, CurrentPoker[] currentPokers, ArrayList[] currentSendCard, int suit, int rank, int count) { if (mainForm.UserAlgorithms[whoseOrder - 1] != null) { //组装牌 string pokers = currentPokers[whoseOrder - 1].getAllCards(); string[] allSendCards = { "", "", "", "" }; allSendCards[0] = mainForm.currentAllSendPokers[0].getAllCards(); allSendCards[1] = mainForm.currentAllSendPokers[1].getAllCards(); allSendCards[2] = mainForm.currentAllSendPokers[2].getAllCards(); allSendCards[3] = mainForm.currentAllSendPokers[3].getAllCards(); // IUserAlgorithm ua = (IUserAlgorithm)mainForm.UserAlgorithms[whoseOrder - 1]; ArrayList result = ua.MustSendCards(whoseOrder, suit, rank, mainForm.currentState.Master, mainForm.firstSend, allSendCards, currentSendCard, pokers); //判断合法性 bool b1 = TractorRules.IsInvalid(mainForm, currentSendCard, result, whoseOrder); bool b2 = TractorRules.CheckSendCards(mainForm, result, new ArrayList(), whoseOrder); if (b1 && b2) { int k = result.Count; for (int i = 0; i < k; i++) { CommonMethods.SendCards(currentSendCard[whoseOrder - 1], currentPokers[whoseOrder - 1], mainForm.pokerList[whoseOrder - 1], (int)result[i]); } } else { mainForm.UserAlgorithms[whoseOrder - 1] = null; MustSendCardsAlgorithm.MustSendCards(mainForm, currentPokers, whoseOrder, currentSendCard[whoseOrder - 1], count); } } else { MustSendCardsAlgorithm.MustSendCards(mainForm, currentPokers, whoseOrder, currentSendCard[whoseOrder - 1], count); } for (int i = 0; i < currentSendCard[whoseOrder - 1].Count; i++) { mainForm.currentAllSendPokers[whoseOrder - 1].AddCard((int)currentSendCard[whoseOrder - 1][i]); } return(currentSendCard[whoseOrder - 1]); }
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox1.SelectedIndex > 0) { Type type = (Type)ht[comboBox1.SelectedItem]; IUserAlgorithm ua = (IUserAlgorithm)((Activator.CreateInstance(type))); label4.Text = ua.Name + ""; label5.Text = ua.Email + ""; textBox1.Text = ua.Description + ""; } else { label4.Text = "smallnest"; label5.Text = "*****@*****.**"; textBox1.Text = "内置的出牌算法"; } }