Update from 14
This commit is contained in:
parent
0eb7f0b1c0
commit
fcd73c9b90
8 changed files with 39 additions and 52 deletions
|
|
@ -23,13 +23,13 @@
|
||||||
|
|
||||||
## Введение
|
## Введение
|
||||||
|
|
||||||
Для реализации игры «Тетрис» проект должен состоять из двух частей: библиотеки, реализующей логику работы игры, которую можно подключать к различным GUI в будущем, и терминального интерфейса. Логика работы библиотеки должна быть реализована с использованием конечных автоматов, одно из возможных описаний которого будет дано ниже.
|
Для реализации игры «Тетрис» проект должен состоять из двух частей: библиотеки, реализующей логику работы игры, которую можно в будущем подключать к различным GUI, и терминального интерфейса. Логика работы библиотеки должна быть реализована с использованием конечных автоматов, одно из возможных описаний которого будет дано ниже.
|
||||||
|
|
||||||
## Chapter I <div id="chapter-i"></div>
|
## Chapter I <div id="chapter-i"></div>
|
||||||
## Общая информация
|
## Общая информация
|
||||||
### BrickGame
|
### BrickGame
|
||||||
|
|
||||||
BrickGame — популярная портативная консоль 90-ых годов с несколькими ~~тысячами~~ встроенными играми, разработанная в Китае. Изначально была копией разработанной в СССР и выпущенной Nintendo в рамках платформы GameBoy игры «Тетрис», но включала в себя также и множество других игр, которые добавлялись с течением времени. Консоль имела небольшой экранчик с игровым полем размера 10х20, представляющим из себя матрицу «пикселей». Справа от поля находилось табло с цифровой индикацией состояния текущей игры, рекордами и прочей дополнительной информацией. Самыми распространенными играми на BrickGame были: тетрис, танки, гонки, фроггер и змейка.
|
BrickGame — популярная портативная консоль 90-ых годов с несколькими ~~тысячами~~ встроенными играми, разработана она была в Китае. Изначально эта игра была копией, разработанной в СССР и выпущенной Nintendo в рамках платформы GameBoy игры «Тетрис», но включала в себя также и множество других игр, которые добавлялись с течением времени. Консоль имела небольшой экранчик с игровым полем размера 10 х 20, представляющим из себя матрицу «пикселей». Справа от поля находилось табло с цифровой индикацией состояния текущей игры, рекордами и прочей дополнительной информацией. Самыми распространенными играми на BrickGame были: тетрис, танки, гонки, фроггер и змейка.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
@ -50,7 +50,7 @@ BrickGame — популярная портативная консоль 90-ых
|
||||||
- Логика искусственного интеллекта для игр;
|
- Логика искусственного интеллекта для игр;
|
||||||
- Синтаксический и лексический анализ;
|
- Синтаксический и лексический анализ;
|
||||||
- Сложные прикладные сетевые протоколы;
|
- Сложные прикладные сетевые протоколы;
|
||||||
- Потоковая обработка данных.
|
- Потоковая обработка данных.
|
||||||
|
|
||||||
Ниже представлены примеры использования КА для формализации игровой логики нескольких игр из BrickGame.
|
Ниже представлены примеры использования КА для формализации игровой логики нескольких игр из BrickGame.
|
||||||
|
|
||||||
|
|
@ -68,9 +68,9 @@ BrickGame — популярная портативная консоль 90-ых
|
||||||
|
|
||||||
- Старт — состояние, в котором игра ждет, пока игрок нажмет кнопку готовности к игре.
|
- Старт — состояние, в котором игра ждет, пока игрок нажмет кнопку готовности к игре.
|
||||||
- Спавн — состояние, в котором создается очередная лягушка.
|
- Спавн — состояние, в котором создается очередная лягушка.
|
||||||
- Перемещение — основное игровое состояние с обработкой ввода от пользователя — движение лягушки по полосе влево/право или прыжки вперед/назад.
|
- Перемещение — основное игровое состояние с обработкой ввода от пользователя: движение лягушки по полосе влево/право или прыжки вперед/назад.
|
||||||
- Сдвиг — состояние, которое наступает после истечения таймера, при котором сдвигаются все объекты на полосах вправо, вместе с лягушкой.
|
- Сдвиг — состояние, которое наступает после истечения таймера, при котором все объекты на полосах сдвигаются вправо вместе с лягушкой.
|
||||||
- Столкновение — состояние, которое наступает, если после прыжка лягушка попадает в воду или после смещения бревен лягушка оказывается за пределами игрового поля.
|
- Столкновение — состояние, которое наступает, если после прыжка лягушка попадает в воду, или если после смещения бревен лягушка оказывается за пределами игрового поля.
|
||||||
- Достигнут другой берег — состояние, которое наступает при достижении лягушкой верхней другого берега.
|
- Достигнут другой берег — состояние, которое наступает при достижении лягушкой верхней другого берега.
|
||||||
- Игра окончена — состояние, которое наступает после достижения другого берега или смерти последней лягушки.
|
- Игра окончена — состояние, которое наступает после достижения другого берега или смерти последней лягушки.
|
||||||
|
|
||||||
|
|
@ -90,9 +90,9 @@ BrickGame — популярная портативная консоль 90-ых
|
||||||
|
|
||||||
- Старт — состояние, в котором игра ждет, пока игрок нажмет кнопку готовности к игре.
|
- Старт — состояние, в котором игра ждет, пока игрок нажмет кнопку готовности к игре.
|
||||||
- Спавн — состояние, в которое переходит игра при создании очередного блока и выбора следующего блока для спавна.
|
- Спавн — состояние, в которое переходит игра при создании очередного блока и выбора следующего блока для спавна.
|
||||||
- Перемещение — основное игровое состояние с обработкой ввода от пользователя — поворот блоков/перемещение блоков по горизонтали.
|
- Перемещение — основное игровое состояние с обработкой ввода от пользователя: поворот блоков/перемещение блоков по горизонтали.
|
||||||
- Сдвиг — состояние, в которое переходит игра после истечения таймера. В нем текущий блок перемещается вниз на один уровень.
|
- Сдвиг — состояние, в которое переходит игра после истечения таймера. В нем текущий блок перемещается вниз на один уровень.
|
||||||
- Соединение — состояние, в которое преходит игра после «соприкосновения» текущего блока с уже упавшими или с землей. Если образуются заполненные линии, то она уничтожается, и остальные блоки смещаются вниз. Если блок остановился в самом верхнем ряду, то игра переходит в состояние «игра окончена».
|
- Соединение — состояние, в которое переходит игра после «соприкосновения» текущего блока с уже упавшими или с землей. Если образуются заполненные линии, то она уничтожается, и остальные блоки смещаются вниз. Если блок останавливается в самом верхнем ряду, то игра переходит в состояние «игра окончена».
|
||||||
- Игра окончена — игра окончена.
|
- Игра окончена — игра окончена.
|
||||||
|
|
||||||
## Chapter II <div id="chapter-ii"></div>
|
## Chapter II <div id="chapter-ii"></div>
|
||||||
|
|
@ -102,7 +102,7 @@ BrickGame — популярная портативная консоль 90-ых
|
||||||
|
|
||||||
Тебе необходимо реализовать программу BrickGame v1.0 aka Tetris:
|
Тебе необходимо реализовать программу BrickGame v1.0 aka Tetris:
|
||||||
|
|
||||||
- Программа должна быть разработана на языке Си стандарта C11 с использованием компилятора gcc.
|
- Программа должна быть разработана на языке С стандарта C11 с использованием компилятора gcc.
|
||||||
- Программа должна состоять из двух частей: библиотеки, реализующей логику игры тетрис, и терминального интерфейса с использованием библиотеки `ncurses`.
|
- Программа должна состоять из двух частей: библиотеки, реализующей логику игры тетрис, и терминального интерфейса с использованием библиотеки `ncurses`.
|
||||||
- Для формализации логики игры должен быть использован конечный автомат.
|
- Для формализации логики игры должен быть использован конечный автомат.
|
||||||
- Библиотека должна иметь функцию, принимающую на вход ввод пользователя, и функцию, выдающую матрицу, которая описывает текущее состояние игрового поля при каждом ее изменении.
|
- Библиотека должна иметь функцию, принимающую на вход ввод пользователя, и функцию, выдающую матрицу, которая описывает текущее состояние игрового поля при каждом ее изменении.
|
||||||
|
|
@ -119,7 +119,7 @@ BrickGame — популярная портативная консоль 90-ых
|
||||||
- Показ следующей фигуры;
|
- Показ следующей фигуры;
|
||||||
- Уничтожение заполненных линий;
|
- Уничтожение заполненных линий;
|
||||||
- Завершение игры при достижении верхней границы игрового поля;
|
- Завершение игры при достижении верхней границы игрового поля;
|
||||||
- В игре должны присутствовать все виды фигур, показанных на картинке ниже.
|
- В игре должны присутствовать все виды фигур, показанные на картинке ниже.
|
||||||
- Для управления добавь поддержку всех кнопок, предусмотренных на физической консоли:
|
- Для управления добавь поддержку всех кнопок, предусмотренных на физической консоли:
|
||||||
- Начало игры,
|
- Начало игры,
|
||||||
- Пауза,
|
- Пауза,
|
||||||
|
|
@ -129,8 +129,8 @@ BrickGame — популярная портативная консоль 90-ых
|
||||||
- Стрелка вниз — падение фигуры,
|
- Стрелка вниз — падение фигуры,
|
||||||
- Стрелка вверх — не используется в данной игре,
|
- Стрелка вверх — не используется в данной игре,
|
||||||
- Действие (вращение фигуры).
|
- Действие (вращение фигуры).
|
||||||
- Игровое поле должно соответствовать размерам игрового поля консоли — десять «пикселей» в ширину и двадцать «пикселей» в высоту.
|
- Игровое поле должно соответствовать размерам игрового поля консоли: десять «пикселей» в ширину и двадцать «пикселей» в высоту.
|
||||||
- Фигура, после достижения нижней границы поля или соприкосновения с другой фигурой, должна остановиться. После этого происходит генерация следующей фигуры, показанной на превью.
|
- Фигура после достижения нижней границы поля или соприкосновения с другой фигурой должна остановиться. Вслед за этим происходит генерация следующей фигуры, показанной на превью.
|
||||||
- Интерфейс библиотеки должен соответствовать описанию, которое находится в materials/library-specification_RUS.md.
|
- Интерфейс библиотеки должен соответствовать описанию, которое находится в materials/library-specification_RUS.md.
|
||||||
- Пользовательский интерфейс должен поддерживать отрисовку игрового поля и дополнительной информации.
|
- Пользовательский интерфейс должен поддерживать отрисовку игрового поля и дополнительной информации.
|
||||||
- Подготовь в любом формате диаграмму, описывающую используемый КА (его состояния и все возможные переходы).
|
- Подготовь в любом формате диаграмму, описывающую используемый КА (его состояния и все возможные переходы).
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,10 @@
|
||||||
|
|
||||||
Следствия и дополнения вышеизложенных принципов:
|
Следствия и дополнения вышеизложенных принципов:
|
||||||
|
|
||||||
1. Запрет на использование глобальных переменных
|
1. Запрет на использование глобальных переменных.
|
||||||
2. Не более одного выхода из функции. Исключение составляет предварительная проверка аргументов функции.
|
2. Не более одного выхода из функции. Исключение составляет предварительная проверка аргументов функции.
|
||||||
3. Не более одного выхода из цикла - это может быть как условие, так и ключевое слово break
|
3. Не более одного выхода из цикла — это может быть как условие, так и ключевое слово break.
|
||||||
4. Вложенность любых блоков не должна превышать 4
|
4. Вложенность любых блоков не должна превышать 4.
|
||||||
5. Размер функций ограничен по строкам и составляет 40-50 строк
|
5. Размер функций ограничен по строкам и составляет 40-50 строк.
|
||||||
|
|
||||||

