Математика и Информатика

2015/5, стр. 455 - 482

ОТ МАТЕМАТИЧЕСКИ КЪМ КОМПЮТЪРНИ ИГРИ

Павел Азълов
Pennsylvania State University
Hazleton campus, U.S.A.

Резюме: Едно от приложенията на компютърните игри е в областта на образованието. Този вид игри се използва както при усвояване на нови знания, така и при изграждане на умения за вземане на логически обосновани решения в непозната обстановка. Самото разработване на несложни логически игри е също с огромен образователен ефект. Това е и акцентът на тази статия. Тръгвайки от конкретна математическа задача, описана като игра, в статията е представен модел за изграждане на множество компютърни игри върху грид. Изградено е ядро от необходимите програмни класове, с които се моделират средата за игра (грид), участниците в играта и самата игра, която ги обединява в едно цяло. На базата на две конкретни игри, конструирани от програмните класове, се показва начинът, по който могат да се създадат нови игри върху грид. Всяка игра има специфична инициализация на грида, правила за „придвижването на фигурите“, критерий за завършване на играта и обявяване на победителя. Всеки един от тези елементи на играта е илюстриран чрез функциите, с които се реализират алгоритмите на две конкретни игри. Формулирано е и множество от игри, които могат програмно да се разработят на базата на представения модел. Някои от тези игри имат изследователски характер и могат да бъдат в основата на интересни и нетривиални проекти.

Ключови думи: computer games, matematical games, games on grid

Вместо увод

Компютърните игри са част от ежедневието ни. Използват се предимно за развлечения, но много от тях имат и образователен характер. Масовото използване на компютърните игри от хора на всички възрасти мотивира софтуерните компании в разработването на софтуер за игри от всякакъв вид. Напоследък се провеждат конференции, отнасящи се до теорията и практиката на компютърните игри. Редица издателства предлагат книги по компютърни игри, а много университети въведоха курсове по компютърни игри (Leuteneger & Edgington, 2007).

И у нас, но още преди 40 години, в рамките на поредицата „АЛЕФ“ издателство „Народна просвета“ издаде книга със заглавие „Математически игри“ (Чуканов, 1975). В книгата са представени анализът и алгоритмите на разнообразни игри, които са в основата на много от днешните компютърни игри. Автор на книгата е Владимир Чуканов, който за съжаление, напусна завинаги математическата ни колегия твърде млад. Едва ли Владимир се е надявал, че тази книга може бъде актуална след толкова много години. Книгата „Математически игри“ е вече почти забравена, а за по-младите читатели на списанието е непозната, но тя винаги е била всред книгите от личната ми библиотека. Всъщност идеята за настоящата статия е породена от книгата на Владимир Чуканов.

1. Математически и компютърни игри

Математически са тези игри, които се поддават на математически анализ. Може и по-дирекно да се каже, че математическата игра е математическа задача. За някои математически игри се казва, че са логически. В такива случаи те се използват и за развлечение. В интернет се среща и терминът „игри за мислещи“, като с това, явно, се подсказва, че основната цел в тях е да се играе с добре обмислени ходове, а не в „бързото кликване“ върху екрана на компютъра, което е типично за видеоигрите.

Математическите игри са дискретни и обикновено крайни. Това означава, че играта се „разбива“ на последователност от отделни ходове, които участващите извършват един след друг. Крайните игри винаги завършват след краен брой ходове на участниците. Примери за дискретни и крайни игри, които често играем, са „Kръстчета и нули“, НИМ (Чуканов, 1975), „Бикове и крави“ (Азълов & Златарова, 2011), (Grozdev & Doichev, 2005) и много други.

Всяка игра се определя с:

− обектите, с които се играе (камъчета, монети, моливи, шахматни фигури и др.);

− средата, в която се извършват ходовете на участниците (шахматна дъска, таблица, състояща се от редове и колонки върху лист хартия, и др.);

− системата от правила за извършване на ходове от участниците в играта. В системата има правило, с което се определя началната позиция (конфигурация) на обектите, с които се играе, правило, с което се определя кога настъпва краят на играта и кой от участващите в нея е победител, ако има такъв;

− броя на участниците в играта (един, двама или повече от двама).

Основна цел в математическите игри е формулирането на стратегия за игра. Системата от правила, които използва участникът в една игра, определят неговата стратегия. Естествено, всеки от участниците се стреми да приложи стратегия, която му осигурява победа. Такава стратегия, ако тя изобщо съществува, се нарича печеливша. Могат да се поставят редица въпроси, свързани със стратегията за победа, като например:

− Кои са условията, при които може да се формулира печеливша стратегия?

− Ако няма печеливша стратегия, възможно ли е да се формулира стратегия, при която да се постига равен резултат?

− Единствена ли е печелившата стратегия?

Това, както се вижда, са типични математически въпроси.

Най-общо може да се приеме, че текущата позиция в една партия се характеризира с броя и/или текущата позиция на обектите, участващи в играта в дадения момент. В някои игри е възможно да се определи дали тя е благоприятна, или е неблагоприятна.

Позицията е благоприятна за играча, който е на ход, ако той има печеливша стратегия, т.е. ако той може да спечели партията независимо от стратегията и конкретните ходове на другия играч. По същество това означава, че една позиция е благоприятна за единия играч, ако всеки път, когато е на ход, съществува поне един такъв ход, който я обръща в неблагоприятна за другия играч. Може да се каже също, че ако всеки възможен ход превръща дадена текуща позиция в благоприятна за другия играч, то тази позиция е неблагоприятна за играча, който е на ход.

Формулирането на стратегия обикновено започва с анализирането на няколко „прости“ партии на играта. Това е начин да се търси определена математическа зависимост. Ако такава зависимост е намерена, тогава се формулира хипотеза за печеливша стратегия. Естествено, хипотезата трябва трябва да се докаже. Това е идеалният случай, но той невинаги е възможен.

Компютърните игри са твърде разнообразни и класифицирането им е сложно. Затова е добре да се уточни, че в тази статия понятието „компютърна игра“ трябва да се разбира в по-тесен смисъл на този термин. Тук компютърната игра е компютърна програма, с която е реализирана идея от някаква игра. Играта може да бъде математическа и за нея да има или да няма доказана печеливша стратегия. Ако такава съществува, тогава компютърът ще е единият от участниците в играта, който ще прилага печелившата стратегия. Ако все още няма формулирана печеливша стратегия, проследяването на развоя на изиграните игри би могло да подпомогне формулирането на такава стратегия, ако тя изобщо съществува. Играта може и да не се поддава на пълен математически анализ, но да има алгоритмичен характер. Това означава, че целта в нея е да се построи алгоритъм, който да дава някакво (не непременно оптимално) решение на задачата, формулирана в играта. Ако ходовете на играча, които се моделират с алгоритъма, се приемат за „разумни“, то целта е постигната.

Подходът, който е използван за изграждането на една компютърна игра, е илюстриран за игри върху правоъгълна мрежа. За да се улесни изпълнението им, ходовете на всеки от играчите се извършват програмно. Това означава, че един от играчите ще използва доказана печеливша стратегия за игра (ако такава съществува), а ходовете на останалите играчи ще се извършват по случаен начин от компютъра.

2. Пример на математичска игра

Игра с бели и черни бобчета

Формулировка на играта. Дадени са две купчини с бобчета – едната с бели, а другата с черни. Участват двама играчи, които извършват последователно по един ход. При всеки ход играчът може да вземе само едно бобче (бяло или черно) или две бобчета, но с различен цвят. Играта завършва, когато и последното бобче е взето. Победител е играчът, след чийто ход не остава нито едно бобче.

Анализ на играта и хипотеза за печеливша стратегия. Приемаме, че партията започва с \(M\) бели и \(N\) черни бобчета, като това означаваме с \((M, N)\).Очевидно, играта е симетрична по отношение на белите и черните бобчета, т.е. \((M, N)\) и \((N\), \(M)\) са една и съща партия. Цветът е въведен само за да улесни обясненията в анализа на играта. За удобство ще означим с \(A\) и \(B\) съответно първия и втория играч. Един играч е първи, ако той прави първия ход.

Да анализираме няколко партии с малки стойности на \(M\) и \(N\)(табл. 1). Естествено е да се приеме по дефиниция,че позицията \((0,0)\) е неблагоприятна, защото не е възможно да се направи следващ ход. За всяка от партиите в таблицата може директно да се провери дали началната позиция е, или не е благоприятна за играча \(A\).

Таблица 1. Благоприятни и неблагоприятни позиции за различни стойности на \(M\) и \(N\)

1М= 0,N= 0(0, 0) – неблагоприятна позиция заАM- четноN- четно2М= 1,N= 0(1, 0) – благоприятна позиция заАM- нечетноN- четно3M= 1,N= 1(1, 1) – благоприятна позиция заАM- нечетноN- нечетно4M= 2,N= 0(2, 0) – неблагоприятна позиция заАM- четноN- четно5M= 2,N= 1(2, 1) – благоприятна позиция заАM- четноN- нечетно6M= 3,N= 0(3, 0) – благоприятна позиция заАM- нечетноN- четно7M= 2,N= 2(2, 2) – неблагоприятна позиция заАM- четноN- четно8M= 3,N= 1(3, 1) – благоприятна позиция заАM- нечетноN- нечетно9M= 3,N= 2(3, 2) – благоприятна позиция заАM- нечетноN- четно

Да разгледаме последните две колонки на таблицата (табл. 1). От тях може да се забележи, че играчът \(A\) е в неблагоприятна позиция само когато \(M\) и \(N\) са едновременно четни числа. Това подсказва идея за формулиране на хипотеза за печеливша позиция: играчът \(A\) е в печеливша позиция, когато и двете числа \(M\) и \(N\) не са едновременно четни. Тази хипотеза трябва да се докаже. Ако тя е вярна, тогава печелившата стратегия на играча \(A\) се свежда до вземането на бобчета по такъв начин, че винаги във всяка купчинка да остават четен брой бобчета. Неговият печеливш ход ще бъде един от следните три възможни хода (\(M \gt 0, N \gt 0\) ):

\(-\quad\) ако \(M\) е нечетно и \(N\) е нечетно \(\rightarrow(M-1, N-1)\);

− ако \(M\) е нечетно и \(N\) е четно à (\(M-1, N\) );

− ако \(M\) е четно и \(N\) е нечетно à (\(M, N-1\) )

Позицията, при която \(M\) е четно и \(N\) е четно, е неблагоприятна за \(A\). Всеки един от ходовете \((M-1, N-1),(M-1, N)\) и \((M, N-1)\) е благоприятна позиция за играча \(B\) и той може да победи, ако знае как да се възползва от това.

Доказателство на хипотезата. Изказаната по-горе хипотеза е вярна и доказателството може да извърши чрез индукция по сбора \(M+N\), т ака както това е направено в (Чуканов, 1975) за играта „Еднопосочен цар“, формулирана по следния начин:

В горния десен ъгъл на шахматна дъска с размери \(m \times n\) е поставен цар. Играят двама играчи, които последователно местят царя. Общо взето, царят се движи като обикновен шахматен цар, но с известно ограничение в движението си – може да се премества само надолу, наляво и по диагонала надолу-наляво. Печели играчът, който пръв постави царя в долния ляв ъгъл на дъската.“

Тази игра е еквивалентна на играта „Бели и черни бобчета“. Придвижването на царя наляво съответства на вземане на бобче от едната купчина, придвижването му надолу – на вземане на бобче от другата купчина, а придвижването му по диагонал – на вземане на две бобчета, едно бяло и едно черно.

