Как сделать игру тетрис на c

Добавил пользователь Skiper
Обновлено: 19.09.2024

Помогите с написанием тетриса в консоли, пожалуйста. Как сделать поле, и чтобы по нему передвигалась фигура? И чтобы можно было стрелками менять положение фигуры
P.S. Готовые тетрисы не скидывайте - хочу сам написать :D

Поищи ncurses под нужную операционку, оно как раз для этого подойти должно. Я сам никогда не использовал. Для Винды ncurses тоже существует

передвижение фигуры по полю через примерно такой цикл:
вывод фигуры,
ожидание,
стирание пробелами
расчет новой позиции.

Для windows есть Console API, там найдешь передвижение курсора и все такое.
Для *nix, bsd и mac тоже есть API.

Наш старый знакомый Эван Codebullet снова делает алгоритм, который играет в игры и ставит рекорды. На этот раз он будет играть в тетрис. Если хотите лучше понимать логику работы этого алгоритма, посмотрите, как запрограммировать тетрис на JavaScript самому, а потом возвращайтесь сюда.

Оригинальное видео Эвана (если знаете английский, смотреть будет интереснее):

Если вам лень смотреть 18 минут видео или не знаете английский, то читайте статью — мы собрали все ключевые моменты.

👉 Искусственный интеллект — это не всегда нейросети

В этом случае всё сделано на чистом JavaScript. Сила этого алгоритма в том, что он ведёт себя как нейросеть, но не обучается на ходу, а чётко следует заложенным в него правилам. Поэтому качество игры этого алгоритма не зависит от количества проходов в обучении, а только от правил, по которым он создан.

Если хотите посмотреть и оценить сам код алгоритма, зайдите в Гитхаб Эвана.

Сначала нужно сделать саму игру

Эван начинает с простого — создаёт игровое поле, по которому падает красный квадратик:


В игре пока нет никакой механики кроме падения красного квадрата, но в этом и есть суть программирования Эвана — продвигаться вперёд маленькими шагами. Так у него на каждом этапе получается что-то рабочее, что можно взять за основу для следующего шага.

Как только Эван начал рисовать фигуры и возможные варианты их вращения, то понял, что нужно найти схемы, как это делается в оригинальной игре:


Как видите, здесь всё то же самое, как в нашем проекте — каждая фигура вписана в квадрат, чтобы при вращении не вылезать за его пределы. А ещё этот рисунок помогает понять, как запрограммировать вращение и положение фигуры при повороте.

Теперь, когда мы знаем, как выглядят фигуры, можно запрограммировать и их падение. Но сразу есть проблема: они просто улетают за край игрового поля, потому что нет проверки границ.

Когда Эван это исправил и добавил автовращение каждой фигуре на старте, получилось такое:


Оказалось, что, сделав один или несколько поворотов, фигуры застывали на месте и накладывались друг на друга. Эван хотел по-быстрому решить эту проблему, но из-за нелепой ошибки в коде фигуры стали разваливаться на части.

Много итераций спустя Эван исправил все баги и смог-таки заставить блоки падать и вращаться.

Проверка на пересечения и столкновения

Теперь задача сделать так, чтобы фигуры умели определять, столкнутся ли они на следующем шаге с чем-то или нет. Если нет, значит так двигаться можно, а если будет пересечение с другой фигурой, то двигаться в эту сторону нельзя.

Всё шло отлично до тех пор, пока игровое поле не переполнилось. Новые фигуры стали появляться сверху, тут же останавливались, потому что некуда падать, и сразу же поверх них отрисовывались новые. Вывод: надо добавить проверку на достижение верхнего края поля. Если фигура остановилась на нём или за его пределами — всё, игра закончена.


Удаление целой линии

В тетрисе есть правило — когда горизонтальная линия полностью заполнена, она исчезает, а всё, что сверху, сдвигается на один ряд вниз. Первая версия алгоритма Эвана убирала ряд с экрана, но забывала сделать всё остальное. Получалась как бы невидимая линия, на которую могут опираться другие фигуры:


После обновления кода всё заработало как нужно. Заодно появились окошки со следующей и удерживаемой фигурами.

Удерживаемая фигура — это специальный элемент в современном тетрисе, который работает так:

  • там появляется какая-то фигура из игровой последовательности;
  • игрок в любой момент может заменить текущую фигуру на эту, а обратно уже не может;
  • это позволяет набирать больше очков и помогает игрокам ставить больше рекордов.


Обучаем алгоритм

Кажется, что всё готово к тому, чтобы подключить к игре игровой алгоритм и научить его круто играть в тетрис. Но нас сразу ждёт первая проблема — как научить его правильно ставить фигуры.

Первое, что приходит в голову, — показать ему все возможные положения среди остальных фигур, если просто опустить текущую фигуру вниз. Потом — то же самое, но повернув её один раз, затем два раза и три. Но так мы не сможем задвинуть зелёную фигуру левее, чтобы она попала в паз, как на рисунке ниже:



Выбираем оптимальное место

При выборе расположения блоков алгоритм будет отдавать предпочтение тому, которое даст наибольшее количество внутренних баллов. Для этого Эван написал правило: фигура не должна оставлять под собой пустые ячейки, недоступные для других фигур.

