https://github.com/sonytruelove/micropather-semantic-annotation
:open_book: semantic annotation of the MicroPather library
https://github.com/sonytruelove/micropather-semantic-annotation
a annotation c cplusplus cplusplus-20 hyperpolyglot institute istu labotary leethomason library mircopather pathfinding practical programming semantic semantic-analysis work
Last synced: about 1 month ago
JSON representation
:open_book: semantic annotation of the MicroPather library
- Host: GitHub
- URL: https://github.com/sonytruelove/micropather-semantic-annotation
- Owner: sonytruelove
- Created: 2023-06-25T07:48:54.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2023-06-25T08:41:35.000Z (almost 2 years ago)
- Last Synced: 2025-01-23T16:11:38.261Z (3 months ago)
- Topics: a, annotation, c, cplusplus, cplusplus-20, hyperpolyglot, institute, istu, labotary, leethomason, library, mircopather, pathfinding, practical, programming, semantic, semantic-analysis, work
- Language: C++
- Homepage:
- Size: 73.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Актуальность
Ниже представлено мое семантическое аннотирование библиотеки MicroPather написаной leethomason на С++. Я надеюсь это поможет разобраться в используемых приемах всем желающим.
Below is my semantic annotation of the MicroPather library written by leethomason in C++. I hope this will help everyone understand the techniques used.
https://github.com/leethomason/MicroPather
1.Описание библеотеки
MicroPather решает задачи по поиску путей, в том числе A* (astar или a-star), написан независимо от платформы C++, который может быть легко интегрирован в существующий код. MicroPather фокусируется на том, чтобы быть механизмом поиска путей для видеоигр, но является универсальным решателем A *. MicroPather имеет открытый исходный код с лицензией, подходящей для использования с открытым исходным кодом или в коммерческих целях.Целями MicroPather являются:
• Простая интеграция в игры и другое программное обеспечение.
• Простой в использовании и понятный интерфейс.
• Быстродействие
2. Описание темы
В видеоиграх проблема поиска пути возникает во многих современных играх. Каково кратчайшее расстояние от точки А до точки В? Люди хорошо справляются с этой проблемой. Вы естественным образом находите путь почти каждый раз, когда двигаетесь, но его сложно выразить в виде компьютерного алгоритма. A * - это метод "рабочей лошадки" для решения путевых задач. Он оптимизирован для быстрого поиска решения, а не с помощью грубой силы, но он никогда не подведет, если решение есть.
A * гораздо более универсален, чем просто поиск пути. A * и MicroPather можно было бы использовать для поиска решения задач общего состояния, например, их можно было бы использовать для решения головоломки с кубиком рубика.
3. Описание процесса установки библиотеки
Вкратце, эти шаги таковы:
1. Включите файлы MicroPather
2. Реализуйте графический интерфейс
3. Вызовите решателя
4. Включите файлы программы
Есть только 2 файла для micropather: micropather.cpp и micropather.h. Таким образом, нет ни сборки, ни make, просто добавьте эти 2 файла в свой проект. Они являются стандартными для C++ и не требуют исключений или RTTI.
Предполагая, что вы создаете отладочную версию своего проекта с помощью _DEBUG или DEBUG (а это делают все), MicroPather выполнит дополнительную проверку в этих режимах.
Пример использования: GitHub - leethomason/MicroPather: MicroPather is a path finder and A* solver (astar or a-star) written in platform independent C++ that can be easily integrated into existing code. MicroPather focuses on being a path finding engine for video games but is a generic A* solver.
4.Таблица семантического аннотирования
Micropather.h
№
Идиома
Строки кода
Комментарии
1
39,42,45,51,59,62,62,68
DEBUG не путать с _DEBUG
2
Защита заголовка
26,27,508
-
3
44,47,61,64,73,76,77
-
4
Управление ходом программы на этапе
компиляции
41-46,49-53,56-69,72-82,86-130,246-255,493-495
-
5
Директивы препроцессора
59,60,61,62,72(5-15),75(5-15)
-
6
Системные макросы
62(120-135)
-
7
84
-
8
74,78,81
-
9
12,22,29,30,115,258-261
-
10
13,20,21,27
-
11
32,367
-
12
19
-
13
24,34
-
14
write formatted string to stdout
23
-
15
26(5-14),99,102(45-54),105(50-60),118,119,213,214,249,251,252
-
16
32
Проверка ввода
17
30
Проверка ввода
18
92,93
-
19
95,274,375,399,451,486
-
20
96,162,275,376,452
-
21
95(8-15),121
-
21
98,99
-
22
98,99-101
-
23
103,106,111(30-40),320(20-30),321(20-30),356,357,371,383(30-40),384(30-40)
-
24
109,367(40-45)
-
25
102,105,266,487
-
26
94,113,264,273,312,350,389,417,485
-
27
81(6-15),111,114(20-30),116,126,127,205(35-44),223,274(30-40,41-48),292,310,319,320,321,322(10-18),335,336,337,339,340,364,365,451(30-41,41-50),503
-
28
117(28-42)
-
29
120
-
30
120(30-50),367(30-45)
-
31
138-142,191-195,314-317,351-373,398-406
-
32
141,207,208,219,220,221,223,294,295,361,381(40-50),402,406,463(60-70),474(40-51),500(10-15)
-
33
93,159-186,189,202-267,271-341,348-396,413-508
-
34
98,99-101,108,111,114,170,178,185,205,211,212-216,235-239,240-245,247-254,257-262,278,292-296,299,302,306,310,323,324,363-373,378,379,380,383,384,463,474,479,482,483,489,491
-
35
162,170,178,185
-
36
Чистые виртуальные функции
170,178,185
-
37
214(15-20,24-29),258(30-36,40-46),261(0-26)
-
38
193,222,229,230,497,498,499,500,502,504
-
39
226,227,302(27-31,32-38),306(20-26,26-31),331,332,380(40-51),381,386,387,394,395,400,401,404,405,463
-
40
222,223,356,357,451(50-61)
-
41
215,241
-
42
1-23,30-38,146-157,409-412,420-450
Комментарии для понимания библеотеки и ее возможных адаптаций
43
302(20-26),356(19-30),364,379(20-30,30-40),390,391
-
44
Константные функции
320,321,356,357,363,383,384
-
45
320(20-24),321(21-25)
-
46
368,369
-
47
Дружественный класс
415
-
48
418-426
Состояния решения
49
binary, octal, and hex literals
365
Создание
Hash
Micropather.cpp
№
Идиома
Строки кода
Комментарии
1
31,32,40
-
2
Управление ходом программы на этапе
компиляции
26-29,39-41,55-57,83-87,113-115,121-125,132-136,185-189,206-210,241-243,572-575,578-587,559-591,597-656,660-679,797-799,861-867,877-879,882-884,961-963,1065-1071
-
3
Директивы препроцессора
206(2-10),223(2-10)
-
4
Системные макросы
653(38-39,41-46),757(19-24),767(20-25),1025(20-25)
-
5
45
-
6
95-99,142-145,148-160,395-411,527-549,551-570,732-734,837-849,871,874-885,937-958
-
7
93-101,152-153,397-406,435-442,519-523,543-548,793-801,902-960,1012-1052
-
8
314-316,556-565,629-633,650-655,691-698,736-746,1056-1064,1066-1069
-
9
98,438,441,800
-
10
write formatted string to stdout
84,86,122,124,133,135,188,242,573,580,590,862,865,866
-
11
80,81,91,102,117,118,138,791,803,1025,1030,1068
-
12
50-58,68,203-205,480-491,892-896
-
13
59,,494-497
-
14
261,269,393,510,595,789,833
-
15
65,127,317,389,500,733,782,785,968,1073
-
16
386,388,761,781,784,807,887,1066,1067
-
17
69
-
18
49,67,165,196
-
19
321,416,556,560,625,818,1066,1067
-
20
227(10-90),704
-
21
72,310(36-54,55-61)
-
22
840(30-35),845(28-32),1026
-
23
47-74,,163-200,
-
24
61,62,63,65,77-106,130-160,169-181,247-258,261-266,269-305,308-318,373-390,393-411,414-427,456-470,473-478,500-507,510-599,682-686,689-699,702-710,730-747,750-760,763-786,781-811,814-830,833-851,855-969,972-1053
-
25
91(20-27)
-
26
817,889,890
-
27
855
-
28
65,247
-
29
166(30-35),475(5-10)
-
30
220-221,323-369,661-678,974-995
Комментарии для понимания библеотеки и ее возможных адаптаций
31
68(10-15),69(12-17),197(15-21),198(16-22),625,626
-
32
Константные методы
814
-
33
254(15-17),279(14-16),313(9-11),778(12-14)
-
34
Изменение поведения предупреждающих
сообщений компилятора
27,28
Отключения обработчика исключений
и
Усечение дебагером имен
(Необходимо для корректной работы STL и MVC)
35
54(30-40),56(35-45),96,112,114,123,134,143,144,150,173,229,237,447,448,449,450,513,558,644,646,684,685,758,820,823,859,943,953,956,1047,1050,1054
-
36
65(38-45),85(42-47),86(45-50),91(10-14),92(15-21),95(20-25,26-31),97(10-15),100(10-15),102(7-11),111(20-30),117(11-17),118(11-17),119(7-11),123(10-14),124(11-15),134(30-40),135(40-50),138(15-25),142(15-20,25-30,35-40,40-46),144(20-25),148(20-25,26-30,30-35),149(10-15),153(10-14),685,696,772,773,950,951,952,1057(40-45),1059(25-32),1060(27-34)
-
37
Динамическое форматирование
86(14-21),135(29-41)
Выводит двоичное число с точностью до 0.1
38
238-240,715
39
memset
297,705
(http://cppstudio.com/post/673/)
Функции Clear() и Reset() вызываются часто поэтому используется memset для оптимизации
40
93,255,397,793,819
-
41
Явное приведение типа
732(25-29)\,840(40-45,52-57),845(40-45,52-57)
-
42
GLOUTPUT
798,878,883
?как то связано с OpenGl?
43
926,1019,1035
-
44
398(40-41),423(35-36,878(54-55),931(39-40),932(41-42),1028(40-41),1029(42-43),1031(35-36)
-