示例#1
0
        // отбираем из общего двора всех подчиненных конкретного лица в мини-список
        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);
        }
示例#2
0
        void Start()
        {
            SetInitialState();

            Dvor.Init();
            Government.Init();
            // после инита двора и пр-ва нужно посадить в пр-во людей из двора
            Dvor = Government.FillOffice(Dvor);

            InitRuler();        // а также сажаем кинга
            InitMentor();       // сажаем ментора
        }
示例#3
0
/*
 *                              С П И С К И   П Е Р С О Н
 */

// список пресон, перемотка и показ отдельной персоны
        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);              // уже необязательно
        }
示例#4
0
//		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);
        }
示例#5
0
// тоже самое, частичный список по вышестоящему титулу
        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));
        }
示例#6
0
// сортировка... не работает (
        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);
        }
示例#7
0
        // здесь заполняем список персонами по 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);
        }