Чем меньше таких ячеек остаётся, тем более желаемый ход. Теперь программа лучше подгоняет фигуры друг к другу:


Но возникла другая проблема: ненужные высокие башни. Компьютер делает вроде как правильно — оставляет как можно меньше дыр, — но при этом совершенно не следит за другими параметрами. Эван добавляет в алгоритм второе правило: чем ниже общая масса блоков — тем лучше.

Стало намного лучше: теперь компьютер старается не оставлять под собой пустых блоков и стремится укладывать фигуры как можно ниже.


Используем удерживаемую фигуру

Следующее, чему Эван учит свой алгоритм, это использовать удерживаемую фигуру. Третье правило, которое он добавляет, такое: проверь, что будет, если заменить фигуру на удерживаемую, и если результат будет лучше — замени фигуру.

Стало ещё лучше:


Последняя проблема — пустые одиночные столбцы

Когда компьютер ставит фигуры по этим трём правилам, то часто у него получаются пустые вертикальные столбцы, куда можно поместить только прямую фигуру:


Такое поведение мешает правильной работе всего алгоритма и не даёт ему полностью реализовать свой потенциал. Поэтому Эван вводит четвёртое, последнее правило: старайся избегать таких длинных пустых мест.

И это стало решающим моментом в работе алгоритма. До этого он с трудом собирал 1000 линий, а сейчас легко набирает 10 000 линий и не останавливается на этом.

Создание игровой системы "Тетрис": количество игр, режимы сложности, интерфейс пользователя, игровая статистика, обработка исключений. Структура входных и выходных данных. Диаграммы и описание классов. Блок-схема алгоритма программы, результаты ее работы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 13.06.2012
Размер файла 1,9 M

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Содержание

    Введение
  • 1. Постановка задачи
  • 1.1 Условие задачи
  • 1.2 Методы, которыми можно решить задачу
  • 1.3 Выбранный метод решения задачи
  • 2. Структура входных и выходных данных
  • 3. Диаграммы классов
  • 4. Описание классов
  • 5. Блок-схема алгоритма
  • 5.1 Блок-схема функции voidLineRem () - функция удаляет заполненные линии в игре "стройка" и опускает "постройку" в низ
  • 5.2 Блок-схема функции voidcheckCoord (int [,] m)
  • 6. Алгоритмы функций
  • 6.1АлгоритмфункцииvoidMainWindow_FormClosing (objectsender, FormClosingEventArgse)
  • 6.3 АлгоритмфункцииvoidStartTanks (objectsender, EventArgse)
  • 7. Результат работы программы
  • Заключение
  • Список литературы
  • Приложение А. Листинг программы

Введение

Название "Си шарп" (До диез) происходит от музыкальной нотации, где знак диез, прибавляемый к основному обозначению ноты, означает повышение соответствующего этой ноте звука на полутон. [4] Это аналогично названию языка C++, где "++" обозначает, что переменная должна быть увеличена на 1.

Названия языков программирования не принято переводить, поэтому зачастую язык называют по-английски "Си шарп".

1. Постановка задачи

Разработать игровую систему "Тетрис". Реализация двух и более игр: стройка, гонки. Режимы сложности: сложный, средний, легкий. Интерфейс пользователя, игровая статистика. Использование контейнеров, итераторов, обработка исключений.

1.2 Методы, которыми можно решить задачу

Для решения данной задачи можно: использовать для долговременного хранения данных текстовые или бинарные файлы, для временного хранения элементов в памяти можно использовать один из следующих контейнеров: List, Vector, LinkedList, двумерный массив. Также для отображения элементов можно было использовать несколько ToolBox'ов отображения: Label, TextBox, ListBox, ComboBox, GroupBox, Panel, PictureBox,ListView.

1.3 Выбранный метод решения задачи

Для работы с данными размещения фигур на игровом поле постоянно нужен индексированный доступ к элементам, поэтому был выбран двумерный массив, который предоставляет прямой и быстрый доступ к нужному элементу, что не могут обеспечить другие элементы хранения данных в оперативной памяти. Для хранения статистики игры был выбран текстовый файл, т.к. скрывать данные нет, также, если бы был выбран бинарный файл - не было бы возможности просмотреть статистику без запуска программы. Для отображения на экране фигур был выбран toolboxPictureBox, т.к. фигуры отображаются в постоянной динамике, нужна высокая производительность отображения, что другие ToolBox'ы позволить не могут. Для отображения статистики на экране был выбран ListView, т.к. он наиболее подходит по структуре для отображения данных такого типа. Отображение текущей статистики было решено сделать в Label'ах. Навигация в программе реализована через Button'ы и CheckBox'ы. Управление фигурами реализовано через клавиши клавиатуры.

Управление стандартное, используются стрелки с цифровой клавиатуры:

4 - сдвинуть фигуру влево

6 - сдвинуть фигуру вправо

5 - сдвинуть фигуру вниз

8 - поворот фигуры

Ctrl+5 - новая игра

