int Załaduj(T Mapa, int i, RuchE R) { int X, Y, Z; if (Przeszukajaj(Mapa, out X, out Y, out Z, i, R)) { return(Z); } if (!TrwanieGry(Mapa)) { int m = OcanaPlanszy(Mapa); ListaOcenaPlańszy[X][Y] = m; return(m); } i--; if (i != 0) { bool b = true; int Max = Przegrana, Min = Wygrana; T[] Los = PobieraniePlansz(Mapa, R); foreach (T ID in Los) { b = false; int Wspułczynik; if (R == RuchE.Gracz) { Wspułczynik = Załaduj(ID, i, RuchE.Komputer); if (Wspułczynik < Min) { Min = Wspułczynik; } if (Min == Przegrana) { ListaOcenaPlańszy[X][Y] = Min; return(Min); } } else { Wspułczynik = Załaduj(ID, i, RuchE.Gracz); if (Wspułczynik > Max) { Max = Wspułczynik; } if (Max == Wygrana) { ListaOcenaPlańszy[X][Y] = Max; return(Max); } } } if (b) { int m = OcanaPlanszy(Mapa);; ListaOcenaPlańszy[X][Y] = m; return(m); } if (R == RuchE.Gracz) { ListaOcenaPlańszy[X][Y] = Min; return(Min); } if (R == RuchE.Komputer) { ListaOcenaPlańszy[X][Y] = Max; return(Max); } } else { int m = OcanaPlanszy(Mapa);; ListaOcenaPlańszy[X][Y] = m; return(m); } return(0); }
private bool Przeszukajaj(T obiekt, out int X, out int Y, out int IloścPunktów, int Numer, RuchE R) { IloścPunktów = 0; X = obiekt.NumerTabeli; for (Y = 0; Y < ListaRóchów[X].Count; Y++) { if (ListaRóchów[X][Y] == R && ListaPlansz[X][Y].Porównanie(obiekt)) { if (ListaIlośćRuchów[X][Y] < Numer) { ListaIlośćRuchów[X][Y] = Numer; return(false); } else { IloścPunktów = ListaOcenaPlańszy[X][Y]; return(true); } } } ListaPlansz[X].Add(obiekt); ListaOcenaPlańszy[X].Add(0); ListaRóchów[X].Add(R); ListaIlośćRuchów[X].Add(Numer); return(false); }
/// <summary> /// Metoda Przechowywana w tym delegacje zwraca możlwości nastepne stany aplikacji /// </summary> /// <param name="Mapa">Bierzocy stan aplikacji</param> /// <returns>Stany aplikacje nastepujoce z bierzocego stanu aplikacji</returns> protected abstract T[] PobieraniePlansz(T Mapa, RuchE GraczCzyKomputer);