|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.08.2019, 23:09 | #1 |
Регистрация: 13.08.2019
Сообщений: 4
|
Реализация блоков тетриса на С (консольное приложение)
Реализовываю простой тетрис на С в консоли. "Стакан" делаю через двумерный массив фиксированной размерности, где цифрами обозначены стенки и дно, а пустое пространство заполнено 0. Фигуру загружаю также из двумерного массива размером поменьше(4х4). Управление осуществляется стрелками с клавиатуры, программа считывает шестнадцатеричный код нажатой клавиши.
Так вот, трудности возникли на этапе рализации движения блоков тетриса по "стакану". Грубо говоря, есть три возможных направления - вправо, влево и вниз (еще поворот блока, но его пока не учитываем). Каким способом в обычном С можно реализовать "перемещение" одного массива по другому, с учетом необходимых ограничений (проверка на "стенки" и "пол")? И подходит ли такое решение вообще? Пока что накидал простенький способ, который очевидно не подходит, но как шаблон пока оставил его. Согласно нему, программа проверяет, есть ли в массиве единицы (цифрами 1 обозначена падающая фигура), затем помещает в левый\правый\нижний от Arr[i][j] элемент единицу или ноль. Очевидно, что этот способ не работает, ну и плюс перемещает по одному элементу за нажатие клавиши, не всю фигуру. В интернете лежит довольно много реализаций Тетриса на С++/С#, как правило, с использованием сторонних библиотек, но вот подходящего решения для С пока не нашел. Надеюсь на совет знающих людей. Собственно, код: Код:
|
14.08.2019, 08:14 | #2 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Чего то сложно в коде разбираться но суть то простая. Чтобы переместить фигуру надо проверить состояние клеток вокруг фигуры.
По коду у вас просто дикость какая то. Надо упрощать код тогда может быть станет понятнее. А вообще начать надо с листочка бумаги в клеточку. Нарисовать стакан и фигуру и там описать логику поведения.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
14.08.2019, 12:51 | #3 | |
Регистрация: 13.08.2019
Сообщений: 4
|
Цитата:
Проблема в том, что по одной клетке проверять-перемещать получается дичь, остается вариант двигать весь массив с фигурой в большом массиве стакана. Вот в этом и заключается мой вопрос. Я пытаюсь понять, как можно сделать так, чтобы "маленький" массив двигался по "большому". То есть сделать примерно так, как на картинке. В моем коде для загрузки фигуры берется цикл по строкам и столбцам массива фигуры (т.е. 4 строки и 4 столбца), затем для этих i и j производится присваиваивание МассивСтакана[i][j]=МассивФигуры[i][j]. Тогда возникает ситуация, что для расположения фигуры посередине верхнего ряда стакана нужно добавить смещение элементов при присваивании, то есть: МассивСтакана[i][j+2]=МассивФигуры[i][j]. Я пробовал таким же смещением сделать движение фигуры, но тогда оно вообще не работает. |
|
14.08.2019, 14:09 | #4 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Ничего себе поле сделали ...
Ну вот короче пока обедал набросал рабочий вариант для одной фигуры. ))) Не плюсы конечно но синтаксис очень похожий. Вот так проверять надо можно ли двигаться в стороны. Код:
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. Последний раз редактировалось WorldMaster; 14.08.2019 в 14:12. |
14.08.2019, 17:40 | #5 | |
Регистрация: 13.08.2019
Сообщений: 4
|
Цитата:
А поле взято из гугл картинок для примера, оно мне такое большое в реальности не нужно. |
|
14.08.2019, 18:08 | #6 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Это координаты фигуры
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
14.08.2019, 18:11 | #7 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Я бы сделал фигуру массивом из 4 координат, для каждого квадратика фигуры отдельно. Тогда проверка движения это просто проверить для каждого квадратика в отдельности.
|
14.08.2019, 18:51 | #8 |
Регистрация: 13.08.2019
Сообщений: 4
|
|
14.08.2019, 20:35 | #9 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Просто индексаторы. Проверяем точки из фигуры в отношени поля игрового
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Консольное приложение.. C# | Serg94 | Фриланс | 3 | 21.04.2012 19:45 |
консольное приложение на С++ | Kingstоn | Помощь студентам | 1 | 20.06.2011 21:00 |
Консольное приложение | shock-in | Общие вопросы Delphi | 2 | 19.12.2009 22:03 |
Консольное приложение | __Demon__ | Общие вопросы C/C++ | 8 | 23.10.2009 10:08 |
Консольное приложение | eks-s | Общие вопросы Delphi | 17 | 25.01.2008 03:12 |