Алгоритъм на играта. Алгоритъмът, приведен по-долу, е ориентиран към играча \(A\), който познава играта и може да избира правилно печелившите си ходове.

1. [Начало на играта] Начална позиция на играта. Посочват (въвеждат) се стойностите на \(M\) и \(N(M \geq 0, N \geq 0\) и \(M+N \gt 0)\).

2. [Основен цикъл на играта] Докато \(M+N \gt 0\),се повтарят следните действия:

\(2.1[\) Ход на \(A]\) Пресмятане на нов ход за \(A\).

Ако поне едно от числата \(M\) и \(N\) е нечетно (печеливша позиция), избира се съответният правилен ход от разгледаните по-горе три възможни хода. В противен случай се прави произволен ход.

2.2 [Проверка за край на играта] Ако \(M=0\) и \(N=0\),победител е играчът \(A\). Изпълнява се т. 3.

\(2.3[\) Ход на \(B]\) Пресмятане на нов ход за играча \(B\).

2.4 [Проверка за край на играта] Ако \(M=0\) и \(N=0\),победител е играчът \(B\). Изпълнява се т. 3.

3. [Край на играта] Обявяване на победителя.

3. Преход от математическа към компютърна игра

По-долу е дадена програмната структура на играта „Бели и черни бобчета“, представена с прототипите на основните функции, от които тя е изградена (фиг. 1), както и текста на две функции (main, gameEngine), които реализират развитието на играта. В играта участват играчите \(A\) и \(B\), от които \(A\) използва представената по-горе стратегия, а ходовете на \(B\) се избират по случаен начин. В реална игра ходовете на \(B\) се въвеждат от съответния играч.

intgameEngine(int,int);// „Двигател“ на игратаvoidstrategy(int&,int&);// Избор на благоприятна позицияvoidrandMove(int&,int&);// Избор на случаен ходboolisEndGame(int,int);// Проверка за край на игратаvoidwinner(int);// Обяваване на победителяvoidprintMove(int,int,int);// Печат на пореден ход от игратаintmain(){srand(unsignedint(time(0)));intm, n;// Брой на бобчетата (m, n)cout <<“Enter values for M and N: “;cin >> m >> n;winner(gameEngine(m, n));return0;}intgameEngine(intm,intn){intmove = 1;cout <<“Start “;printMove(0, m, n);while(true)// Основен цикъл на играта{cout <<“\nMove “<< move << endl;
move++;strategy(m, n);// Ход на първия играч (A)printMove(1, m, n);if(isEndGame(m,n))return1;// Победител еArandMove(m, n);// Ход на втория играч (B)printMove(2, m, n);if(isEndGame(m,n))return2;// Победител е B}}

Фигура 1. Структура на програмата, реализираща играта „Бели и черни бобчета“

Следват три партии (табл. 2), в които отделните ходове на играчите се извършват от компютъра. Началната позиция в първата партия е благоприятна за играча A, който позназва анализа на играта и е естествено той да победи. В останалите две партии началната позиция не е благоприятна за A и резултатът зависи от ходовете на играча B.

Таблица 2. Три изпълнения на програмата, реализираща играта „Бели и черни бобчета“

Enter values for M and N: 3 6Start: [M=3, N=6]Move 1Player 1: [2, 6]Player 2: [1, 6]Move 2Player 1: [0, 6]Player 2: [0, 5]Move 3Player 1: [0, 4]Player 2: [0, 3]Move 4Player 1: [0, 2]Player 2: [0, 1]Move 5Player 1: [0, 0]The winner isAEnter values for M and N: 2 6Start: [M=2, N=6]Move 1Player 1: [1, 5]Player 2: [0, 4]Move 2Player 1: [0, 3]Player 2: [0, 2]Move 3Player 1: [0, 1]Player 2: [0, 0]The winner is BEnter values for M and N: 4 6Start: [M=4, N=6]Move 1Player 1: [3, 5]Player 2: [2, 4]Move 2Player 1: [1, 3]Player 2: [0, 3]Move 3Player 1: [0, 2]Player 2: [0, 1]Move 4Player 1: [0, 0]The winner isA

Основен цикъл на компютърна игра

Да разгледаме по-внимателно „двигателя на играта“ (функцията gameEngine), която осъществява последователността на ходовете на отделните играчи (фиг. 2). Ако се освободим от допълнителните оператори, които се използват за отпечатване на изиграните ходове, се получава следният код:

intgameEngine(intm,intn){while(true)// Основен цикъл на играта{strategy(m, n);// Ход на първия играч (A)if(isEndGame(m,n))return1;// Победител еArandMove(m, n);// Ход на втория играч (B)if(isEndGame(m,n))return2;// Победител е B}}

Фигура 2. Управляваща функция на играта

Цикълът в тялото на функцията се нарича основен цикъл на играта. В общия случай в една игра могат да участват \(p\) играчи (\(p \geq 1\) ) и тогава основният цикъл може да се запише така (фиг. 3):

while(true)// Основен цикъл на играта{for (int id=1; id<=p; id++)// Цикъл по всеки играч{move(game, id);// Ход на играч с номер idif(isEndGame(game))returnid;// Проверка за край на играта}}

Фигура 3. Основен цикъл на компютърна игра

Процедурата move извършва ход съгласно стратегията на играча с номер id в играта game. Първият аргумент (game) на процедурата е обект, в който се съхранява цялата информация от текущото състояние на играта. Това са данни за всички играчи и за средата (игралната площадка), върху която се играе.

Структура на компютърна игра

Разгледаната игра е твърде елементарна, но от програмната ѝ реализация могат да се видят основните функционални компоненти, характерни за много от компютърните игри:

− стартиране на играта – функция, с която се инициализират параметрите на играта (игрална площадка, брой играчи и др.), представят се правилата на играта и др.;

− „двигателя на играта“ – функция, извършваща последователността от ходовете на отделните играчи;

− стратегия за игра – функция, с която се избира всеки следващ ход на даден играч;

− критерий за прекратяване на играта – функция, с която се проверява за настъпването на края на играта;

− визуализиране на последователността от ходовете, извършени по време на една партия;

− оповестяване края на играта и на резултата от нея.

Към списъка от функции, които се извършват в компютърните игри, ще добавим и основните структурни компоненти на играта. Това са програмни структури (структури от данни, модули и класове), с които се представят:

− характеристиките на средата, върху която се играе, и на операциите, които могат да се извършват върху нея;

− характеристиките на участник в играта и на операциите, които той може да извършва;

− параметрите и правилата на игра.

Грид – „Сцена за игра“

Във формулировката си на „Еднопосочен цар“ играта „Бели и черни бобчета“ придобива по-забавен вид и се доближава до много други игри, използващи като игрална площадка множество от клетки, структурирани в редове и колонки. Като имена на такава структура в игрите се използват термините шахматна дъска, таблица, квадратна решетка и грид. И въпреки че в играта „Еднопосочен цар“ става дума за шахматна фигура, то цветът на клетките в шахматна дъска не е от значение. Поради това по-нататък ще бъде използван краткият и по-общ термин грид като сцена, на която всеки от играчите ще премества своята фигура (шахматен цар, топ, царица, кон или някаква специална фигура-робот със съответни правила на придвижване) от една в друга клетка (поле) на грида. За разлика от шахматната дъска размерите на грида могат да бъдат произволни цели положителни числа, а клетките да бъдат маркирани като достъпни или недостъпни за фигурите.

Общ сценарий за игри върху грид

Представената игра и нейната програмна реализация са един опростен, но добър пример, който може да бъде в основата на програмен проект за разработване на компютърни игри върху грид.

Игра върху грид. Компонентите на една игра върху грид са: грид, играчи и правила за игра, за които се приема, че:

− гридът е таблица с \(M \times N\) клетки, структурирани по редове и колонки. Той може да е празен. В този случай всяко поле е достъпно за фигурите, участващи в играта. В някои игри е възможно върху грида да има недостъпни полета. Идея за това ни дават игрите, в които се използват лабиринти;

− броят на играчите е един, двама или повече;

− всяка от фигурите е определена с правилата, с които се извършва придвижване (преход) от една клетка в друга клетка на грида. В системата от правила се включва инициализирането на играта, т.е. определят се размерите и съдържанието на грида, началните позици на всяка от фигурите, както и позицията, при която играта завършва.

Тук трябва да се направят две важни бележки.

− понятията фигура и играч, който играе с фигурата, се припокриват. Не е важно каква е фигурата. Тя се движи (премества) по определени правила, които играчът знае и прилага, за да направи следващия си ход;

− терминът „придвижване на фигура“ трябва да се приема абстрактно и всъщност означава ход на играча, който играе с тази фигура. В играта „Еднопосочен цар“ фигурата се премества от едно в друго поле на шахматната дъска, но в играта „ХО“ („Кръстчета и нули“) няма движение на фигура, а само маркиране на клетка със съответния знак на играча („О“ или „Х“ при игра с двама играчи).

Модел на игра върху грид

Разглеждаме произволна игра \(G\) върху грид. Разположението на фигурите върху грида в конкретен момент от играта се нарича състояние на играта. Означаваме го с \(s\), а множеството на всички състояния, наречено пространство на състоянията, означаваме с \(S\).

Всяка игра започва с някакво начално състояние \(\underline{s}, \underline{s} \in S\). Играта завършва при достигане на състояние, наречено крайно \(\underline{s}, \underline{s} \in S\). За някои игри крайното състояние може да не е единствено.

Ход в играта е действие, което привежда играта от едно състояние \(s\) в ново състояние \(s^{\prime}\). С други думи, всеки ход \(h\), приложен към текущото състояние \(s\) на играта, я привежда в ново състояние \(\underline{s}, \underline{s} \in S\). Това може да се запише като функция на преход по следния начин:

\(s^{\prime}=\mathfrak{I}(s, h)\)

Произволна партия от играта \(G\) е крайна редица от ходове, започваща с начално и завършваща с едно от възможните крайни състояния:

\(G: \underset{\rightarrow}{\boldsymbol{s}} \xrightarrow{h} S_{1} \xrightarrow{h} S_{2} \ldots \xrightarrow{h} \overline{\boldsymbol{s}}\)

В зависимост от броя на играчите отделните ходове \(h\) се извършват от един или от няколко играчи в последователен ред.

4. Изграждане на програмни модули за игри върху грид

На базата на примерната игра „Еднопосочен цар“ и на общия модел на игри върху грид могат да се изградят основните програмни структури, които да бъдат ядро за реализиране на множество от конкретни игри върху грид. За тази цел ще бъдат проектирани и реализирани четири модула, всеки от които, определен със съответните данни и операции, ще представлява компонент от игра върху грид. В обектноориентираните езици, какъвто е и езикът C++, това се постига чрез използване на класове.

По-долу следва краткото представяне на тези четири класа. За по-лесно разбиране на предназначението на функциите имената им в тези класове са унифицирани. С думата get започват имената на функциите селектори, т.е. функциите, които връщат текущи стойности на величини от private секцията на класовете, а с думата set започват имената на функциите мутатори, т.е. функциите, с които се променят текущите стойности на величините от private секцията на класовете. Имената на функциите на класа подсказват предназначението им, което се допълва от краткия коментар, следващ декларацията им.

2(0,2)(1,2)(2,2)(3,2)1(0,1)(1,1)(2,1)(3,1)0(0,0)(1,0)(2,0)(3,0)0123

Фигура 4. Грид с размери 3x4

Класът Grid

Гридът в игрите, които се разглеждат, е двумерен масив от клетки. Всяка клетка е определена от координатите си. Приема се, че координатите на отделната клетка са цели неотрицателни числа, които са координатите на долния ляв връх на клетката (квадратчето). Един пример е даден на фиг. 4. Декларацията на клетка е дадена със структурата Coord. Освен координатите на клетката в декларацията присъстват и три често използвани операции, определени с функциите: конструктор, сравняване за равенство на две клетки и отпечатване.

На фиг. 5 е дадена декларацията на структурата Coord и на класа Grid. Величините \(M X\) и \(N X\) са глобални константи, дефинирани в отделен модул. Всеки обект от класа Grid е таблица с текущи размери \(\operatorname{dim} X, \operatorname{dim} Y\) и е представен с масива table. За двумерните масиви в C++ се изисква предварително определяне на размера на реда, което създава известни неудобства. За да не се утежнява програмният текст, вместо двумерен динамичен масив от тип vector е използван едномерен масив (table), който чрез функцията index се използва като двумерен.

structCoord{intx, y;
Coord (int=0,int=0);booloperator==(Coord)const;// Проверка за равенствона две клеткиvoidprint();};classGrid{public:Grid();// Конструктор по премълчаванеGrid(int,int,int=0);// Инициализиране на всичкиданни~Grid();// ДеструкторvoidsetDimX(int);// Определя броя на редоветеvoidsetDimY(int// Определя броя на колонкитеintgetDimX()const;// Връща броя на редоветеintgetDimY()const;// Връща броя на колонкитеvoidsetTable(int,int,int=0);// Присвоява стойност наклетките на гридvoidsetInaccCells(int);// Недостъпни клеткиvoidsetTable(int[]);// Определя грид по даден масивvoidgetTable(int[]);// Връща масив, съдържащ гридvoidsetCell(Coord,int);// Присвоява стойност на клеткаот гридintgetCell(Coord)const;// Връща стойност на клеткаот гридboolinSide(Coord)const;// Проверка дали клетката евътрешна за гридvoidprint()const;// Отпечатва размерите на гридvoidprintTable()const;// Отпечатва таблицата на гридprivate:intdimX;// Брой редове на гридаintdimY;// Брой колонки на грида
inttable[MX*NX];// Грид с размери dimX x dimYintindex(int,int)const;// Трансф. на двумерен ведномерен масив};

Фигура 5. Декларация на структурата Coord и на класа Grid

Класът Player

Обектите на класа Player са участниците в играта. Като променливи те са представени с две величини - име и съответни текущи координати (позиция) върху грида (фиг. 6).

classPlayer{public:Player();// Конструктор по премълчаванеPlayer(string, Coord);// Инициализиране на всички данниPlayer(constPlayer&);// Copy-конструктор~Player();// ДеструкторvoidsetPlayer(Player);// Присвоява данните на играч(име, позиция)voidsetCurrPos(Coord);// Присвоява текуща позиция на играчCoord getCurrPos()const;// Връща текущата позиция на играчvoidsetName(string);// Присвоява име на играчstring getName()const;// Връща име на играчvoidprint()const;// Отпечтва данни за играчprivate:string name;// Име на играчCoord currPos;// Позиция на играч};

Фигура 6. Декларация на класа Player

Класът Game

Класът Game обединява грида и играчите в една игра. Всеки обект на класа съдържа един обект от клас Grid и няколко обекта от клас Player (фиг. 7). Това означава, че различните игри върху грид могат да имат различен брой играчи.

classGame{public:Game();// Конструктор по премълчаванеGame(Grid, Player[],int,int);// Инициализиране на всички данниGame(constGame &);// Copy-конструктор~Game();// Деструкторvoidplay();constGame&operator=(constGame& pl);// Операторза присвояванеvoidsetGrid(Grid gr);// Определяне на гридGrid getGrid()const;// „Връща“ текущия гридPlayer* getPlayers()const;// „Връща“ данните на всички играчиPlayer getPlayer(int)const;// „Връща“ данните на един играчvoidsetPlayer (Player,int);// Определя данните на един играчvoidsetPlayers(Player*);// Определяне на всички играчиvoidsetNrPlayers(int);// Определяне броя на играчитеintgetNrPlayers()const;// „Връща“ броя на играчитеvoidsetMaxNrPlayers(int);// Определяне на max брой играчиintgetMaxNrPlayers()const;// „Връща“ max брой играчиvoidprint();// Отпечатване на данните на игратаprivate:Grid g;// Грид на игратаintnrPlayers;// Брой играчиintmaxNrPlayers;// Максимален брой играчиPlayer* p;// Масив от играчи};

Фигура 7. Декларация на класа Game

Класът GameAlg

Първите три класа изграждат обекти за игра върху грид, без да се специфицират нито правилата на игра, нито алгоритмите, които играчите използват, за да направят своя следващ ход. Правилата за игра и стратегиите за избор на ход са представени чрез функциите в класа GameAlg (фиг. 8). Някои от тези функции са общи за игрите върху грид. Останалите функции представят специфичните правила на конкретната игра, както и стратегиите на участващите играчи. Това означава, че при реализирането на нова игра в тези функции трябва да се направят известни промени или да се напишат отново.

classGameAlg{public:// Прототипи на функциите, специфични за играта „Ограничен цар“Game game1Init(int);// Инициализиране на игра 1intgame1Engine (Game);// „Двигател“ на игра 1voidgame1nextMove (Game& game,int);// Следващход на играчvoidgame1P0nextMove (Game&);// Следващ ход на първия играчvoidgame1P1nextMove (Game&);// Следващ ход на втория играчboolgame1End (Coord)const;// Проверка за край на игра 1voidgame1Winner (int)const;// Обявяване на резултатаот игра 1voidprint1Move(intp, Coord c);// Печат на всеки ход 1// Прототипи на функциите, специфични за играта „Преследване“Game game2Init(int);// Инициализиране на игра 2intgame2Engine (Game);// „Двигател“ на игра 2voidgame2nextMove (Game& game,int);// Следващ ходна играчvoidgame2P0nextMove (Game&);// Следващ ход на първия играчvoidgame2P1nextMove (Game&);// Следващ ход на втория играчboolgame2End (Coord, Coord)const;// Провека за крайнаигратаvoidgame2Winner (int)const;// Обявяване на резултатаот игра 2voidprint2Move(intp, Coord c);// Печат на всеки ход 2};

Фигура 8. Декларация на класа Game

Няколко от функциите в класа GameAlg са от особена важност и това е причината за представянето на текстове им.

Инициализиране на играта

Инициализирането на играта се извършва с отделна функция и включва определянето на размерите на грида, както и на броя, имената и началните координати на играчите. При играта „Еднопосочен цар“ началният ход и на двамата играчи е в горния десен ъгъл на грида. Тези начални данни определят началното състояние на обекта game, което функцията връща на главната функция.

Game GameAlg::game1Init(intinacc){srand(unsignedint(time(0)));intm = MM + rand() % (MX - MM);//Числов интервала [MM,MX]intn = NM + rand() % (NX - NM);// Числов интервала[NM, NX]Grid grid(m, n);// Инициализирасе гридс размери mx n/*****************************************************************************************Този блок трябва да се добави за игрите, в които гридът съдържа недостъпни клетки*int nrCell = m*n*INACCESSIBLE/100;// Бройнедостъпниклетки*if (nrCell > 0) grid.setInaccCells(nrCell);// Грид с недостъпни клетки****************************************************************************************/intnrPlayers = 2;// Брой на играчитеPlayer player[MAXNUM_PLAYERS];// Конструиране наобектите-играчиplayer[0].setName(“P0”); player[0].setCurrPos(Coord(m,n));player[1].setName(“P1”); player[1].setCurrPos(Coord(m,n));// Конструиране на обект от клас GameGame game(grid, player, nrPlayers, MAXNUM_PLAYERS);returngame;}

Фигура 9. Функция за инициализиране на игра

„Двигател“ на играта

Вариант на тази функция е представен във фиг. 2, а по-долу е приведена реализацията ѝ за играта „Еднопосочен цар“. Идентификатори на играчите са техните номера, съответстващи на реда, в който те извършват пореден ход. Първият играч е с номер 0, вторият е с номер 1 и т.н.

intGameAlg::game1Engine(Game game){intnr = game.getNrPlayers();// Брой на играчитеintmove = 1;while(true)// Основен цикъл на играта{cout <<“\nMove “<< move++ << endl;for(intid = 0; id < nr; id++)// Цикъл за всеки отделен играч{game1nextMove(game, id);// Ход на играчс номер idprint1Move(id, game.getPlayers()[id].getCurrPos());// Печат на ход// Проверка за край на игратаif( game1End (game.getPlayers()[id].getCurrPos()) )returnid;}}}

Фигура 10. Функцията „Двигател“ на играта „Еднопосочен цар“

Избор на следващ ход

Предназначението на функцията nextMove е да управлява поседователността на ходовете на играчите (фиг. 11). В случая на играта „Еднопосочен цар“ играчите са двама и техните ходове се избират от функциите game1P0nextMove за първия играч и game1P1nextMove за втория играч. Първият играч е компютърът, който познава и използва печелившата стратегия.

voidGameAlg::game1nextMove (Game& game,intid){// Номер на играча, играл последенintinx = (id + game.getNrPlayers() - 1) % game.getNrPlayers();switch(id){case0: game1P0nextMove(game);break;case1: game1P1nextMove(game);break;// Добавяне на трети играч, ако играта се играе от трима// case 2: game1P2nextMove(game); break;}
// „Информиране“ на другия играч за изиграния ходgame.getPlayers()[inx].setCurrPos(game.getPlayers()[id].getCurrPos());}

Фигура 11. Избор на следващ ход

Стартиране на играта

Стартирането на играта започва от главната функция (фиг.12). Тя създава обект от класа Game, с който се стартира управляващата функция на играта play. Нaйнапред се създава обект от клас GameAlg, следва създаването на обект game1, инициализиран за играта „Еднопосочен цар“, както и отпечатването на кратка информация за играта и нейните участници. Играта започва с обръщение към функцията game1Engine и завършва с отпечатване на крайния резултат от играта.

intmain(){Game game;game.play();return0;}voidGame::play(){GameAlg gameAlg;Game game1 = gameAlg.game1Init(0);// Конструиране наобект от класаGamegame1.print();// Печат на инфор-мация за игра 1intwin = gameAlg.game1Engine(game1);// Старт на игратаgameAlg.game1Winner(win);// Обявяване напобедителя}

Фигура 12. Стартиране на играта

Таблица 3 илюстрира последователността от ходове на три партии.

Таблица 3. Три изпълнения на играта „Еднопосочен цар“

The game is startingNumber of players = 2Grid’s dimensions = 5 x 5Player name: P0Initial position: [4, 3]The game is startingNumber of players = 2Grid’s dimensions = 6 x 8Player name: P0Initial position: [6, 8]The game is startingNumber of players = 2Grid’s dimensions = 5 x 5Player name: P0Initial position: [4, 3]
Player name: P1Initial pos: [4, 3]Move 1Player 0: [4, 2]Player 1: [4, 1]Move 2Player 0: [4, 0]Player 1: [3, 0]Move 3Player 0: [2, 0]Player 1: [1, 0]Move 4Player 0: [0, 0]The winner is P0The game is overPlayer name: P1Initial pos: [6, 8]Move 1Player 0: [5, 7]Player 1: [4, 6]Move 2Player 0: [3, 5]Player 1: [2, 5]Move 3Player 0: [2, 4]Player 1: [1, 3]Move 4Player 0: [0, 2]Player 1: [0, 1]Move 5Player 0: [0, 0]The winner is P0The game is overPlayer name: P1Initial pos: [4, 3]Move 1Player 0: [4, 2]Player 1: [3, 2]Move 2Player 0: [2, 2]Player 1: [1, 1]Move 3Player 0: [0, 0]The winner is P0The game is over

5. Примери на игри върху грид

Познати са разнообразни игри върху грид. По-долу следва кратък списък на такива игри, групирани в три категории.

Игри с шахматни фигури

G1.1: [Еднопосочен цар] Това е играта, която е описана в т. 3.

G1.2: [Еднопосочна дама] Играта е подобна на играта G1.1, но фигурата за игра е шахматна царица.

G1.3: [Еднопосочен топ] Играта е подобна на играта G1.1, но фигурата за игра е шахматен топ.

Бележка. Съществува математически анализ за игрите G1.2 и G1.3, с който могат се определят благоприятните позиции върху грида [3].

G1.4: [Еднопосочен кон] Играта е подобна на играта G1.1, но фигурата за игра е шахматен кон. Играта завършва, когато някой от играчите премести коня в едно от полетата с координати: (0, 0), (0, 1), (1, 0) и (1, 1).

G1.5: [Еднопосочен цар] Това е играта G1.1, която се играе с трима играчи.

G1.6: [Еднопосочна дама] Това е играта G1.2, която се играе с трима играчи.

G1.7: [Еднопосочен топ] Това е играта G1.3, която се играе с трима играчи.

G1.8: [Еднопосочен кон] Това е играта G1.4, която се играе с трима играчи.

Път върху грид: всички полета от грида са достъпни

G2.1: [Най-кратък път] Да се придвижи шахматен цар от една до друга клетка на грида с минимален брой ходове. В играта участва един играч.

G2.2: \([\) Преследване] Фигурата \(A\) преследва фигура \(B\) върху грид. Достъпни за всяка от тях са 8-те съседни клетки на грида. Фигурата \(B\) не вижда \(A\) и не знае, че е преследвана, и се движи хаотично.

G2.3: \([\) Преследване \(]\) Фигурата \(A\) преследва фигурата \(B\) върху грид. Достъпни за всяка от тях са 8-те съседни клетки на грида. Фигурата \(B\) „вижда“ фигурата \(A\) и иска да „избяга“ от нея.

G2.4: [Преследване] Играта е вариант на играта G2.3, но се играе с две фигури \(A 1, A 2\),които независимо една от друга преследват фигурата \(B\).

G2.5: [Преследване] Играта е вариант на играта G2.4, но фигурите \(A 1, A 2\) играят в коалиция при преследването на фигурата \(B\).

Забавни игри

G3.1: [ИгратаКръстчета и нули“] Играта е известна и с имената си „XO“ и „Tic-Tac-Toe“. В класическия вариант тя се играе от двама играчи въру грид с размери \(3 \times 3\),но може да се играе и от повече играчи върху грид с по-големи размери \({ }^{1}\).

G3.2: [ИгратаМиночистач“ (“Minesweeper”)] Миночистач е игра, в която трябва да се търсят мини, разположени в клетките на грид с размери \(M \times N\). Клетките на грида могат да бъдат празни или „минирани“. Съдържанието на грида се генерира по случаен начин (тайно). Чрез посочване на координатите на клетки от грида играчът се стреми да открие всички празни клетки, така че в края да останат само „минираните“ клетки. Ако е посочена „минирана“ клетка, той губи играта. Ако е посочена празна клетка, като отговор се получават координатите на всички съседни клетки, в които има мини. Съседни на дадена клетка са 8-те клетки, разположени по хоризонтална и вертикална линия, а също и по двата диагонала. Играта се играе от един играч.

G3.3: [ИгратаМиночистач за двама играчи] Играта G3.2 може да се играе и от двама играчи, които последователно един след друг посочват клетки от грида. Губи този, който „уцели“ мина. Ако играта завърши, без да е „зривена“ мина, тя се печели от този, който е открил повече минирани клетки.

Това, което е общо за игри от този списък, е, че те са игри върху грид и могат да се реализират като компютърни игри чрез класове Grid, Player, Game и GameAlg.

Това, което ги различава, е:

− размерите на грида и началното му съдържание. Размерите могат да бъдат фиксирани или да са случайни числа от някакъв интервал. Гридът може да е „празен“ или върху него да има посочени „недостъпни“ клетки;

− броят на играчите и тяхната началната позиция. Броят на играчите може да е 1, 2 или повече. Началната позиция може да е фиксирана (G1.1, горният десен ъгъл) или избрана по произволен начин, което е характерно за повечето игри;

− множеството от правила за извършване на ход;

− условието, при което играта завършва, и определянето на победителя (евентуално равен резултат).

Не е случайно, че функциите, специфични за играта „Еднопосочен цар“, са дефинирани в отделен клас (GameAlg). Това означава, че за реализирането на нова игра функциите от този клас трябва да се напишат отново или само да се направят известни корекции на съответните съществуващи функции. Това е илюстрирано в следващата точка.

6. Нова компютърна игра

Ще разгледаме и реализираме една компютърна игра, именувана по-горе с G2.3. Това ще бъде пример за построяване на нова игра с помощта на четирите базови модула на играта „Еднопосочен цар“.

Помощна задача

Ще започнем с една помощна задача, формулирана като игра (G2.1). Да се намери път с минимална дължина между две произволни клетки от грида.

\(\Pi\) т между две клетки \(A\) и \(B\) от произволен грид е редица от съседни клетки, която започва от \(A\) и завършва в \(B\). Съседни на една клетка са всичките (не повече от 8) клетки, с които тя има обща страна или връх. Дължината на пътя се измерва с броя на клетките, започвайки от \(A\) и завършвайки в \(B\).

Решение. Ако началната и крайната клетка съвпадат, тогава пътят е с дължина 0. Ако началната клетка (start) и крайната клетка (end) са върху един и същ ред, то придвижването е еднозначно определено и ще бъде само по този ред. Аналогичен е случаят, когато клетките са върху една и съща колонка. Ако клетките са върху различни редове и колонки, тогава следващият ход трябва да се направи така, че всеки нов ход максимално да намалява разстоянието до крайната клетка. Затова трябва да се избира ход, който намалява едновременно разликите в координатите по двете оси, т.е. придвижването ще се извърши по една от четирите диагонални посоки. Като краен вариант стратегията за намиране на път с минимална дължина може да се формулира така: придвижването се извършва по диагонал, който на всяка стъпка максимално скъсява разстоянието до крайната позиция. Това продължава до достигане на позиция, която е на един и същ ред или колонка с крайната позиция, и останалата част от пътя се изминава по тях – съответния ред или колонка.

Съглано тази стратегия изборът на съседно поле може да се извърши по алгоритъма, който е представен по-долу (Азълов & Златарова, 2011).

Нека start и end са началната и крайната клетка върху грида, за които се търси път с минимална дължина.

1. Пресмятат се разликите на \(x\)-координатите на двете позиции: \(\mathrm{dx}=\mathrm{end} . \mathrm{x}-\) start.x

2. Пресмятат се разликите на \(y\)-координатите на двете позиции: \(d y=e n d . y-\) start.y

3. Ако \(\mathrm{dx}=0\),позициите са върху една колонка и придвижването ще се извърши по нея до достигането на крайната позиция.

4. Ако \(\mathrm{dy}=0\),позициите са върху един ред и придвижването ще се извърши по него до достигането на крайната позиция.

5. Ако \(\mathrm{dx} \neq 0\),тогава се пресмята изразьт \(\mathrm{p}=\cfrac{\text { end.x } \text { start. } \mathrm{x}}{\mid \text { end. } \mathrm{x} \text { - start. } \mathrm{x} \mid}\)

6. Ако \(\mathrm{dx} \neq 0\),тогава се пресмята изразът \(\mathrm{p}=\cfrac{\text { end. } \mathrm{y}-\text { start. } \mathrm{y}}{\mid \text { end. } \mathrm{y}-\text { start. } \mathrm{y} \mid}\) 7. Пресмятане на координатите на следващата позиция:

start.x = start.x + p start.y = start.y + q

Възможните стойности за \(p\) са \(-1,0\) и +1. Ако \(p=-1\),тогава съгласно т.\(7 x\)- координата ще намалее с 1 и придвижването ще е наляво. Ако \(p=+1\),тогава съгласно т.\(7 x\)-координата ще нанарасне с 1 и придвижването ще е надясно. Аналогичен е случаят със стойността на \(q\), която може да бъде \(-1,0\) и +1.При \(q=-1\) придвижването е надолу, а при \(q=+1\) ще е е нагоре. Като се комбинират всички случаи за \(p\) и \(q\), включително и тези, при които те са нули, се получават всичките осем възможни придвижвания.

Дължината на пътя може да е твърде голямо число и използването на динамичен масив (обект от клас вектор) с базов тип Coord е добра идея. Това е илюстрирано като пример във функцията minPath, която съхранява пътя на фигурата.

vector<Coord> minPath(Coord start, Coord end){vector<Coord> path;// path – локален вектор за пътт start до end)path.push_back(start);// Добавяне на началнатапозиция към pathif (start == end) return path;int p, q, dx, dy;// Променливи, използвани за определянеdo// на координатите на следващата клетка{
dx = end.x - start.x;dy = end.y - start.y;p = (dx == 0)? 0 : dx/abs(dx);// p- Посока запридвижване поxq = (dy == 0)? 0 : dy/abs(dy);// q- Посока запридвижване поystart.x = start.x + p;// start.x– нова стойност на x-координатаstart.y = start.y + q;// start.y– нова стойност на y-координатаpath.push_back(start);// Добавяне на нова позициякъм пътя} while (start == end));// Критерий за достигане накрайната позицияreturn path;}

Фигура 13. Намиране на най-кратък път между две клетки от грид

Не е трудно да се съобрази, че пътят с минимална дължина между две произволни клетки \(A\left(a_{1}, a_{2}\right)\) и \(B\left(b_{1}, b_{2}\right)\) от грид се пресмята чрез израза (разстояние на Чебишев):

\(\max \left\{\left|a_{1}-b_{1}\right|,\left|a_{2}-b_{2}\right|\right\}\), който по дефиниция ще приемаме да бъде разстоянието \(\operatorname{dist}(A, B)\) между две произволни клетки \(A\) и \(B\) от грида.

Играта „Преследване“

В играта G2.3 участват двама играчи, чиито фигури \(A\) и \(B\) имат случайно избрани начални позиции върху гридa. Целта на фигура \(A\) е да „хване“ фигурата \(B\), като „стъпи“ на нейната текуща клетка. Но фигурата \(B\) „ вижда"\(A\) и иска да „избяга“ от нея. Затова след всеки ход на \(A\) тя се старае, ако е възможно, да се премести в съседна клетка, която е на по-голямо (не по-малко от предишното) разстояние до \(A\). Съседни на една клетка са клетките, с които тя има обща страна или връх.

Стратегии на участващите в играта. Фигурата \(A\) иска да скъси разстоянието между себе си и фигура \(B\) до минимум, т.е. до 0. В този случай фигура \(A\) ще е е „хванала“ фигура \(B\).Обратно, фигура \(B\) се стреми с всеки ход да се премести в клетка, която я отдалечава от \(A\),ако това е възможно. И в двете стратегии става дума за разстояние между клетки от грид. Чрез функцията „разстояние между клетки на грид“ dist двете стратеги за ход могат да се запишат по следния начин:

\(\operatorname{dist}\left(A^{\prime}, B\right) \lt \operatorname{dist}(A, B)\)-стратегия за ход за преместване на \(A\) в \(A^{\prime}\) \(\operatorname{dist}\left(A, B^{\prime}\right) \geq \operatorname{dist}(A, B)-\) стратегия за ход за преместване на \(B\) в \(B^{\prime}\)

На базата на тези стратегии са написани функциите, с които се избира ход на двамата играчи. Първият играч, да го именуваме Tom, преследва вторият играч – Jerry.

Избор на ход на Tom

voidGameAlg::game2P0nextMove (Game& game){Coord a = game.getPlayers()[0].getCurrPos();Coord b = game.getPlayers()[1].getCurrPos();intdx, dy;dx = b.x - a.x;dy = b.y - a.y;a.x = a.x + ((dx == 0)? 0 : dx/abs(dx));a.y = a.y + ((dy == 0)? 0 : dy/abs(dy));game.getPlayers()[0].setCurrPos(a);}

Фигура 14. Функция, дефинираща стратегията на Tom

Избор на ход на Jerry

Множеството \(x y\) на всички клетки, съседни на дадена клетка с координати (\(x\), y), е:

\[ x y=\{x+N E X T 8[i][0], y+N E X T 8[i][1]\} \]

Масивът NEXT8 е дефиниран по следния начин:

constintN8 = 8;constintNEXT8[N8][2] = {{ 1,0}, { 1,-1}, {0,-1}, {-1,-1},{-1,0}, {-1, 1}, {0, 1}, { 1, 1}};

Някои клетки на множеството \(x y\) може да са извън грида и това се проверява с функцията inSide. Jerry трябва да избере клетка, която е по-отдалечена от клетката, в която е Tom. Такава клетка може и да не съществува, а може и да не е единствена.

voidGameAlg::game2P1nextMove(Game& game){Coord c;Coord a = game.getPlayers()[0].getCurrPos();Coord b = game.getPlayers()[1].getCurrPos();Grid grid = game.getGrid();intd;intinx = 0;doublemax_dist = -1;
for(inti=0; i<N8; i++){c.x = b.x + NEXT8[i][0];c.y = b.y + NEXT8[i][1];if(!grid.inSide(c))continue;d = max(abs(c.x - a.x), abs(c.y - a.y));if(max_dist < d){inx = i;max_dist = d;}}c.x = b.x + NEXT8[inx][0];c.y = b.y + NEXT8[inx][1];game.getPlayers()[1].setCurrPos(c);}

Фигура 15. Функция, дефинираща стратегията на Jerry

Краят на партия от играта „Преследване“ настъпва, когато позициите на играчите съвпаднат (фиг. 16):

boolGameAlg::game2End (Coord a, Coord b)const{returna == b;}

Фигура 16. Функция за проверка за край на играта

7. Проект в развитие

Да рагледаме развитието на партията от фиг. 17. Вижда се, че и двамата играчи играят по правилата, заложени в техните стратегии – функцията game2P0nextMove за Tom и функцията game2P1nextMove за Jerry. Тom „хваща“ Jerry още на петия ход. Това развитие на играта поражда интересни въпроси, изследването на които може съществено да подобри стратегията и на двамата играчи. Ето няколко конкретни насоки за изследване, които са формулирани като задачи.

Задача 1. [Край на играта] Винаги ли Tom „хваща“ Jerry? Ако отговорът е „Да“, то какъв е минималният брой ходове за това? Ако отговорът е „Не“, да се посочи начална позиция и стратегия на Jerry, при която той е недостижим.

Задача 2. [Подобрена стратегия на Jerry] Изборът на ход на Jerry невинаги е еднозначно определен. Може ли измежду всичките възможни ходове, които го отдалечават от текущата позиция на Tom, да се избере такъв, който му гарантира повече ходове, преди да бъде хванат?

Задача 3. [Jerry сизкуствен интелект“] Да се формулира нова стратегия на Jerry, която ще „имплантира“ интелект, с който да се вземат по-добри решения във всеки момент от развитието на партията.

Задача 4. [Подобрена стратегия на Tom] Изборът на ход на Tom не е винаги еднозначно определен. Може ли измежду всички възможни ходове, които скъсяват пътя му до текущата позиция на Jerry, да се избере ход, който му гарантира по-бързото „хващане“ на Jerry?

Задача 5. [Tom сизкуствен интелект“] Да се формулира нова стратегия за Tom, която ще му „имплантира“ интелект, с който да взема по-добри решения във всеки момент от развитието на партията.

Задача 6. [Игри върху грид с недостъпни полета] Игрите G2.1-G2.5 могат да се формулират, реализират и играят в много по-сложен вариант, при който в грида има недостъпни полета. Някои от тези игри са модели на реално съществуващи компютърни игри. Основната трудност при тях са алгоритмите, с които се извършва ход на дадена фигура върху грида. Тези алгоритми не са тривиални и най-често са алгоритми за търсене в граф. Наред с класическите алгоритми за търсене в ширина и дълбочина, някои игри използват техни модификации, в които има вградени евристики, като например алгоритъма \(A^{*}\) [4].

754J03J1Т22J2Т3Т11J3Т4Т00J4,T501234567
The game startsNumber of players = 2Grid's dimensions = 15x 5Player name: TomInitial position: [5,1]Player name: JerryInitial position: [1,4]Move 1Tom: [4, 2]Jerry:[0, 3]Move 2Tom: [3,3]Jerry:[0, 2]Move 3Tom: [2, 2]Jerry:[0, 1]Move 4Tom: [1, 1]Jerry:[1, 0]Move 5Tom: [1, 0]Tom is a great cat

Фигула 17. Илюстрация на партия от играта „Преследване“

В класа Grid има функция (setInaccCells), с която по случаен начин се генерира грид с \(I N A C C E S S I B L E\)(цяло положително число) процента недостъпни полета. В програмния текст от фиг. 9 като коментар е даден фрагмент, който трябва да се вмъкне при инициализирането на игра, в която гридът е с недостъпни клетки. Глобалната величина \(I N A C C E S S I B L E\) е параметър в игрите с грид и е декларирана в отделен файл.

Вместо заключение

Тръгвайки от конкретна математическа задача, описана като игра в (Чуканов, 1975), в статията е представен модел за изграждане на компютърни игри върху грид. Известно е, че разработването на професионални компютърни игри изисква решаването на множество трудни задачи. Част от тях обикновено са чисто математически. Но тъй като невинаги е възможно да се намери и математически да се докаже наличието на печеливша стратегия за много игри, най-често вземането на решение за ход се основава на изследването на възможните ходове и на двамата играчи. В общия случай броят на тези ходове е огромен и това налага да се разработват евристични алгоритми, които да генерират приемливи решения за разумно кратко време.

БЕЛЕЖКИ

1. Играта има математически анализ, съгласно който първият играч никога не губи, т.е. в най-лошия вариант за него играта завършва наравно (Чуканов, 1975).

2. Amit’s Game Programming Information. http://www-cs-students.stanford.

edu/~amitp/gameprog.html

ЛИТЕРАТУРА

Азълов, П. & Златарова, Ф. (2011). \(C++\) в примери, задачи и приложения. София: „Просвета“.

Чуканов, В. (1975). Математически игри. София: „Народна просвета“.

Grozdev, S. & Doichev, S. (2005). A didactical system of entertainment problems for the development of skills, Proc. Int. Conf. on Mathematics Education, Svishtov, June 3 – 5 2005, pp. 114 – 119.

Leuteneger, S. & Edgington, J. (2007). A Game First Approach to Teaching introductory Programming, Proc. ACM, SIGCSE’07, pp.115 – 118.

REFERENCES

Azalov, P. & Zlatarova, F. (2011). C++ v primeri, zadachi i prilozheniya. Sofiya: Prosveta.

Chukanov, V. (1975). Matematicheski igri. Sofiya: “Narodna prosveta”.

Grozdev, S. & Doichev, S. (2005). A didactical system of entertainment problems for the development of skills, Proc. Int. Conf. on Mathematics Education, Svishtov, June 3 – 5 2005, pp. 114 – 119.

Leuteneger, S. & Edgington, J. (2007). A Game First Approach to Teaching introductory Programming, Proc. ACM, SIGCSE’07, pp.115 – 118.

2025 година
Книжка 6
ENHANCING STUDENT MOTIVATION AND ACHIEVEMENT THROUGH DIGITAL MIND MAPPING

Mikloš Kovač, Mirjana Brdar, Goran Radojev, Radivoje Stojković

OPTIMIZATION VS BOOSTING: COMPARISON OF STRATEGIES ON EDUCATIONAL DATASETS TO EXPLORE LOW-PERFORMING AT-RISK AND DROPOUT STUDENTS

Ranjit Paul, Asmaa Mohamed, Peren Jerfi Canatalay, Ashima Kukkar, Sadiq Hussain, Arun K. Baruah, Jiten Hazarika, Silvia Gaftandzhieva, Esraa A. Mahareek, Abeer S. Desuky, Rositsa Doneva

ARTIFICIAL INTELLIGENCE AS A TOOL FOR PEDAGOGICAL INNOVATIONS IN MATHEMATICS EDUCATION

Stanka Hadzhikoleva, Maria Borisova, , Borislava Kirilova

Книжка 4
Книжка 3
МОДЕЛИ НА ВЕРОЯТНОСТНИ ПРОСТРАНСТВА В ОЛИМПИАДНИ ЗАДАЧИ

Драгомир Грозев, Станислав Харизанов

Книжка 1
A NOTE ON A GENERALIZED DYNAMICAL SYSTEM OCCURS IN MODELLING “THE BATTLE OF THE SEXES”: CHAOS IN SOCIOBIOLOGY

Nikolay Kyurkchiev, Anton Iliev, Vesselin Kyurkchiev, Angel Golev, Todorka Terzieva, Asen Rahnev

EDUCATIONAL RESOURCES FOR STUDYING MIDSEGMENTS OF TRIANGLE AND TRAPEZOID

Toni Chehlarova1), Neda Chehlarova2), Georgi Gachev

2024 година
Книжка 6
ВЪЗМОЖНОСТИ ЗА ИЗГРАЖДАНЕ НА МЕЖДУПРЕДМЕТНИ ВРЪЗКИ МАТЕМАТИКА – ИНФОРМАТИКА

Елена Каращранова, Ирена Атанасова, Надежда Борисова

Книжка 5
FRAMEWORK FOR DESIGNING VISUALLY ORIENTATED TOOLS TO SUPPORT PROJECT MANAGEMENT

Dalibor Milev, Nadezhda Borisova, Elena Karashtranova

3D ОБРАЗОВАТЕЛЕН ПОДХОД В ОБУЧЕНИЕТО ПО СТЕРЕОМЕТРИЯ

Пеньо Лебамовски, Марияна Николова

Книжка 4
DYNAMICS OF A NEW CLASS OF OSCILLATORS: MELNIKOV’S APPROACH, POSSIBLE APPLICATION TO ANTENNA ARRAY THEORY

Nikolay Kyurkchiev, Tsvetelin Zaevski, Anton Iliev, Vesselin Kyurkchiev, Asen Rahnev

Книжка 3
РАЗСТОЯНИЯ МЕЖДУ ЗАБЕЛЕЖИТЕЛНИ ТОЧКИ И НЕРАВЕНСТВА В ИЗПЪКНАЛ ЧЕТИРИЪГЪЛНИК

Йордан Табов, Станислав Стефанов, Красимир Кънчев, Хаим Хаимов

USING AI TO IMPROVE ANSWER EVALUATION IN AUTOMATED EXAMS

Georgi Cholakov, Asya Stoyanova-Doycheva

Книжка 2
ON INTEGRATION OF STEM MODULES IN MATHEMATICS EDUCATION

Elena Karashtranova, Aharon Goldreich, Nadezhda Borisova

Книжка 1
STUDENT SATISFACTION WITH THE QUALITY OF A BLENDED LEARNING COURSE

Silvia Gaftandzhieva, Rositsa Doneva, Sadiq Hussain, Ashis Talukder, Gunadeep Chetia, Nisha Gohain

MODERN ROAD SAFETY TRAINING USING GAME-BASED TOOLS

Stefan Stavrev, Ivelina Velcheva

ARTIFICIAL INTELLIGENCE FOR GOOD AND BAD IN CYBER AND INFORMATION SECURITY

Nikolay Kasakliev, Elena Somova, Margarita Gocheva

2023 година
Книжка 6
QUALITY OF BLENDED LEARNING COURSES: STUDENTS’ PERSPECTIVE

Silvia Gaftandzhieva, Rositsa Doneva, Sadiq Hussain, Ashis Talukder, Gunadeep Chetia, Nisha Gohain

МОДЕЛ НА ЛЕОНТИЕВ С MS EXCEL

Велика Кунева, Мариян Милев

Книжка 5
AREAS ASSOCIATED TO A QUADRILATERAL

Oleg Mushkarov, Nikolai Nikolov

ON THE DYNAMICS OF A ClASS OF THIRD-ORDER POLYNOMIAL DIFFERENCE EQUATIONS WITH INFINITE NUMBER OF PERIOD-THREE SOLUTIONS

Jasmin Bektešević, Vahidin Hadžiabdić, Midhat Mehuljić, Sadjit Metović, Haris Lulić

СИСТЕМА ЗА ИЗВЛИЧАНЕ И ВИЗУАЛИЗАЦИЯ НА ДАННИ ОТ ИНТЕРНЕТ

Георги Чолаков, Емил Дойчев, Светла Коева

Книжка 4
MULTIPLE REPRESENTATIONS OF FUNCTIONS IN THE FRAME OF DISTANCE LEARNING

Radoslav Božić, Hajnalka Peics, Aleksandar Milenković

INTEGRATED LESSONS IN CALCULUS USING SOFTWARE

Pohoriliak Oleksandr, Olga Syniavska, Anna Slyvka-Tylyshchak, Antonina Tegza, Alexander Tylyshchak

Книжка 3
ПРИЛОЖЕНИЕ НА ЕЛЕМЕНТИ ОТ ГЕОМЕТРИЯТА НА ЧЕТИРИЪГЪЛНИКА ЗА РЕШАВАНЕ НА НЕСТАНДАРТНИ ЗАДАЧИ

Йордан Табов, Веселин Ненков, Асен Велчев, Станислав Стефанов

Книжка 2
Книжка 1
НОВА ФОРМУЛА ЗА ЛИЦЕ НА ЧЕТИРИЪГЪЛНИК (ЧЕТИВО ЗА VII КЛАС)

Йордан Табов, Асен Велчев, Станислав Стефанов, Хаим Хаимов

2022 година
Книжка 6
MOBILE GAME-BASED MATH LEARNING FOR PRIMARY SCHOOL

Margarita Gocheva, Nikolay Kasakliev, Elena Somova

Книжка 5
SECURITY ANALYSIS ON CONTENT MANAGEMENT SYSTEMS

Lilyana Petkova, Vasilisa Pavlova

MONITORING OF STUDENT ENROLMENT CAMPAIGN THROUGH DATA ANALYTICS TOOLS

Silvia Gaftandzhieva, Rositsa Doneva, Milen Bliznakov

TYPES OF SOLUTIONS IN THE DIDACTIC GAME “LOGIC MONSTERS”

Nataliya Hristova Pavlova, Michaela Savova Toncheva

Книжка 4
PERSONAL DATA PROCESSING IN A DIGITAL EDUCATIONAL ENVIRONMENT

Evgeniya Nikolova, Mariya Monova-Zheleva, Yanislav Zhelev

Книжка 3
Книжка 2
STEM ROBOTICS IN PRIMARY SCHOOL

Tsanko Mihov, Gencho Stoitsov, Ivan Dimitrov

A METAGRAPH MODEL OF CYBER PROTECTION OF AN INFORMATION SYSTEM

Emiliya Koleva, Evgeni Andreev, Mariya Nikolova

Книжка 1
CONVOLUTIONAL NEURAL NETWORKS IN THE TASK OF IMAGE CLASSIFICATION

Larisa Zelenina, Liudmila Khaimina, Evgenii Khaimin, D. Khripunov, Inga Zashikhina

INNOVATIVE PROPOSALS FOR DATABASE STORAGE AND MANAGEMENT

Yulian Ivanov Petkov, Alexandre Ivanov Chikalanov

APPLICATION OF MATHEMATICAL MODELS IN GRAPHIC DESIGN

Ivaylo Staribratov, Nikol Manolova

РЕШЕНИЯ НА КОНКУРСНИ ЗАДАЧИ БРОЙ 6, 2021 Г.

Задача 1. Дадени са различни естествени числа, всяко от които има прос- ти делители, не по-големи от . Докажете, че произведението на някои три от тези числа е точен куб. Решение: числата са представим във вида . Нека разгледаме квадрат

2021 година
Книжка 6
E-LEARNING DURING COVID-19 PANDEMIC: AN EMPIRICAL RESEARCH

Margarita Gocheva, Nikolay Kasakliev, Elena Somova

Книжка 5
ПОДГОТОВКА ЗА XXV МЛАДЕЖКА БАЛКАНИАДА ПО МАТЕМАТИКА 2021

Ивайло Кортезов, Емил Карлов, Мирослав Маринов

EXCEL’S CALCULATION OF BASIC ASSETS AMORTISATION VALUES

Vehbi Ramaj, Sead Rešić, Anes Z. Hadžiomerović

EDUCATIONAL ENVIRONMENT AS A FORM FOR DEVELOPMENT OF MATH TEACHERS METHODOLOGICAL COMPETENCE

Olha Matiash, Liubov Mykhailenko, Vasyl Shvets, Oleksandr Shkolnyi

Книжка 4
LEARNING ANALYTICS TOOL FOR BULGARIAN SCHOOL EDUCATION

Silvia Gaftandzhieva, Rositsa Doneva, George Pashev, Mariya Docheva

Книжка 3
THE PROBLEM OF IMAGES’ CLASSIFICATION: NEURAL NETWORKS

Larisa Zelenina, Liudmila Khaimina, Evgenii Khaimin, D. Khripunov, Inga Zashikhina

MIDLINES OF QUADRILATERAL

Sead Rešić, Maid Omerović, Anes Z. Hadžiomerović, Ahmed Palić

ВИРТУАЛЕН ЧАС ПО МАТЕМАТИКА

Севдалина Георгиева

Книжка 2
MOBILE MATH GAME PROTOTYPE ON THE BASE OF TEMPLATES FOR PRIMARY SCHOOL

Margarita Gocheva, Elena Somova, Nikolay Kasakliev, Vladimira Angelova

КОНКУРСНИ ЗАДАЧИ БРОЙ 2/2021 Г.

Краен срок за изпращане на решения: 0 юни 0 г.

РЕШЕНИЯ НА ЗАДАЧИТЕ ОТ БРОЙ 1, 2021

Краен срок за изпращане на решения: 0 юни 0 г.

Книжка 1
СЕДЕМНАДЕСЕТА ЖАУТИКОВСКА ОЛИМПИАДА ПО МАТЕМАТИКА, ИНФОРМАТИКА И ФИЗИКА АЛМАТИ, 7-12 ЯНУАРИ 2021

Диян Димитров, Светлин Лалов, Стефан Хаджистойков, Елена Киселова

ОНЛАЙН СЪСТЕЗАНИЕ „VIVA МАТЕМАТИКА С КОМПЮТЪР“

Петър Кендеров, Тони Чехларова, Георги Гачев

2020 година
Книжка 6
ABSTRACT DATA TYPES

Lasko M. Laskov

Книжка 5
GAMIFICATION IN CLOUD-BASED COLLABORATIVE LEARNING

Denitza Charkova, Elena Somova, Maria Gachkova

NEURAL NETWORKS IN A CHARACTER RECOGNITION MOBILE APPLICATION

L.I. Zelenina, L.E. Khaimina, E.S. Khaimin, D.I. Antufiev, I.M. Zashikhina

APPLICATIONS OF ANAGLIFIC IMAGES IN MATHEMATICAL TRAINING

Krasimir Harizanov, Stanislava Ivanova

МЕТОД НА ДЕЦАТА В БЛОКА

Ивайло Кортезов

Книжка 4
TECHNOLOGIES AND TOOLS FOR CREATING ADAPTIVE E-LEARNING CONTENT

Todorka Terzieva, Valya Arnaudova, Asen Rahnev, Vanya Ivanova

Книжка 3
MATHEMATICAL MODELLING IN LEARNING OUTCOMES ASSESSMENT (BINARY MODEL FOR THE ASSESSMMENT OF STUDENT’S COMPETENCES FORMATION)

L. E. Khaimina, E. A. Demenkova, M. E. Demenkov, E. S. Khaimin, L. I. Zelenina, I. M. Zashikhina

PROBLEMS 2 AND 5 ON THE IMO’2019 PAPER

Sava Grozdev, Veselin Nenkov

Книжка 2
ЗА ВЕКТОРНОТО ПРОСТРАНСТВО НА МАГИЧЕСКИТЕ КВАДРАТИ ОТ ТРЕТИ РЕД (В ЗАНИМАТЕЛНАТА МАТЕМАТИКА)

Здравко Лалчев, Маргарита Върбанова, Мирослав Стоимиров, Ирина Вутова

КОНКУРЕНТНИ ПЕРПЕНДИКУЛЯРИ, ОПРЕДЕЛЕНИ ОТ ПРАВИЛНИ МНОГОЪГЪЛНИЦИ

Йоана Христова, Геновева Маринова, Никола Кушев, Светослав Апостолов, Цветомир Иванов

A NEW PROOF OF THE FEUERBACH THEOREM

Sava Grozdev, Hiroshi Okumura, Deko Dekov

PROBLEM 3 ON THE IMO’2019 PAPER

Sava Grozdev, Veselin Nenkov

Книжка 1
GENDER ISSUES IN VIRTUAL TRAINING FOR MATHEMATICAL KANGAROO CONTEST

Mark Applebaum, Erga Heller, Lior Solomovich, Judith Zamir

KLAMKIN’S INEQUALITY AND ITS APPLICATION

Šefket Arslanagić, Daniela Zubović

НЯКОЛКО ПРИЛОЖЕНИЯ НА ВЪРТЯЩАТА ХОМОТЕТИЯ

Сава Гроздев, Веселин Ненков

2019 година
Книжка 6
DISCRETE MATHEMATICS AND PROGRAMMING – TEACHING AND LEARNING APPROACHES

Mariyana Raykova, Hristina Kostadinova, Stoyan Boev

CONVERTER FROM MOODLE LESSONS TO INTERACTIVE EPUB EBOOKS

Martin Takev, Elena Somova, Miguel Rodríguez-Artacho

ЦИКЛОИДА

Аяпбергенов Азамат, Бокаева Молдир, Чурымбаев Бекнур, Калдыбек Жансуйген

КАРДИОИДА

Евгений Воронцов, Никита Платонов

БОЛГАРСКАЯ ОЛИМПИАДА ПО ФИНАНСОВОЙ И АКТУАРНОЙ МАТЕМАТИКЕ В РОССИИ

Росен Николаев, Сава Гроздев, Богдана Конева, Нина Патронова, Мария Шабанова

КОНКУРСНИ ЗАДАЧИ НА БРОЯ

Задача 1. Да се намерят всички полиноми, които за всяка реална стойност на удовлетворяват равенството Татяна Маджарова, Варна Задача 2. Правоъгълният триъгълник има остри ъгли и , а центърът на вписаната му окръжност е . Точката , лежаща в , е такава, че и . Симетралите

РЕШЕНИЯ НА ЗАДАЧИТЕ ОТ БРОЙ 1, 2019

Задача 1. Да се намерят всички цели числа , за които

Книжка 5
ДЪЛБОКО КОПИЕ В C++ И JAVA

Христина Костадинова, Марияна Райкова

КОНКУРСНИ ЗАДАЧИ НА БРОЯ

Задача 1. Да се намери безкрайно множество от двойки положителни ра- ционални числа Милен Найденов, Варна

РЕШЕНИЯ НА ЗАДАЧИТЕ ОТ БРОЙ 6, 2018

Задача 1. Точката е левият долен връх на безкрайна шахматна дъска. Една муха тръгва от и се движи само по страните на квадратчетата. Нека е общ връх на някои квадратчета. Казва- ме, че мухата изминава пътя между и , ако се движи само надясно и нагоре. Ако точките и са противоположни върхове на правоъгълник , да се намери броят на пътищата, свърз- ващи точките и , по които мухата може да мине, когато: а) и ; б) и ; в) и

Книжка 4
THE REARRANGEMENT INEQUALITY

Šefket Arslanagić

АСТРОИДА

Борислав Борисов, Деян Димитров, Николай Нинов, Теодор Христов

COMPUTER PROGRAMMING IN MATHEMATICS EDUCATION

Marin Marinov, Lasko Laskov

CREATING INTERACTIVE AND TRACEABLE EPUB LEARNING CONTENT FROM MOODLE COURSES

Martin Takev, Miguel Rodríguez-Artacho, Elena Somova

КОНКУРСНИ ЗАДАЧИ НА БРОЯ

Задача 1. Да се реши уравнението . Христо Лесов, Казанлък Задача 2. Да се докаже, че в четириъгълник с перпендикулярни диагонали съществува точка , за която са изпълнени равенствата , , , . Хаим Хаимов, Варна Задача 3. В правилен 13-ъгълник по произволен начин са избрани два диа- гонала. Каква е вероятността избраните диагонали да не се пресичат? Сава Гроздев, София, и Веселин Ненков, Бели Осъм

РЕШЕНИЯ НА ЗАДАЧИТЕ ОТ БРОЙ 5, 2018

Задача 1. Ако и са съвършени числа, за които целите части на числата и са равни и различни от нула, да се намери .

Книжка 3
RESULTS OF THE FIRST WEEK OF CYBERSECURITY IN ARKHANGELSK REGION

Olga Troitskaya, Olga Bezumova, Elena Lytkina, Tatyana Shirikova

DIDACTIC POTENTIAL OF REMOTE CONTESTS IN COMPUTER SCIENCE

Natalia Sofronova, Anatoliy Belchusov

КОНКУРСНИ ЗАДАЧИ НА БРОЯ

Краен срок за изпращане на решения 30 ноември 2019 г.

РЕШЕНИЯ НА ЗАДАЧИТЕ ОТ БРОЙ 4, 2018

Задача 1. Да се намерят всички тройки естествени числа е изпълнено равенството: а)

Книжка 2
ЕЛЕКТРОНЕН УЧЕБНИК ПО ОБЗОРНИ ЛЕКЦИИ ЗА ДЪРЖАВЕН ИЗПИТ В СРЕДАТА DISPEL

Асен Рахнев, Боян Златанов, Евгения Ангелова, Ивайло Старибратов, Валя Арнаудова, Слав Чолаков

ГЕОМЕТРИЧНИ МЕСТА, ПОРОДЕНИ ОТ РАВНОСТРАННИ ТРИЪГЪЛНИЦИ С ВЪРХОВЕ ВЪРХУ ОКРЪЖНОСТ

Борислав Борисов, Деян Димитров, Николай Нинов, Теодор Христов

ЕКСТРЕМАЛНИ СВОЙСТВА НА ТОЧКАТА НА ЛЕМОАН В ЧЕТИРИЪГЪЛНИК

Веселин Ненков, Станислав Стефанов, Хаим Хаимов

A TRIANGLE AND A TRAPEZOID WITH A COMMON CONIC

Sava Grozdev, Veselin Nenkov

КОНКУРСНИ ЗАДАЧИ НА БРОЯ

Христо Лесов, Казанлък Задача 2. Окръжност с диаметър и правоъгълник с диагонал имат общ център. Да се докаже, че за произволна точка M от е изпълне- но равенството . Милен Найденов, Варна Задача 3. В изпъкналия четириъгълник са изпълнени равенства- та и . Точката е средата на диагонала , а , , и са ортоганалните проекции на съответно върху правите , , и . Ако и са средите съответно на отсечките и , да се докаже, че точките , и лежат на една права.

РЕШЕНИЯ НА ЗАДАЧИТЕ ОТ БРОЙ 3, 2018

Задача 1. Да се реши уравнението . Росен Николаев, Дико Суружон, Варна Решение. Въвеждаме означението , където . Съгласно това означение разлежданото уравнение придобива вида не е решение на уравнението. Затова са възможни само случаите 1) и 2) . Разглеж- даме двата случая поотделно. Случай 1): при е изпълнено равенството . Тогава имаме:

Книжка 1
PROBLEM 6. FROM IMO’2018

Sava Grozdev, Veselin Nenkov

РЕШЕНИЯ НА ЗАДАЧИТЕ ОТ БРОЙ 2, 2018

Задача 1. Да се намери най-малкото естествено число , при което куба с целочислени дължини на ръбовете в сантиметри имат сума на обемите, рав- на на Христо Лесов, Казанлък Решение: тъй като , то не е куб на ес- тествено число и затова . Разглеждаме последователно случаите за . 1) При разглеждаме естествени числа и , за които са изпълнени релациите и . Тогава то , т.е. . Освен това откъдето , т.е. .Така получихме, че . Лесно се проверява, че при и няма естествен