В игре 3 уровня, кому покажется мало, могут сделать новые, благо это дело 5 минут.

Ну а если кому понравится, буду рад! :)

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Прикольно. Только вот функция СлучайноеЧисло(1,7) с очень малой вероятностью возвращает цвета и фигуры, для того чтобы полноценно играть, хотя уменьшил цветов 2 раза, стало похоже на тетрис))

Только сейчас большинство людей пользуются ноутами (как я, например) - а у них, как правило, нет num lock. Так что поиграть не удалось(

Спасибо за старания, написать это на языке, не предназначенном для игр и графики - это весьма уважительно!

Просмотры 34356

Загрузки 504

Рейтинг 68

Создание 21.10.10 09:46

Обновление 21.10.10 13:07

№ Публикации 77157

Рубрики Игры

Кому Для всех

Конфигурация Конфигурации 1cv8

Операционная система Не имеет значения

Страна Россия

Вид учета Не имеет значения

Доступ к файлу Абонемент ($m)

Код открыт Не указано


См. также

Каталог игр с приставок из моего детства Промо

Каталог игр Dendy, Sega, Nintendo из нашего детства.

1 стартмани

06.02.2018 19300 77 user621724_Dimav1979 38

Ханойские башни

Решение головоломки "Ханойская башня" с визуализацией в среде 1С.

5 стартмани

23.12.2019 7072 3 13vap 0

Блэк Джек

Блэк джек, написанный на платформе 1С 8.2 (обычные формы).

1 стартмани

07.10.2019 7001 1 Azamatex 2

Игра "Ван Хельсинг"

Игра "Ван Хельсинг". Интерфейс "Обычный". Аркада.

1 стартмани

03.07.2019 6432 1 Lion_LexXx 0

Сетевая игра "СловоБой" на управляемых формах Промо

СловоБой - это новый взгляд на ставшие уже классическими игры, где нужно составлять слова из букв, наподобие Балды и Эрудита. Играйте онлайн с друзьями! В игре СловоБой побеждает не тот, кто может придумать самое длинное слово, а тот, кто знаком с тактикой не понаслышке и способен использовать оптимальную стратегию.

1 стартмани

10.11.2016 21950 8 woldemarr 0

Игра "Логика"

1 стартмани

13.06.2019 8280 2 legenda-nsh 0

Игра в кости "1000" (сетевая)

Аналог игры в кости 1000 (классика). Работает на управляемом приложении, любой конфигурации и без неё. Тестировал на платформе 1С:Предприятие 8.3 (8.3.10.2667) и выше.

1 стартмани

07.05.2019 13682 2 APTEM_SLV 5

Игра "Арканоид" (Javascript фреймворк Phaser). HTML 5 Сanvas + WebGL. Управляемые формы (ТОНКИЙ, ТОЛСТЫЙ клиент), Обычные формы

Общеизвестная игра "Арканоид", доступная для запуска в 1с. Выполнена в виде обработки, запускаемой из папки, в которой расположены файлы проекта (html, js файла и картинки) Любые конфигурации на обычных формах, управляемых формах (Тонкий + Толстый клиент). УПП, БП 2.0, 3.0. После открытия обработки нажимаем мышью на область экрана игры, точнее, нажимаем на кнопку "СТАРТ" (области игры). Начинается игра. Управление мышью.

1 стартмани

04.05.2019 9022 5 pvlunegov 2

Игра "Самоцветы" (Bejeweled теперь и в 1С) + звук Промо

Bejeweled -Самоцветы - красивая логическая игра, смысл которой заключается собрать три и более одинаковых самоцвета (в вертикальной или горизонтальной строке). Первый клик выбираете самоцвет, второй клик выбираете место куда его переместить, перемещать можно только из соседних строк и столбцов. Развивает внимательность и память. Найденные и выбранные группы самоцветов исчезают, а на их место опускаются новые.

20.10.2010 33103 277 Tatitutu 68

Игра Змейка с автопилотом

Игра Змейка с автопилотом реализована в парадигме автоматного программирования.

1 стартмани

23.04.2019 8954 1 RonX01 17

Логическая игра "Камушки"

1 стартмани

05.04.2019 7925 0 ranis888 5

Розыгрыш к 1 апреля (№2) [Расширение] УТ11

Меняем язык надписей на формах для пользователя с помощью сервиса яндекс-переводчик.

1 стартмани

26.03.2019 7962 5 noprogrammer 1

Игра: Лабиринт для 1С (теперь и для 8.0-8.2) Промо

Игра "Лабиринт в 1С для 8 ки" неограниченное количество уникальных полей лабиринтов произвольных размеров формируется динамически (очень красивое зрелище - завораживает) Смысл игры - выбраться из Лабиринта.

1 стартмани

24.09.2010 31264 454 Tatitutu 24

Розыгрыш к 1 апреля [Расширение]

Небольшой розыгрыш к 1 апреля.

1 стартмани

19.03.2019 7888 4 noprogrammer 13

Magic 8 ball (Магический шар 8)

1 стартмани

13.03.2019 9484 7 Смешной 1С 3

Конфигурация-игра "Сто к одному" (1С + html + js + css)

Читайте также: