Содержание
Игра в теннис на Pascal ABC
Игра в теннис на Pascal ABC
«Теннис». Написать программу, имитирующую игру в теннис. Игровое поле представляет собой прямоугольник, по которому движется теннисный мячик. С правой стороны располагается «ракетка» игрока, которую можно передвигать вверх или вниз. Игра продолжается до тех пор, пока игрок не пропустит мячик 5 раз. В качестве второго игрока может выступать компьютер или другой игрок.
Новый блог по адресу Блог об ИТ и программировании на русском. Если вы хотите, чтобы я обновил, какие-либо статьи, пожалуйста напишите мне на email.
Игра Змейка – текстовая реализация на языке Pascal
Дальше текст программы
Комментарии к этой программе, такие же, как и к предыдущей.
Конечно интереснее, если сделать графическое отображение, например через модуль graph, но текстовое исполнение, добавляет немного романтики времени MS-DOS.
Эта статья написана в Вторник, Январь 19th, 2010 at 18:54 в разделе Задачи программирования. Вы можете подписаться на обновления комментариев к статье — RSS 2.0. Вы можете оставить комментарий, или послать пинг со своего сайта.
12 комментария
хм, а я круче написал! с зашибенным интерфейсом!
Привет, давай свяжемся с тобой во Вконтакте?
https://m.vk.com/id445385155
kak zapustit i kakaimi klaviwami igrat’.
Free Pascal выдает ошибку на строке
пардон, не туда запостил, сорри )))))
Здравствуйте.
У меня возник вопрос: что означают e.x, e.y, snakebody[i].x, snakebody[i].y?
как играется это игра? вообще не играется, запускаю но ваша змейка не двигается
В самом конце программы в срочке” Delay(30000);” уменьши значение хотябы до 100, чем меньше сделаешь тем быстрее она будет двигаться. И ещё при запуске проверь что стоит английская раскладка, на русской не работает. Управление на (W,A,S,D).
Игра класс )) , но как управлять змейкой я все перепробовал!
Подскажите пожалуйста.
Попросил меня однажды один человек помочь ему с курсовой. Все делали что-то простенькое, а он вот решил выделиться, замахнулся на игру, даже начал, но потом он понял, что как-то не понимает некоторых вещей, поэтому обратился за помощью ко мне 🙂
Ну а я что… Помог ему, конечно же! Да и самому было интересно! А теперь расскажу о некоторых подробностях и «возможностях» игры, а также ниже можно будет ссылку на исходники найти 🙂
Если честно, до этого мало дел имел с паскалем, к тому же, с паскалем .net!
Открыв наброски, которые тот человек уже сделал, увидел модули GraphABC, ABCObjects, с которыми раньше не приходилось работать.
Но до меня уже была часть работы сделана, а именно создание окна нужного размера и размещение «сетки» квадратиков 4х4.
Это облегчило задачу, потому что я увидел, что много схожестей есть с обычными паскалевскими объектами или графическими примитивами, а тут ещё удобство было в том, что все эти объекты (квадратики, кружочки и другие штуки) сами отвечают за свою прорисовку, не нужно рисовать на canvas-е и т.д., тут можно просто указать новую позицию или ещё как-то изменить объект, а перерисуется он уже сам!
И тут началась разработка! Никогда не приходилось до этого делать игру 2048, но найдя на просторах интернетов браузерную реализацию данной игры, пришлось поиграть в неё, опробовать разные ситуации, чтобы наглядно ознакомиться с правилами. Оттуда же были стянуты цвета и записаны в несколько чудном формате, потому что оказалось, что данный паскаль не поддерживает запись цветов через $, как это сделано в том же Delphi, например )
Вот такой вышел код, который возвращал нужный цвет текста и фона, в зависимости от цифры.
TSquareColor — это запись, хранящая в себе фоновый цвет и цвет текста. Функция createColor принимает на вход первым параметром цвет фона, а вторым — цвет текста и возвращает уже заполненную запись TSquareColor, которая потом уже используется для задания цвета определённой клеточки )
Вообще, код неплохо откомментирован. В некоторых местах даже избыточно, т.к. это курсовая работа, пришлось комментировать почти всё 🙂
А некоторые куски кода, которые можно было бы оптимизировать и вынести в отдельную функцию, лишь изменяя некоторые параметры, пришлось оставить так, как есть, задублированными… )
Поэтому всякие объяснения можно найти в коде!
Сразу скажу, что настройки размера поля, отступов клеточек друг от друга, другие отступы, настройки анимации и т.д. можно задавать тоже в коде, эти константы вынесены специально для этих целей )
Настало время показать, как это дело выглядит! А вот так:
Игра 2048. Окно программы в самом разгаре игры!
Ничего особенного. Всё как обычно )
А в заголовке отображается ещё и количество очков. Управление то же самое, как и в классической реализации игры. Поведение тоже )
При появлении и сложении клеточек есть анимация небольшая, которая порой работает кривовато… Тут уж был задействован таймер, а также изменение размеров этих блоков. Иногда просто почему-то размер не доходит до начального состояния, и поэтому некоторые клеточки так и остаются немного больше или меньше, но это происходит редко )
Также был написан небольшой класс для показа «диалоговых» окон, который содержит в себе простенькую реализацию некоего подобия окна подтверждения (которое содержит вопрос и кнопки ОК и Отмена). Суть в том, что можно динамически создавать эти диалоговые окошки, модально показывать их, реагируют они также на нажатия клавиши Esc (отмена) и Enter (ок).
Также можно показывать просто уведомление с кнопкой Ок!
Простенько, но большего и не нужно.. ) Даже это уже было лишним 🙂
Код класса этого находится в файле controlUtils.pas, который тоже находится в архиве 🙂
Выглядят окошки примерно вот так:
Игра 2048. Вопрос о начале новой игры (при нажатии на Esc)
Игра 2048. Конец игры. Лол!
Про модальные диалоги я, конечно, загнул немножко )
Вся модальность работает вот так:
Обрабатываются нажатия в главном окне программы, а там уже идёт проверка, если открыто какое-то диалоговое окно, то нужно обрабатывать нажатия несколько иначе, а если же нет никаких окон, то там уж управлять игрой нужно )
При нажатии мышкой на кнопку ОК или Enter на клавиатуре срабатывает уже определённое заданное событие, которое передаётся как callback (типа того) при вызове функции dialogs.showConfirm. Как-то так оно и работает… )
Прикольно, в общем. Остальное можно найти в коде и в комментариях, которых там, как уже было сказано выше, предостаточно.
Были некоторые идеи, типа сохранения состояния игры при закрытии и восстановление при открытии, но как-то не было в этом необходимости, да и интерес через некоторое время пропал, поэтому всё осталось на таком уровне, на котором есть сейчас. К тому же, для курсовой тому человеку всех этих окошек диалоговых не нужно, поэтому на каком-то этапе он просто оставил старую версию и стал дорабатывать её по-своему )
Скачать исходник и готовый ехе-шник, который, кстати, весит довольно мало из-за .Net, можно вот в этом замечательном архиве: http://shpirat.net/etc/2048_PascalABC.NET.zip
Сделано это всё было ещё осенью, но сейчас стало можно это опубликовать, может, ещё кому-то пригодится или же просто интересно будет 🙂