КОНКУРСНИ ЗАДАЧИ НА БРОЯ

Задача 1. Да се намерят всички цели числа , за които

2018 година
Книжка 6
„ЭНЦИКЛОПЕДИЯ ЗАМЕЧАТЕЛЬНЫХ ПЛОСКИХ КРИВЫХ“ – МЕЖДУНАРОДНЫЙ СЕТЕВОЙ ИССЛЕДОВАТЕЛЬСКИЙ ПРОЕКТ В РАМКАХ MITE

Роза Атамуратова, Михаил Алфёров, Марина Белорукова, Веселин Ненков, Валерий Майер, Генадий Клековкин, Раиса Овчинникова, Мария Шабанова, Александр Ястребов

A NEW MEANING OF THE NOTION “EXPANSION OF A NUMBER”

Rosen Nikolaev, Tanka Milkova, Radan Miryanov

Книжка 5
ИТОГИ ПРОВЕДЕНИЯ ВТОРОЙ МЕЖДУНАРОДНОЙ ОЛИМПИАДЬI ПО ФИНАНСОВОЙ И АКТУАРНОЙ МАТЕМАТИКЕ СРЕДИ ШКОЛЬНИКОВ И СТУДЕНТОВ

Сава Гроздев, Росен Николаев, Мария Шабанова, Лариса Форкунова, Нина Патронова

LEARNING AND ASSESSMENT BASED ON GAMIFIED E-COURSE IN MOODLE

Mariya Gachkova, Martin Takev, Elena Somova

УЛИТКА ПАСКАЛЯ

Дарья Коптева, Ксения Горская

КОМБИНАТОРНИ ЗАДАЧИ, СВЪРЗАНИ С ТРИЪГЪЛНИК

Росен Николаев, Танка Милкова, Катя Чалъкова

Книжка 4
ЗА ПРОСТИТЕ ЧИСЛА

Сава Гроздев, Веселин Ненков

ИНЦЕНТЪР НА ЧЕТИРИЪГЪЛНИК

Станислав Стефанов

ЭПИЦИКЛОИДА

Инкар Аскар, Камила Сарсембаева

ГИПОЦИКЛОИДА

Борислав Борисов, Деян Димитров, Иван Стефанов, Николай Нинов, Теодор Христов

Книжка 3
ПОЛИНОМИ ОТ ТРЕТА СТЕПЕН С КОЛИНЕАРНИ КОРЕНИ

Сава Гроздев, Веселин Ненков

ЧЕТИРИДЕСЕТ И ПЕТА НАЦИОНАЛНА СТУДЕНТСКА ОЛИМПИАДА ПО МАТЕМАТИКА

