public Neuron(Pole n1, Pole n2, int s, int i) { wierzch1 = n1; wierzch2 = n2; stan = s; impuls = i; }
// oblicza sumę impulsów pochodzących od neuronów stykających się w danym polu private static int ImpulsySasiadow(Pole w, ref Neuron[] Siec) { int suma = 0; for (int j = 0; j < IloscNeuronow; j++) { if (((Siec[j].wierzch1.x) == w.x) && ((Siec[j].wierzch1.y) == w.y)) suma = suma + Siec[j].impuls; if (((Siec[j].wierzch2.x) == w.x) && ((Siec[j].wierzch2.y) == w.y)) suma = suma + Siec[j].impuls; } return suma; }
// sprawdza, czy udało się zamknąć sieć ruchów public int SprawdzSciezkeH(Neuron[] Siec) { bool jest; int start = 0; Pole p = new Pole(); Pole ps = new Pole(); Pole pb = new Pole(); int n = 0; int liczba = 1; // szukamy pustej końcówki for (int i = 0; i < IloscNeuronow; i++) { if (Siec[i].impuls == 1) // znajdujemy pierwszy neuron z jednej strony nie podłączony if ((ImpulsySasiadow(Siec[i].wierzch1, ref Siec) == 1)||(ImpulsySasiadow(Siec[i].wierzch2, ref Siec) == 1)) { start = i; if (ImpulsySasiadow(Siec[i].wierzch1, ref Siec) == 1) p = Siec[i].wierzch2; else p = Siec[i].wierzch1; break; } } if (start == -1) { n = 0; p.x = 0; p.y = 0; } n = start; ps = p; // this.textBox1.AppendText("Pierwszy neuron: " + p.x + "," + p.y + "\n"); do { jest = false; for (int i = 0; i < IloscNeuronow; i++) { if ((Siec[i].impuls == 1)&& (i != start) && (i != n) &&(((Siec[i].wierzch1.x==p.x)&&(Siec[i].wierzch1.y==p.y))||((Siec[i].wierzch2.x==p.x)&&(Siec[i].wierzch2.y==p.y)))) { if ((Siec[i].wierzch1.x==p.x)&&(Siec[i].wierzch1.x==p.x)) { pb.x=Siec[i].wierzch2.x; pb.y=Siec[i].wierzch2.y; } else { pb.x=Siec[i].wierzch1.x; pb.y=Siec[i].wierzch1.y; } jest = true; p.x = pb.x; p.y = pb.y; n = i; liczba++; break; } } // do // pauza po każdym kroku // { // Thread.Sleep(Convert.ToInt16(kontrPauza.Value)); // Application.DoEvents(); //} // while (!pauza); // pauza = true; // if (jest) this.textBox1.AppendText("Kolejny neuron: " + p.x + "," + p.y + "\n"); } while (jest == true); return liczba; }