// отбираем из общего двора всех подчиненных конкретного лица в мини-список private Court CreateBranch(Court Dvor, string Titul) { Person P; Posts Post; ArrayList People = new ArrayList(); int CourtSize = 0; Court Branch = Instantiate(Dvor); for (int i = 0; i < Dvor.CourtSize; i++) { P = Dvor.GetPerson(i); if (P != null && (Post = P.GetPost()) != null) { if (Post.GetChief() != null) { if (string.Compare(Post.GetChief().Titul, Titul) == 0) { People.Add(P); CourtSize++; } } } } Branch.People = People; Branch.CourtSize = CourtSize; return(Branch); }
void Start() { SetInitialState(); Dvor.Init(); Government.Init(); // после инита двора и пр-ва нужно посадить в пр-во людей из двора Dvor = Government.FillOffice(Dvor); InitRuler(); // а также сажаем кинга InitMentor(); // сажаем ментора }
/* * С П И С К И П Е Р С О Н */ // список пресон, перемотка и показ отдельной персоны private bool PersonList(int choice, FormList form, Court Dvor) { bool value = true; Person P = null; int count = pos(CourtListPos - 10) + choice - 1; DisplayClear(); // если choice = 0 то стартуем заполнение, иначе показываем инфо switch (choice) { case 0: { // начало или возврат из просмотра CourtListPos = FillLongList(CourtListPos - 10, form, Dvor); } break; case 11: { // мотаем назад CourtListPos = FillLongList(CourtListPos - 20, form, Dvor); } break; case 12: { // мотаем вперед CourtListPos = FillLongList(CourtListPos, form, Dvor); } break; case 13: { // menuUp; выход из списка ClearPersonFlag(); value = false; } break; /* case 14: { * } * break; * case 15: { * } * break;*/ case 16: { // шахматная партия ShowForm(FormList.Game_Form, 0); } break; default: { // показываем инфу по отдельному лицу из списка P = Dvor.GetPerson(count); ShowPerson(P, 0, false); } break; } return(value); // уже необязательно }
// public void AddPost (int i, Posts P) { // // } // заполняем посты персонами из двора, кроме первых 2-х - король и ментор // также учитываем, что первые 10 - старики, потом знать, потом молодежь // на разные должности сажаем по возрасту public Court FillOffice(Court Dvor) { Person P; for (int i = 2; i < PostNumber; i++) { if (i < 15) { P = Dvor.GetPerson(i - 2); } else { P = Dvor.GetPerson(i - 2 + 6); // пропускаем непосаженных на места старичков } P.SetPost(SortedPostList[i].Replace(P, null)); } return(Dvor); }
// тоже самое, частичный список по вышестоящему титулу public override sealed bool BranchList(int choice, string titul) { var Dvor = Strana.Dvor; if (ReturnFromPersonToPlaceFlag == FormList.Empty) { ReturnFromPersonToPlaceFlag = FormList.Branch_List; CourtListPos = 0; if (titul != null) { CourtBranch = CreateBranch(Dvor, titul); } else { CourtBranch = Dvor; } } return(PersonList(choice, ReturnFromPersonToPlaceFlag, CourtBranch)); }
// сортировка... не работает ( private Court SortByTitul(Court Dvor) { Person Pers; Posts Post; var Office = Strana.Government; int j, rank = 0; for (int i = 0; i < Office.GetSize(); i++) { for (j = rank; j < Dvor.CourtSize; j++) { if ((Pers = Dvor.GetPerson(j)) != null && (Post = Pers.GetPost()) != null) { if (Office.GetPost(i).GetHolder() == Pers) { Dvor.SwapPersons(rank, j); rank++; break; } } } } return(Dvor); }
// здесь заполняем список персонами по 10шт. на стр., проверяем края на допустимость // если уперлись в край, отсчитываем 10ку до края private int FillLongList(int start, FormList form, Court Spisok) { Person P; Posts post; var Gov = Strana.Government; string s, blockname, titul; int startpos, position = pos(start); int ListPos = 0; if (Spisok != null) { if (form == FormList.Court_List) { ListPos = Spisok.CourtSize; } else { ListPos = min(Spisok.CourtSize, Gov.GetSize()); } if (ListPos - position > 10) { ListPos = position + 10; } else if (ListPos > 10) { position = ListPos - 10; } else { position = 0; } } startpos = position; ShowListMenu(true); while (position < ListPos) { P = null; titul = ""; if (form != FormList.Posts_List) { // сначала перебираем персоны, если важен титул, то ищем ту, что с титулом for (int i = position; i < Spisok.CourtSize; i++) { if ((P = Spisok.GetPerson(i)) != null) { if (P.GetPost() != null) { titul = P.GetPost().Titul; } else if (form != FormList.Court_Post_List) { titul = ""; } else { P = null; titul = ""; continue; } } break; } } else // для списка постов просматриваем список постов, а не персон // for (int j = position; j < Gov.GetSize (); j++) { if (position < Gov.GetSize()) { if ((post = Gov.GetPost(position)) != null && (P = post.GetHolder()) != null) { titul = post.Titul; } else { P = null; } // break; } if (P == null) { break; } // дальше выбираем, какие поля отображать в колонках списка // NB! колонки съезжают по ширине из-за того, что все символы разные, нужен спец. шрифт? if (form == FormList.Court_List || form == FormList.Branch_List) { s = FormatString(P.Name, 30) + FormatString(P.Age.ToString(), 4) + FormatString(P.Prestige.ToString(), 5) + FormatString(P.GetRelation().ToString(), 5) + FormatString(titul, 20); } else if (form == FormList.Court_Post_List) { s = FormatString(P.Name, 30) + FormatString(titul, 25); if (P.GetPost().GetChief() != null) { s += FormatString(P.GetPost().GetChief().Titul, 20); } } else if (form == FormList.Posts_List) { s = FormatString(titul, 25) + FormatString(P.Name, 30); if (P.GetPost().GetChief() != null) { s += FormatString(P.GetPost().GetChief().Titul, 20); } } else { s = ""; } // сформированные строки - это строки меню, а кнопки привязаны к блокам флоучарта по имени блоков blockname = "MenuBlock" + (position - startpos + 1); LongList.AddOption(s, true, Flow.FindBlock(blockname)); position++; } // возвращает позицию последнего видимого элемента +1 return(ListPos); }