Сава Гроздев, Росен Николаев, Станислава Стоилова, Веселин Ненков

Книжка 2
TWO INTERESTING INEQUALITIES FOR ACUTE TRIANGLES

Šefket Arslanagić, Amar Bašić

ПЕРФЕКТНА ИЗОГОНАЛНОСТ В ЧЕТИРИЪГЪЛНИК

Веселин Ненков, Станислав Стефанов, Хаим Хаимов

НЯКОИ ТИПОВЕ ЗАДАЧИ СЪС СИМЕТРИЧНИ ЧИСЛА

Росен Николаев, Танка Милкова, Радан Мирянов

Книжка 1
Драги читатели,

където тези проценти са наполовина, в Източна Европа те са около 25%, в

COMPUTER DISCOVERED MATHEMATICS: CONSTRUCTIONS OF MALFATTI SQUARES

Sava Grozdev, Hiroshi Okumura, Deko Dekov

ВРЪЗКИ МЕЖДУ ЗАБЕЛЕЖИТЕЛНИ ТОЧКИ В ЧЕТИРИЪГЪЛНИКА

Станислав Стефанов, Веселин Ненков

КОНКУРСНИ ЗАДАЧИ НА БРОЯ

Задача 2. Да се докаже, че всяка от симедианите в триъгълник с лице разделя триъгълника на два триъгълника, лицата на които са корени на урав- нението където и са дължините на прилежащите на симедианата страни на три- ъгълника. Милен Найденов, Варна Задача 3. Четириъгълникът е описан около окръжност с център , като продълженията на страните му и се пресичат в точка . Ако е втората пресечна точка на описаните окръжности на триъгълниците и , да се докаже, че Хаим Х