|

|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
Message from developers:
|
Message from the developers:
|
||||||
Hello, dear friend!
|
Hello dear friend!
|
||||||
Let's play a game.
|
Let's play a game.
|
||||||
Something like the good old text-based adventures with puzzle elements.
|
Something like the good old text-based adventures with puzzle elements.
|
||||||
Each task is a challenge, usually some kind of hurdle you have to overcome.
|
Each task is a challenge, usually some kind of hurdle you have to overcome.
|
||||||
|
|
@ -14,9 +14,9 @@ Here are some tips to help you find your way:
|
||||||
6. Be careful with sources of information. Check. Think. Analyze. Compare. Do not trust.
|
6. Be careful with sources of information. Check. Think. Analyze. Compare. Do not trust.
|
||||||
7. Pay attention to the text of the problem. Think. Check.
|
7. Pay attention to the text of the problem. Think. Check.
|
||||||
8. If the task seems unclear or impossible — it only seems that way. Take your time, sit in silence or with your favorite music. In 10-15 minutes, return to the assignment and read the entire text again.
|
8. If the task seems unclear or impossible — it only seems that way. Take your time, sit in silence or with your favorite music. In 10-15 minutes, return to the assignment and read the entire text again.
|
||||||
9. If tip #8 didn't help — find a guide. You are surrounded by many wanderers just like you and they will be happy to help you find your way out.
|
9. If tip #8 didn't help — find a guide. You are surrounded by many walkers just like you and they will be happy to help you find your way out.
|
||||||
10. Watch the time! It's deceptive. You must complete at least one challenge per day!
|
10. Watch the time! It's deceptive. You must complete at least one challenge per day!
|
||||||
11. Pay attention and do not miss important things. Check the repository carefully!
|
11. Be careful not to miss anything important. Check the repository carefully!
|
||||||
12. Always push to the develop branch only! The master branch will be ignored. Work in the src directory.
|
12. Always push to the develop branch only! The master branch will be ignored. Work in the src directory.
|
||||||
13. Remember that each task goes through a series of checks: code style check, static analyzer check, check for correct work with memory, check with a set of autotests, check with a checklist. Be careful.
|
13. Remember that each task goes through a series of checks: code style check, static analyzer check, check for correct work with memory, check with a set of autotests, check with a checklist. Be careful.
|
||||||
14. You will encounter various tasks along the way. The tasks marked with an asterisk (*) are for the most foolhardy. They are more difficult and not mandatory. However, completing them will give you extra experience and knowledge.
|
14. You will encounter various tasks along the way. The tasks marked with an asterisk (*) are for the most foolhardy. They are more difficult and not mandatory. However, completing them will give you extra experience and knowledge.
|
||||||
|
|
@ -27,6 +27,6 @@ Here are some tips to help you find your way:
|
||||||
19. Divide and conquer. Decompose.
|
19. Divide and conquer. Decompose.
|
||||||
20. Think about the big picture (good code, obviously). Move from the general to the specific.
|
20. Think about the big picture (good code, obviously). Move from the general to the specific.
|
||||||
21. Do not cheat, do not try to deceive the system and others. You will fool yourself first.
|
21. Do not cheat, do not try to deceive the system and others. You will fool yourself first.
|
||||||
22. Do not write off, but if you use help — always find it out to the end. Otherwise your journey will be meaningless.
|
22. Do not copy the work of others, but if you use help — always understand it to the end. Otherwise your journey will be meaningless.
|
||||||
23. Check the "materials" folder often. There can be a lot of useful stuff in there!
|
23. Check the "materials" folder often. There can be a lot of useful stuff there!
|
||||||
24. Reread these tips several times.
|
24. Reread these tips several times.
|
||||||
|
|
|
||||||
|
|
@ -3,31 +3,30 @@
|
||||||
Мы предлагаем тебе сыграть в игру.
|
Мы предлагаем тебе сыграть в игру.
|
||||||
Игру в духе старых добрых текстовых квестовых игр-бродилок с элементами головоломки.
|
Игру в духе старых добрых текстовых квестовых игр-бродилок с элементами головоломки.
|
||||||
Каждый Task — это очередное испытание, обычно некоторое препятствие, которое необходимо преодолеть.
|
Каждый Task — это очередное испытание, обычно некоторое препятствие, которое необходимо преодолеть.
|
||||||
Лишь тот, кто пройдет все, сможет двинуться дальше.
|
Лишь тот, кто пройдет все — сможет двинуться дальше.
|
||||||
|
|
||||||
Ниже приведено несколько напутствий, они помогут тебе найти свой путь:
|
Ниже приведено несколько напутствий, они помогут тебе найти свой путь:
|
||||||
1. Всю дорогу тебя будет сопровождать чувство неопределенности и острого дефицита информации: ЭТО НОРМАЛЬНО. Это часть игры. Не забывай, что информация в репозитории и Google — всегда с тобой. Как и другие игроки. Общайся. Ищи. Собирай. Не бойся ошибиться.
|
1. Всю дорогу тебя будет сопровождать чувство неопределенности и острого дефицита информации: ЭТО НОРМАЛЬНО. Это часть игры. Не забывай, что информация в репозитории и Google — всегда с тобой. Как и другие игроки. Общайся. Ищи. Собирай. Не бойся ошибиться.
|
||||||
2. В игре может быть другая игра, в которой будет еще одна. Это нормально. Все как в жизни. Рекурсия — это красиво.
|
2. В игре может быть другая игра, в которой будет еще одна. Это нормально. Все как в жизни. Рекурсия — это красиво.
|
||||||
3. Уровни могут сильно отличаться друг от друга. Это нормально. Это часть игры. Нельзя выучить один рецепт и его везде применять. Лишь непрерывно обучаясь и адаптируясь ты сможешь достигнуть цели.
|
3. Уровни могут сильно отличаться друг от друга. Это нормально. Это часть игры. Нельзя выучить один рецепт и его везде применять. Лишь непрерывно обучаясь и адаптируясь, ты сможешь достигнуть цели.
|
||||||
4. Наша игра — многопользовательская, даже если сначала тебе покажется иначе.
|
4. Наша игра — многопользовательская, даже если сначала тебе покажется иначе.
|
||||||
5. Хотя, большую часть пути ты сможешь преодолеть и один.
|
5. Хотя большую часть пути ты сможешь преодолеть и один.
|
||||||
6. Будь внимателен к источникам информации. Проверяй. Думай. Анализируй. Сравнивай. Не доверяй.
|
6. Будь внимателен к источникам информации. Проверяй. Думай. Анализируй. Сравнивай. Не доверяй.
|
||||||
7. Будь внимателен к тексту задания. Думай. Проверяй.
|
7. Будь внимателен к тексту задания. Думай. Проверяй.
|
||||||
8. Если задание кажется непонятным или невыполнимым — это только так кажется. Просто посиди спокойно, в тишине, или включи любимую музыку. Вернись к заданию через 10-15 минут и перечитай его полностью.
|
8. Если задание кажется непонятным или невыполнимым — это только так кажется. Просто посиди спокойно в тишине или включи любимую музыку. Вернись к заданию через 10-15 минут и перечитай его полностью.
|
||||||
9. Если п.8 не помог — поищи проводника. Вокруг тебя — много таких же путников, как ты, они с радостью помогут найти тебе выход.
|
9. Если п. 8 не помог — поищи проводника. Вокруг тебя много таких же путников, как ты, они с радостью помогут найти тебе выход.
|
||||||
10. Следи за временем! Оно коварно. В день ты должен преодолевать минимум одно испытание!
|
10. Следи за временем! Оно коварно. В день ты должен преодолевать минимум одно испытание!
|
||||||
11. Будь внимателен — и не упусти важное. Внимательно изучай репозиторий!
|
11. Будь внимателен — и не упусти важное. Внимательно изучай репозиторий!
|
||||||
12. Всегда делай push только в ветку develop! Ветка master будет проигнорирована. Работай в директории src.
|
12. Всегда делай push только в ветку develop! Ветка master будет проигнорирована. Работай в директории src.
|
||||||
13. Помни, что каждое задание проходит ряд проверок: проверка на стиль кода, проверка статическим анализатором, проверка на корректную работу с памятью, проверка набором автотестов, проверка с помощью чеклиста. Будь внимателен.
|
13. Помни, что каждое задание проходит ряд проверок: проверка на стиль кода, проверка статическим анализатором, проверка на корректную работу с памятью, проверка набором автотестов, проверка с помощью чеклиста. Будь внимателен.
|
||||||
14. На твоем пути тебе встретятся разные задания. Те, что помечены звездочкой (*), подходят только для самых отчаянных. Они с повышенной сложностью и в целом не являются обязательными к выполнению. Но если ты их сделаешь, то получишь дополнительный опыт и знания.
|
14. На твоем пути тебе встретятся разные задания. Те, что помечены звездочкой (*), подходят только для самых отчаянных. Они с повышенной сложностью и в целом не являются обязательными к выполнению. Но если ты их сделаешь, то получишь дополнительный опыт и знания.
|
||||||
15. Иногда то, что кажется важным — не есть важное.
|
15. Иногда то, что кажется важным — не есть важное.
|
||||||
16. Помни, в конечном счете, факт преодоления препятствия не так важен, как то, КАК ты его преодолел.
|
16. Помни: в конечном счете факт преодоления препятствия не так важен, как то, КАК ты его преодолел.
|
||||||
17. Главная цель нашего путешествия — осознать, что такое «КАК».
|
17. Главная цель нашего путешествия — осознать, что такое «КАК».
|
||||||
18. Отделяй зерна от плевел.
|
18. Отделяй зерна от плевел.
|
||||||
19. Разделяй и властвуй. Декомпозируй.
|
19. Разделяй и властвуй. Декомпозируй.
|
||||||
20. Думай о главном (о хорошем коде, разумеется). Следуй от общего к частному.
|
20. Думай о главном (о хорошем коде, разумеется). Следуй от общего к частному.
|
||||||
21. Не жульничай, не пытайся обмануть систему и окружающих. В первую очередь ты обманешь себя.
|
21. Не жульничай, не пытайся обмануть систему и окружающих. В первую очередь ты обманешь себя.
|
||||||
22. Не списывай, а если пользуешься помощью — всегда разбирайся до конца, почему, как и зачем. Иначе твое путешествие не будет иметь никакого смысла.
|
22. Не списывай, а если пользуешься помощью — всегда разбирайся до конца, почему, как и зачем. Иначе твое путешествие не будет иметь никакого смысла.
|
||||||
23. Почаще заглядывай в папку materials. Там может быть много полезного!
|
23. Почаще заглядывай в папку materials. Там может быть много полезного!
|
||||||
24. Перечитай напутствия несколько раз.
|
24. Перечитай напутствия несколько раз.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Instructions for running tests.
|
# Instructions for running tests
|
||||||
|
|
||||||
In addition to testing for correct output data, the autotest system will check your program and its source code for the
|
In addition to testing for correct output data, the autotest system will check your program and its source code for the
|
||||||
following points:
|
following points:
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,9 @@
|
||||||
# Инструкция по запуску тестов.
|
# Инструкция по запуску тестов
|
||||||
|
|
||||||
Помимо тестов на корректные выходные данные система автотестирования будет проверять твою программу и ее исходный код по
|
Помимо тестов на корректные выходные данные система автотестирования будет проверять твою программу и ее исходный код по следующим пунктам:
|
||||||
следующим пунктам:
|
|
||||||
|
|
||||||
* **Стилевые тесты.** Чтобы проверить, насколько красота твоего кода соответствует стандартам, ты можешь протестировать
|
* **Стилевые тесты.** Чтобы проверить, насколько красота твоего кода соответствует стандартам, ты можешь протестировать свой код с помощью утилиты _clang-format_. В папке ```materials/``` лежит файл ```.clang-format```, который содержит необходимые настройки для стилевого теста. Данный конфигурационный файл распространяет свое действие на все файлы, которые лежат с ним в директории или в директориях ниже. Поэтому, чтобы данные настройки применились к твоим файлам с
|
||||||
свой код с помощью утилиты _clang-format_. В папке ```materials/linters``` лежит файл ```.clang-format```, который
|
исходным кодом, скопируй ```.clang-format``` в папку ```src```. \
|
||||||
содержит необходимые настройки для стилевого теста. Данный конфигурационный файл распространяет свое действие на все
|
|
||||||
файлы, которые лежат с ним в директории или в директориях ниже. Поэтому, чтобы данные настройки применились к твоим
|
|
||||||
файлам с исходным кодом, скопируй ```.clang-format``` в папку ```src```. \
|
|
||||||
\
|
\
|
||||||
Чтобы запустить проверку на стиль, выполни следующую команду: \
|
Чтобы запустить проверку на стиль, выполни следующую команду: \
|
||||||
```clang-format -n src/sourcefile_name.c``` \
|
```clang-format -n src/sourcefile_name.c``` \
|
||||||
|
|
@ -24,18 +20,13 @@
|
||||||
Google Style: https://google.github.io/styleguide/cppguide.html
|
Google Style: https://google.github.io/styleguide/cppguide.html
|
||||||
|
|
||||||
|
|
||||||
* **Тест на корректную работу с памятью.** При написании C-программ очень важно следить за утечками памяти. Для этого в
|
* **Тест на корректную работу с памятью.** При написании C-программ очень важно следить за утечками памяти. Для этого в Unix-подобных операционных системах довольно часто используют утилиту _valgrind_. Однако на OS X имеются проблемы с поддержкой _valgrind_, поэтому вместо нее можно использовать утилиту _leaks_. Вдаваться в механизм работы этих утилит
|
||||||
Unix-подобных операционных системах довольно часто используют утилиту _valgrind_. Однако, на OS X имеются проблемы с
|
|
||||||
поддержкой _valgrind_, поэтому вместо нее можно использовать утилиту _leaks_. Вдаваться в механизм работы этих утилит
|
|
||||||
мы сейчас не будем — если интересно, можешь почитать в гугле.
|
мы сейчас не будем — если интересно, можешь почитать в гугле.
|
||||||
|
|
||||||
**_LEAKS_**
|
|
||||||
|
|
||||||
Чтобы запустить свой исполняемый файл с помощью этой утилиты, набери в терминале: \
|
Чтобы запустить свой исполняемый файл с помощью этой утилиты, набери в терминале: \
|
||||||
```leaks -atExit -- ./main.out | grep LEAK:```
|
```leaks -atExit -- ./main.out | grep LEAK:```
|
||||||
|
|
||||||
Обрати внимание на команду ```| grep LEAK:```. Мы используем ее для короткого вывода, чтобы видеть только линии с
|
Обрати внимание на команду ```| grep LEAK:```. Мы используем ее для короткого вывода, чтобы видеть только линии с утечками, если они есть. Если ты хочешь увидеть весь вывод, просто удали эту команду.
|
||||||
утечками, если они есть. Если ты хочешь увидеть весь вывод, просто удали эту команду.
|
|
||||||
|
|
||||||
При запуске исполняемого файла с помощью _leaks_ может появиться сообщение об ошибке:
|
При запуске исполняемого файла с помощью _leaks_ может появиться сообщение об ошибке:
|
||||||
> dyld: could not load inserted library ‘/usr/local/lib/libLeaksAtExit.dylib’ because image not found
|
> dyld: could not load inserted library ‘/usr/local/lib/libLeaksAtExit.dylib’ because image not found
|
||||||
|
|
@ -48,8 +39,7 @@
|
||||||
```
|
```
|
||||||
|
|
||||||
_Дополнительно:_ \
|
_Дополнительно:_ \
|
||||||
Используй флаг ```-exclude``` утилиты _leaks_ для того, чтобы отфильтровать утечки в функциях, где известно об
|
Используй флаг ```-exclude``` утилиты _leaks_ для того, чтобы отфильтровать утечки в функциях, где известно об утечках памяти. Этот флаг позволяет уменьшить количество посторонней информации, сообщаемой _leaks_.
|
||||||
утечках памяти. Этот флаг позволяет уменьшить количество посторонней информации, сообщаемой _leaks_.
|
|
||||||
|
|
||||||
**_VALGRIND_**
|
**_VALGRIND_**
|
||||||
|
|
||||||
|
|
@ -62,6 +52,4 @@
|
||||||
|
|
||||||
Не рекомендуется использовать _valgrind_ на OS X, вместо нее лучше использовать _leaks_.
|
Не рекомендуется использовать _valgrind_ на OS X, вместо нее лучше использовать _leaks_.
|
||||||
|
|
||||||
* **Тест сборки.** Программу можно проверить на корректность сборки на тестовой системе. Для этого потребуется
|
* **Тест сборки.** Программу можно проверить на корректность сборки на тестовой системе. Для этого потребуется установленный _Docker_. Если на системе есть докер, то можно зайти в директорию `materials/build` и запустить оттуда скрипт run.sh. Скрипт обернет твое решение в докер и запустит его вместе с типовым сценарием сборки.
|
||||||
установленный _Docker_. Если на системе есть докер, то можно зайти в директорию `materials/build` и запустить оттуда
|
|
||||||
скрипт run.sh. Скрипт обернет твое решение в докер и запустит его вместе с типовым сценарием сборки.
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
Это задание является первым из серии BrickGame. Всего будет четыре проекта, в каждом — своя игра и свои технологии. Но помимо разработки новых проектов, необходимо будет поддерживать и старые игры, и добавлять поддержку новых игр в старые проекты. В этот раз интерфейс будет консольным, в следующем — десктопный, и так далее. Для того чтобы поддерживать старые и новые игры, необходимо заранее определиться, как будет устроено АПИ интерфейсов и библиотек, чтобы в дальнейшем не приходилось переписывать уже сданные проекты.
|
Это задание является первым из серии BrickGame. Всего будет четыре проекта, в каждом — своя игра и свои технологии. Но помимо разработки новых проектов, необходимо будет поддерживать и старые игры, и добавлять поддержку новых игр в старые проекты. В этот раз интерфейс будет консольным, в следующем — десктопный, и так далее. Для того чтобы поддерживать старые и новые игры, необходимо заранее определиться, как будет устроено АПИ интерфейсов и библиотек, чтобы в дальнейшем не приходилось переписывать уже сданные проекты.
|
||||||
|
|
||||||
Игровое поле представляется, как матрица размерностью десять на двадцать. Каждый элемент матрицы соответствует «пикселю» игрового поля и может находится в одном из двух состояний: пустой и заполненный. Кроме игрового поля, у каждой игры есть дополнительная информация, которая выводится в боковой панели справа от игрового поля. Для дополнительной информации, не используемой во время игры, предусмотреть заглушки.
|
Игровое поле представляется, как матрица размерностью десять на двадцать. Каждый элемент матрицы соответствует «пикселю» игрового поля и может находиться в одном из двух состояний: пустой и заполненный. Кроме игрового поля, у каждой игры есть дополнительная информация, которая выводится в боковой панели справа от игрового поля. Для дополнительной информации, не используемой во время игры, следует предусмотреть заглушки.
|
||||||
|
|
||||||
Каждая библиотека с игрой должна иметь функцию, принимающую на вход пользовательский ввод. У консоли имеется восемь физических кнопок: начало игры, пауза, завершение игры, действие и четыре стрелочки.
|
Каждая библиотека с игрой должна иметь функцию, принимающую на вход пользовательский ввод. У консоли имеется восемь физических кнопок: начало игры, пауза, завершение игры, действие и четыре стрелочки.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue