Гра 2048
Лише на мові програмування С
1.Модуль
К
Цей модуль являє собою головний модуль гри, в якому будуть включені всі функції і типи даних, необхідні для здійснення самої гри K . Зокрема, вона буде містити визначений структурований тип даних struct game і funkcie update (), is_move_possible (), is _ game_won () і попередньо визначена функція add_random_tile () для додавання випадкової плитки з літерою ' A ' або ' B ' на ігрове поле.
Macro SIZE
Macro SIZE містить розмір ігрового поля, значення якого для гри – 4 .
Попередження
Цей макрос
використовується в будь-якому разі, якщо ви працюєте з розміром поля гри. Якщо
дійде до зміни цього
значення, і ви будете безпосередньо використовувати константу 4 у вашому коді,
ваша програма не буде працювати належним чином!
Структурований тип даних struct game
Цей тип даних представляє саму гру. Важливість кожного
елемента полягає в наступному: board-двовимірне поле, що представляє ігровий майданчик і
поточний стан гри і score-поточна
кількість балів (оцінка), що гравець записав під час гри.
1) Як зазначено в правилах гри, гра вважається вигратою, коли буква ' K ' з'являється на ігровому районі. Ваше завдання полягає у створенні функції boool is_game_won (const struct game game), яка
перевіряє цей стан. Ця функція має такий параметр : const struct game game-структурований
тип, що представляє стан поточної гри.Функція повертає true, якщо ігрове
область вже має букву ' K ' розташований. В іншому випадку функція повертає
значення false.(1)
2) Гра
буде працювати, поки ви можете зробити наступний крок. Це означає, що на ігровому полі буде пусте місце або дві плитки однієї букви будуть знаходитися поруч одна з одною. Ваше завдання перевірити, чи можна зробити наступний хід. Таким чином, створити функцію bool is_move_possible (const struct game game) для вирішення цього завдання.
Ця функція має такий параметр: const struct game game-структурований тип, що
представляє стан поточної гри. Функція повертає true, якщо ви можете зробити ще
один хід в грі. В іншому випадку функція повертає значення false. За допомогою цієї функції можна перевірити, чи можна зробити ще один хід гри. Якщо наступний крок зробити більше неможливо, гра закінчилася
для гравця.(2)
3) Статус
гри змінюється кожен раз, коли гравець переходить в одну з чотирьох
сторін-вгору, вниз, вліво і вправо. Якщо можна пересуватися, всі плитки
переміщуються в заданому напрямку, наскільки це можливо. Їх можна зупинити інша
плитка або край ігрового поля.
Якщо дві плитки з однаковою буквою при перетягуванні зустрінуться(доткнуться), утвориться наступна буква в порядку алфавіту
(наприклад, дві букви ' H ' стануть однією літерою ' I '). (3)
Якщо дві плитки з'єднуються, оцінка гравця також оновлюватиметься.
Значення, яке буде додано до загальної оцінки, буде сумою значення двох літер
(або вдвічі більше літери). Значення для кожної літери відображаються в
нижченаведеній таблиці(4)
Примітка
Якщо гра закінчується, коли буква ' K '
з'являється на дошці, значення цієї літери є чисто інформативним в таблиці(5)
Ваше завдання полягає у створенні функції bool update (struct game * game, int dy, int dx), яка
буде гарантувати, що рух є в даного напрямку.
Функція має такі параметри:
struct game * game-посилання на структурований тип, що представляє статус поточної гри
int dy-напрям в
осі Y, яка може мати лише одне з трьох значень:-1, якщо це напрям вгору, 0,
якщо напрямок незмінний на осі Y і 1, якщо це напрям нижче.
int dx-напрям в осі X, яка може мати лише одне з трьох значень:-1, якщо це напрям вліво,
0, якщо напрямок незмінний на осі X і 1, якщо це напрям вправо.
Функція повертає значення true, якщо стан гри змінився. В іншому
випадку функція повертає значення false.
Проте функція повертає значення false, навіть
якщо функція використовувалася неправильно. Це в тому випадку, якщо функція
викликана способом, коли ви хочете перейти на більш,ніж на одну сторінку в той
час або навпаки до жодної.(6)
2.Модуль hof
Частина гри буде в цьому випадку також зал слави (від engl. Hall of Fame , скорочена hof). Вона буде представлена
списком з десяти кращих гравців гри. Цей список буде знаходитися в окремому
файлі, який ви завантажуєте. Цей модуль міститиме визначений структурований тип
даних struct-player, функцію add_player () і функції save () і load ().
Структурований
тип даних struct player
Цей тип даних
являє собою запис у залі слави таблиці. Важливість кожного елемента полягає в
наступному: name-ім'я гравця, а score-кількість балів (оцінка), що гравець
досяг.
4) Функція load
() гарантує, що список завантажується з файлу та зберігається у параметрі
виводу функції аркуша.
Функція має такі параметри:
struct player list []-посилання на поточний список десятків
кращих гравців. Список представлено як одновимірне поле довжиною лише 10
елементів типу struct player. Функція повертає кількість елементів,
завантажених з файлу, а максимальне число, яке завантажується, складає лише 10.
Якщо файл не завантажується, повертається значення -1. Зал слави знаходиться на диску, представленому текстовим файлом, в
якому кожен рядок має наступну структуру: NAME SCORE. Де NAME представляє ім'я гравця, що
складається з послідовності символів без пробілу; SCORE — це ціле число, яке було досягнуто оцінкою гравця. Ця пара відділяється пробілом.
Попередження
Список найкращих гравців не завжди мусить містити лише 10
елементів-воно не мусить містити жодної та може навіть не існувати. Він також
може містити більше 10 найменувань. Аналогічно, не покладайтеся на те, що цей
файл не мусить містити відсортований список записів. Тому, завжди перевірте цей
факт.
5) Функція save () гарантує, що список буде збережено у файлі. Список збережених
функцій упорядкований від найкращого гравця до найгіршого. Функція повідомить про
успішне або невдале виконання цієї операції.
Функція має такі
параметри:
struct player list []-посилання на поточний список десятків кращих гравців. Список представлено як одновимірне поле довжиною лише 10 елементів типу struct.
int size- фактичний розмір списку залу
слави, довжина якого максимум 10 найменувань. Список може бути коротшим, якщо
ви починаєте гру з порожньою залою
слави.Після успішного збереження поточного залу слави на диск, функція повертає
true. Інакше повертає значення false.
6) Після завершення гри, перевіряється чи отримана оцінка дозволить додати гравця в зал слави. Якщо це так, його ім'я буде поміщений в потрібному місці в десятку гравців в порядку від найкращого (гравець, який виграв найбільше очок). Ваше завдання тому, щоб створити функцію bool add_player (struct playerlist [], int *
size, const struct player player), яка, якщо гравець в зал слави належить, він
поміщається в потрібному місці.
Функція має такі
параметри:
struct player list[]-посилання на поточний список десятків кращих гравців. Список представлено як одновимірне поле довжиною лише 10 елементів типу struct player.
int* size - фактичний розмір списку
залу слави, який є довжиною максимально
10 найменувань. Список може бути коротшим, якщо ви починаєте гру з порожньою
залою слави.
const struct
player player-гравець,який повинен бути розміщений в зал слави.
Функція повертає true, якщо гравець потрапив до списку або falsе, якщо він не потрапив до списку. Крім того, у випадку успішної реєстрації, список, який показує параметр list,оновлюється, а також оновлює загальний розмір списку, який зберігається в параметрі list, якщо це необхідно.
Якщо гравець
досяг тієї ж кількості балів, що й існуючий записаний гравець у залі
слави, новий запис буде надано в порядку перед вже існуючим . Якщо такий запис
уже був на останньому 10 місці в залі слави, після оновлення балів,старий запис
з таблиці видаляється.
Приклади використання функції add_player () показано в наступних
прикладах: (7)
3.Модуль UI
Цей модуль
містить функцію render (), яка використовується для відтворення стану гри на
екрані. Функція знаходиться в окремому модулі, так що інші два модулі не
залежать від графічного представлення гри. Таким чином, ви можете
використовувати будь-яку бібліотеку, таку як curses, SDL, але ви все ще можете
залишатися в стандартному вводі і виводі.
1)Відтворення стану гри
Функція render() використовується для відтворення поля програвача. Поява рендеринга не визначена і також не буде оцінена в тестах.
Таким чином, ви можете грати за допомогою графічної сторінки гри самостійно.
Функція має один
параметр:
struct game *game
-посилання на структурований тип, що представляє статус поточної гри.
Структура :
k.c
k.h
hof.c
hof.h
main.c
Makefile
міститиме принаймні такі цілі: hof.o для генерації модуля hof, k.o для
генерації модуля k, ui.o-для створення модуля ui, all, щоб генерувати виконувану
програму з назвою game, і clean, щоб видалити безперервно створені об'єкти та
виконувані файли.
ui.c
ui.h
Приложения 7
-
92 Здравствуйте. Готов сделать ваш проект на WPF(C#), также могу сделать и консольный вариант.
-
245 17 0 Доброго дня!
Виконаю швидко і якісно.
Звертайтеся, буду радий допомогти.
-
623 13 0 Здравствуйте, Наталья.
Могу сделать с текстовым интерфейсом (в консоли), в соответствии с предложенной в задании архитектурой.
Там работы от силы на день, но сделать смогу только к 6-8 апреля (возможно и раньше, но маловероятно).
Есть несколько уточняющих вопросов (см. Обсуждение), которые можно в личке обсудить. Там же (в личке) можно обсудить стоимость и способы оплаты (если предложенные в Ставке Вас не устраивают).
-
Вопросы:
1. Не понятно откуда будуть браться имена игроков? Что-то я об этом в описании не заметил никакой информации. Имя игрока будет задаваться при входе в игру? Или перед внесением его в "Зал славы" запрашивать (как обычно в играх делали раньше)?
2. На третьем скрине не понятно почему комбинация BAA при ходе вправо дает BB, а не С? Ведь сначала правая А падает до упора. Затем следующая А падает на нее и дает B. Затем левая B падает на нее и должна получиться C. А в примере не так. Можно более подробно расписать алгоритм перемещения и схлопывания букв?3. Не понятно в какой момент должна вызываться функция add_random_tile()?
-

сергей, предполагаю, что примерно так:
1. да, запрашивать перед добавлением, если оно будет осуществимо (логично, ведь до того момента имя не понадобится).
2. был сделан только один мув, по-этому буквы A и A соединились вместе в B, а со следующим мувом вправо либо влево эти две B дали бы C. поиграй немного в 2048, как указанно в названии проекта, а потом уже задавай вопросы. здесь ведь аналогичная игра)
3. опять же - поиграй в 2048 и всё поймешь. после того, как ты сделал мув в какую-то сторону и все одинаковые буквы соединились - добавляется новый тайл на рандомную свободную клетку, если такая есть. эх, похоже придётся делать ставку) -
Актуальные фриланс-проекты в категории C и C++
Инженер по инфраструктуре резидентных проксиМы строим сеть резидентных прокси с нуля — полностью собственную, без сторонних поставщиков. Нам нужен один исключительный сетевой инженер для создания всей технической базы. Что вы будете строить: - Android SDK для фонового использования, который направляет прокси-трафик через… C и C++, DevOps ∙ 2 дня 20 часов назад ∙ 12 ставок |
Добробка в существующей версии 1с розница блока для РЦ(распределительного центра)В общем поясню, что у нас за база - есть общий сервер, где есть база Розница (где ставятся все приходы) - база УТП, куда переливаются все продажи - считается наценка, остатки по складам - маленькие базы розничных магазинов. По обменам у нас магазины обмениваются с базой Розница… C и C++, C# ∙ 3 дня 11 часов назад ∙ 6 ставок |
ПО Мастер-программа «KONSTRUCTOR»
185 977 UAH
Мы ищем очень опытного C++ разработчика для модернизации существующего ПО (мастер-программы). Программа отвечает за создание производного ПО представляющего аудио-визуальные сеансы психологической коррекции. Текущая версия написана на чистом WinAPI (Visual Studio 2019/2022).… C и C++, Десктопные приложения ∙ 8 дней 14 часов назад ∙ 19 ставок |
Написание кода для ArduinoНеобходимо разработать программное обеспечение для весового дозатора на базе Arduino Uno. Комплектующие: Arduino Uno R3 HX711 + тензодатчик LCD1602 I2C дисплей MAX7219 светодиодная матрица 8x32 5 кнопок управления 4-канальное реле 2 сигнальные лампы Вибромагнит грубого… C и C++, Встраиваемые системы и микроконтроллеры ∙ 9 дней 23 часа назад ∙ 15 ставок |
Нужно доработать проект или предоставить консультацию.
1000 UAH
|