РЕШЕНИЯ НА ЗАДАЧИТЕ ОТ БРОЙ 2, 2017

Задача 1. Да се определи дали съществуват естествени числа и , при които стойността на израза е: а) куб на естествено число; б) сбор от кубовете на две естествени числа; в) сбор от кубовете на три естествени числа. Христо Лесов, Казанлък Решение: при и имаме . Следова- телно случай а) има положителен отговор. Тъй като при число- то се дели на , то при и имаме е естестве- но число. Следователно всяко число от разглеждания вид при деление на дава ос

2017 година
Книжка 6
A SURVEY OF MATHEMATICS DISCOVERED BY COMPUTERS. PART 2

Sava Grozdev, Hiroshi Okumura, Deko Dekov

ТРИ ИНВАРИАНТЫ В ОДНУ ЗАДА

Ксения Горская, Дарья Коптева, Асхат Ермекбаев, Арман Жетиру, Азат Бермухамедов, Салтанат Кошер, Лили Стефанова, Ирина Христова, Александра Йовкова

GAMES WITH

Aldiyar Zhumashov

SOME NUMERICAL SQUARE ROOTS (PART TWO)

Rosen Nikolaev, Tanka Milkova, Yordan Petkov

ЗАНИМАТЕЛНИ ЗАДАЧИ ПО ТЕМАТА „КАРТИННА ГАЛЕРИЯ“

Мирослав Стоимиров, Ирина Вутова

Книжка 5
ВТОРОЙ МЕЖДУНАРОДНЫЙ СЕТЕВОЙ ИССЛЕДОВАТЕЛЬСКИЙ ПРОЕКТ УЧАЩИХСЯ В РАМКАХ MITE

Мария Шабанова, Марина Белорукова, Роза Атамуратова, Веселин Ненков

SOME NUMERICAL SEQUENCES CONCERNING SQUARE ROOTS (PART ONE)

Rosen Nikolaev, Tanka Milkova, Yordan Petkov

Книжка 4
ГЕНЕРАТОР НА ТЕСТОВЕ

Ангел Ангелов, Веселин Дзивев

INTERESTING PROOFS OF SOME ALGEBRAIC INEQUALITIES

Šefket Arslanagić, Faruk Zejnulahi

PROBLEMS ON THE BROCARD CIRCLE

Sava Grozdev, Hiroshi Okumura, Deko Dekov

ПРИЛОЖЕНИЕ НА ЛИНЕЙНАТА АЛГЕБРА В ИКОНОМИКАТА

Велика Кунева, Захаринка Ангелова

СКОРОСТТА НА СВЕТЛИНАТА

Сава Гроздев, Веселин Ненков

Книжка 3
НЯКОЛКО ПРИЛОЖЕНИЯ НА ТЕОРЕМАТА НА МЕНЕЛАЙ ЗА ВПИСАНИ ОКРЪЖНОСТИ

Александра Йовкова, Ирина Христова, Лили Стефанова

НАЦИОНАЛНА СТУДЕНТСКА ОЛИМПИАДА ПО МАТЕМАТИКА

Сава Гроздев, Росен Николаев, Веселин Ненков

СПОМЕН ЗА ПРОФЕСОР АНТОН ШОУРЕК

Александра Трифонова

Книжка 2
ИЗКУСТВЕНА ИМУННА СИСТЕМА

Йоанна Илиева, Селин Шемсиева, Светлана Вълчева, Сюзан Феимова

ВТОРИ КОЛЕДЕН ЛИНГВИСТИЧЕН ТУРНИР

Иван Держански, Веселин Златилов

Книжка 1
ГЕОМЕТРИЯ НА ЧЕТИРИЪГЪЛНИКА, ТОЧКА НА МИКЕЛ, ИНВЕРСНА ИЗОГОНАЛНОСТ

Веселин Ненков, Станислав Стефанов, Хаим Хаимов

2016 година
Книжка 6
ПЕРВЫЙ МЕЖДУНАРОДНЫЙ СЕТЕВОЙ ИССЛЕДОВАТЕЛЬСКИЙ ПРОЕКТ УЧАЩИХСЯ В РАМКАХ MITE

Мария Шабанова, Марина Белорукова, Роза Атамуратова, Веселин Ненков

НЕКОТОРЫЕ ТРАЕКТОРИИ, КОТОРЫЕ ОПРЕДЕЛЕНЫ РАВНОБЕДРЕННЫМИ ТРЕУГОЛЬНИКАМИ

Ксения Горская, Дарья Коптева, Даниил Микуров, Еркен Мудебаев, Казбек Мухамбетов, Адилбек Темирханов, Лили Стефанова, Ирина Христова, Радина Иванова

ПСЕВДОЦЕНТЪР И ОРТОЦЕНТЪР – ЗАБЕЛЕЖИТЕЛНИ ТОЧКИ В ЧЕТИРИЪГЪЛНИКА

Веселин Ненков, Станислав Стефанов, Хаим Хаимов

FUZZY LOGIC

Reinhard Magenreuter

GENETIC ALGORITHM

Reinhard Magenreuter

Книжка 5
NEURAL NETWORKS

Reinhard Magenreuter

Книжка 4
АКТИВНО, УЧАСТВАЩО НАБЛЮДЕНИЕ – ТИП ИНТЕРВЮ

Христо Христов, Христо Крушков

ХИПОТЕЗАТА В ОБУЧЕНИЕТО ПО МАТЕМАТИКА

Румяна Маврова, Пенка Рангелова, Елена Тодорова

Книжка 3
ОБОБЩЕНИЕ НА ТЕОРЕМАТА НА ЧЕЗАР КОШНИЦА

Сава Гроздев, Веселин Ненков

Книжка 2
ОЙЛЕР-ВЕН ДИАГРАМИ ИЛИ MZ-КАРТИ В НАЧАЛНАТА УЧИЛИЩНА МАТЕМАТИКА

Здравко Лалчев, Маргарита Върбанова, Ирина Вутова, Иван Душков

ОБВЪРЗВАНЕ НА ОБУЧЕНИЕТО ПО АЛГЕБРА И ГЕОМЕТРИЯ

Румяна Маврова, Пенка Рангелова

Книжка 1
STATIONARY NUMBERS

Smaiyl Makyshov

МЕЖДУНАРОДНА ЖАУТИКОВСКА ОЛИМПИАДА

Сава Гроздев, Веселин Ненков

2015 година
Книжка 6
Книжка 5
Книжка 4
Книжка 3
МОТИВАЦИОННИТЕ ЗАДАЧИ В ОБУЧЕНИЕТО ПО МАТЕМАТИКА

Румяна Маврова, Пенка Рангелова, Зара Данаилова-Стойнова

Книжка 2
САМОСТОЯТЕЛНО РЕШАВАНЕ НА ЗАДАЧИ С EXCEL

Пламен Пенев, Диана Стефанова

Книжка 1
ГЕОМЕТРИЧНА КОНСТРУКЦИЯ НА КРИВА НА ЧЕВА

Сава Гроздев, Веселин Ненков

2014 година
Книжка 6
КОНКУРЕНТНОСТ, ПОРОДЕНА ОТ ТАНГЕНТИ

Сава Гроздев, Веселин Ненков

Книжка 5
ИНФОРМАТИКА В ШКОЛАХ РОССИИ

С. А. Бешенков, Э. В. Миндзаева

ОЩЕ ЕВРИСТИКИ С EXCEL

Пламен Пенев

ДВА ПОДХОДА ЗА ИЗУЧАВАНЕ НА УРАВНЕНИЯ В НАЧАЛНАТА УЧИЛИЩНА МАТЕМАТИКА

Здравко Лалчев, Маргарита Върбанова, Ирина Вутова

Книжка 4
ОБУЧЕНИЕ В СТИЛ EDUTAINMENT С ИЗПОЛЗВАНЕ НА КОМПЮТЪРНА ГРАФИКА

Христо Крушков, Асен Рахнев, Мариана Крушкова

Книжка 3
ИНВЕРСИЯТА – МЕТОД В НАЧАЛНАТА УЧИЛИЩНА МАТЕМАТИКА

Здравко Лалчев, Маргарита Върбанова

СТИМУЛИРАНЕ НА ТВОРЧЕСКА АКТИВНОСТ ПРИ БИЛИНГВИ ЧРЕЗ ДИНАМИЧЕН СОФТУЕР

Сава Гроздев, Диана Стефанова, Калина Василева, Станислава Колева, Радка Тодорова

ПРОГРАМИРАНЕ НА ЧИСЛОВИ РЕДИЦИ

Ивайло Старибратов, Цветана Димитрова

Книжка 2
ФРАКТАЛЬНЫЕ МЕТО

Валерий Секованов, Елена Селезнева, Светлана Шляхтина

Книжка 1
ЕВРИСТИКА С EXCEL

Пламен Пенев

SOME INEQUALITIES IN THE TRIANGLE

Šefket Arslanagić

2013 година
Книжка 6
Книжка 5
МАТЕМАТИЧЕСКИЕ РЕГАТЬI

Александр Блинков

Книжка 4
Книжка 3
АКАДЕМИК ПЕТЪР КЕНДЕРОВ НА 70 ГОДИНИ

чл. кор. Юлиан Ревалски

ОБЛАЧНИ ТЕХНОЛОГИИ И ВЪЗМОЖНОСТИ ЗА ПРИЛОЖЕНИЕ В ОБРАЗОВАНИЕТО

Сава Гроздев, Иванка Марашева, Емил Делинов

СЪСТЕЗАТЕЛНИ ЗАДАЧИ ПО ИНФОРМАТИКА ЗА ГРУПА Е

Ивайло Старибратов, Цветана Димитрова

Книжка 2
ЕКСПЕРИМЕНТАЛНАТА МАТЕМАТИКА В УЧИЛИЩЕ

Сава Гроздев, Борислав Лазаров

МАТЕМАТИКА С КОМПЮТЪР

Сава Гроздев, Деко Деков

ЕЛИПТИЧЕН АРБЕЛОС

Пролет Лазарова

Книжка 1
ФРАГМЕНТИ ОТ ПАМЕТТА

Генчо Скордев

2012 година
Книжка 6
ДВЕ ДИДАКТИЧЕСКИ СТЪЛБИ

Сава Гроздев, Светлозар Дойчев

ТЕОРЕМА НА ПОНСЕЛЕ ЗА ЧЕТИРИЪГЪЛНИЦИ

Сава Гроздев, Веселин Ненков

ИЗЛИЧАНЕ НА ОБЕКТИВНИ ЗНАНИЯ ОТ ИНТЕРНЕТ

Ивайло Пенев, Пламен Пенев

Книжка 5
ДЕСЕТА МЕЖДУНАРОДНА ОЛИМПИАДА ПО ЛИНГВИСТИКА

д–р Иван А. Держански (ИМИ–БАН)

ТЕОРЕМА НА ВАН ОБЕЛ И ПРИЛОЖЕНИЯ

Тодорка Глушкова, Боян Златанов

МАТЕМАТИЧЕСКИ КЛУБ „СИГМА” В СВЕТЛИНАТА НА ПРОЕКТ УСПЕХ

Сава Гроздев, Иванка Марашева, Емил Делинов

I N M E M O R I A M

На 26 септември 2012 г. след продължително боледуване ни напусна проф. дпн Иван Ганчев Донев. Той е първият професор и първият доктор на науките в България по методика на обучението по математика. Роден е на 6 май 1935 г. в с. Страхилово, В. Търновско. След завършване на СУ “Св. Кл. Охридски” става учител по математика в гр. Свищов. Тук той организира първите кръжоци и със- тезания по математика. През 1960 г. Иван Ганчев печели конкурс за асистент в СУ и още през следващата година започ

Книжка 4
Книжка 3
СЛУЧАЙНО СЪРФИРАНЕ В ИНТЕРНЕТ

Евгения Стоименова

Книжка 2
SEEMOUS OLYMPIAD FOR UNIVERSITY STUDENTS

Sava Grozdev, Veselin Nenkov

EUROMATH SCIENTIFIC CONFERENCE

Sava Grozdev, Veselin Nenkov

FIVE WAYS TO SOLVE A PROBLEM FOR A TRIANGLE

Šefket Arslanagić, Dragoljub Milošević

ПРОПОРЦИИ

Валя Георгиева

ПЪТЕШЕСТВИЕ В СВЕТА НА КОМБИНАТОРИКАТА

Росица Керчева, Румяна Иванова

ПОЛЗОТВОРНА ПРОМЯНА

Ивайло Старибратов

Книжка 1
ЗА ЕЛЕКТРОННОТО ОБУЧЕНИЕ

Даниела Дурева (Тупарова)

МАТЕМАТИКАТА E ЗАБАВНА

Веселина Вълканова

СРАВНЯВАНЕ НА ИЗРАЗИ С КВАДРАТНИ КОРЕНИ

Гинка Бизова, Ваня Лалева