Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
 Что обсуждали люди в 2024 году? Самое время вспомнить — через виммельбух Пикабу «Спрятано в 2024»! Печенька облегчит поиск предметов.

Спрятано в 2024

Поиск предметов, Казуальные

Играть

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • alekseyJHL alekseyJHL 6 постов
  • XpyMy XpyMy 1 пост
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Дельфи

144 поста сначала свежее
16
stalkself
stalkself
1 год назад
Серия Программирую, пока программируется

Сделал головоломку⁠⁠

Попалась на глаза замечательная головоломка, под названием Slide Elox от широко известного в узких кругах создателя головоломок Жан Клода Константина. Сама головоломка доступна в магазинах, но стоит немалых денег, поэтому решил портировать ее для ПК, воспользовавшись олдскульным Дельфи (писал на Паскале). Собственно результат:

1/4

Цель игры - расположить пластинки таким образом, чтобы их цвета совпали с цветами на доске.

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

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

Пока что мне самому удалось решить только первый уровень. Как оказалось, проще написать код головоломки, чем самому решить ее (правда и код здесь элементарный).

Другие мои проекты:

Игра в кольца

Головоломка Nur 8 Elox

Игра "Гексогональные кольца"

Игра "Водопроводчик"

Паззлы из картинок

Все доступно полностью бесплатно. Без донатов, попрошайничества и рекламы.

Показать полностью 4
[моё] Программирование Инди игра Gamedev Инди Паскаль Delphi Разработка Головоломка Пазл Длиннопост
12
5
stalkself
stalkself
1 год назад
Серия Программирую, пока программируется

Сделал головоломку⁠⁠

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

Очень понравился внешний вид и идея, поэтому решил как можно точнее воссоздать, внеся кое-какие свои изменения.

Собственно результат:

Сделал головоломку Инди игра, Программирование, Delphi, Паскаль, Pascal, Головоломка, Игры, Компьютерные игры, Видео, YouTube

Скачать, если интересно можно здесь.

Оригинальная головоломка называется Nur 8 Elox - она изготовлена известным производителем из Германии, которого зовут Жан Клод Константин. В магазине такая головоломка стоит весьма приличных денег, однако теперь вы сможете оценить ее бесплатно.

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

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

Показать полностью 1
[моё] Инди игра Программирование Delphi Паскаль Pascal Головоломка Игры Компьютерные игры Видео YouTube
9
stalkself
stalkself
1 год назад
Серия Программирую, пока программируется

Шестиугольные пятнашки⁠⁠

Периодически смотрю разные каналы в ютубчике про головоломки. Заинтересовало видео чувака, где он решает гексагональные (шестиугольные) пятнашки:

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

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

Шестиугольные пятнашки Программирование, Разработка, Delphi, Pascal, Компьютерные игры, Игры, Инди игра, Инди, Видео, YouTube

Скачать, если кому интересно, можно здесь.

Писал на паскале в Delphi. Единственно, что пришлось изучить проблему решаемости - как оказалось, для гексагональных пятнашек стандартная теория решаемости, основанная на количестве беспорядков в перестановках не работает. Я пробовал подсчитывать четность таких беспорядков для гарантированно решаемых случаев - оказалось, что она может быть как четной, так и нечетной.

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

Другие мои программки:

2048

Игра в кольца

Шестиугольная головоломка

Игра "Трубы"

Трубный тетрис

Паззлы

Показать полностью 1
[моё] Программирование Разработка Delphi Pascal Компьютерные игры Игры Инди игра Инди Видео YouTube
0
5
stalkself
stalkself
1 год назад
Серия Программирую, пока программируется

Сделал головоломку⁠⁠

Захотелось сделать головоломку с шестигранной структурой ячеек. Часто встречал подобное в играх, поэтому интересно было сравнить разницу при просчете обычных двухмерных массивов и имеющих гексогональную форму. Как оказалось, она невелика.

Собственно результат:

Сделал головоломку Программирование, Gamedev, Инди, Delphi, Pascal, Инди игра, Разработка

Идея головоломки - как обычно, собрать замкнутую структуру. Делал на паскале (Дельфи).

Скачать можно, если кому интересно, здесь.

Другие мои проекты:

Паззлы

Кольца

2048

Трубы

Показать полностью 1
Программирование Gamedev Инди Delphi Pascal Инди игра Разработка
2
663
iTmr
iTmr
1 год назад

Ответ на пост «Стало известно, что на 90-ом году жизни умер Никлаус Вирт — создатель языка программирования "Паскаль"»⁠⁠1

Закон Вирта даже после смерти автора продолжит выполняться:

«программы становятся медленнее куда шустрее, чем компьютеры становятся быстрее» — отражает озабоченность учёного тенденциями к раздуванию программного обеспечения и «индустрализации» процессов разработки, снижающих качество программ.

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

Вирт часто критиковал «американский подход» к разработке средств программирования, в котором маркетинговые соображения превалируют над требованиями математической стройности и гарантированной надёжности, и каждое новое модное поветрие сопровождается некритичным внесением в языки программирования новых синтаксических элементов. Это приводит к неправильной оценке роли некоторых идей и, в конечном итоге, к неправильной расстановке приоритетов в разработке программного обеспечения.

Если думаете, что паскаль остался где-то там, позади, то удивлю, последние версии вышли в 2023 году (есть как OpenSource, так и коммерческие версии):

Embarcaredo Delphi (бывшая Borland Delphi) -- последняя версия 12 Athens (07.11.2023)

Delphi 11 Community Edition -- бесплатно для некоммерческого использования:

Если вы являетесь сотрудником небольшой компании, где менее 5 сотрудников или организации с доходом до $5,000 в год, вы можете использовать Community Edition

OpenSource:

FreePascal -- May 20th, 2021

  • FPC version 3.2.2 has been released!

Lazarus 3.0 - December 21, 2023. OpenSource версия, клон Delphi. В качестве компилятора используется FreePascal.

Те, кто помнят TurboPascal, могут перейти на FreePascal, сняв ограничения MS-DOS. Там и поддержка х32, и х64, и 64-битные типы, и компиляция DLL, и куча других плюшек.

Через FastCGI можно хоть бекенд для веб-сервера писать, фреймворки тоже есть. Например, из Индонезии один энтузиаст клепает fastplaz. Еще есть BrookFramework. И в самом FreePascal есть FCL-web.

Игровой движок на паскале тоже существует: Castle Game Engine.

Внезапно, даже C# у себя в предках отметил Delphi. И Модула-3, но это отдельная академическая история. Я кодил на C# после Delphi, повеяло ностальгией. И если C# можно в веб, то почему паскалю нельзя?

Показать полностью
[моё] Персонажи Паскаль Программирование Delphi Lazarus Turbopascal Freepascal Ответ на пост Текст
379
6
iTmr
iTmr
1 год назад

Веселенькое программирование обоев⁠⁠

Учил девушку писать программу в Delphi, у нее лабы по программированию. Полчаса выбирали цвет окошка, кнопок и прочих элементов, где что расположить. Но все было как-то скучненько и монотонно.

На свою голову я рассказал, что можно на фон поместить компонент Image, в который можно вставить картинку. Вот нахрена я это сказал?

И я почувствовал на своей шкуре этот анекдот: "Решил научить свою девушку играть в танки. Полчаса выбирали форму танкистам"

Потом, после лабы, она рассказала, что у всех были скучные серые окошки, а у нее красивая и веселенькая программа. И за это она меня отблагодарила ртом, т.е. сказала: "Спасибо за помощь!"

В это время я:

Веселенькое программирование обоев Программа, Android, Delphi, Программирование, Обои на телефон, Истории из жизни, Разработка, Длиннопост

И рисую себе веселенькие обои на смартфон:

Веселенькое программирование обоев Программа, Android, Delphi, Программирование, Обои на телефон, Истории из жизни, Разработка, Длиннопост

Фоновое изображение для смартфона, "чистая версия"

При автопривязке к сетке все смотрится как мечта перфекциониста. Раставляю иконки, скриню, далее в графическом редакторе расставляю клеточки через одинаковые смещения. Поэтому и совпадает.

Но если автопривязка выключена, то наступает ад для перфекциониста, ни одна иконка не совпадает с фоновыми клеточками для иконок:

Веселенькое программирование обоев Программа, Android, Delphi, Программирование, Обои на телефон, Истории из жизни, Разработка, Длиннопост

скриншот с этим фоном.

Иконка диктофона: ну, я пошел.

На заставку себе, когда был студентом, ставил расписание звонков на пары и выделял регионы, в которых появляются уведомления, часы и т.д.

Веселенькое программирование обоев Программа, Android, Delphi, Программирование, Обои на телефон, Истории из жизни, Разработка, Длиннопост

Старый скриншот. Оригинальные обои на заставку не сохранились

Я ранее писал, что в Delphi можно на фон поместить компонент Image. А еще я отключал границы окошка и накидывал через Image кнопки, которые реагируют на нажатия. И хоть в стиле скинов Winamp делай лабу по программированию:

Веселенькое программирование обоев Программа, Android, Delphi, Программирование, Обои на телефон, Истории из жизни, Разработка, Длиннопост

скрин скина Winamp, из интернета

Но про то, что можно скрин скина Winamp в фотошопе отредактировать и вставить в качестве фона программы, я решил девушке не рассказывать, это мой секретный ингридиент)

И да, я нигде не писал, что девушка моя, так, знакомая...

Показать полностью 4
[моё] Программа Android Delphi Программирование Обои на телефон Истории из жизни Разработка Длиннопост
0
7
stalkself
stalkself
1 год назад
Серия Программирую, пока программируется

Немного о создании лабиринтов (Delphi)⁠⁠

Заинтересовался идеей создания двухмерных лабиринтов, после того, как случайно набрел на ресурс https://www.mazegenerator.net/.

Полез изучать тему, нашел интересную статью на Хабре, где расписывались особенности типы и способы создания таких лабиринтов. К сожалению, представленный в ней материал оказался не очень понятным и наглядным, поэтому решил самостоятельно придумать алгоритм, способный быстро создавать лабиринт произвольного размера.

Насколько понял, подавляющее большинство существующих алгоритмов используют принципы рекурсивного поиска, с записью данных в стек, из которого они потом по мере необходимости берутся для возобновления этого самого поиска, в случае, когда трактор (условная машинка, которая грызет проход в монолите) попадает в тупик.

Мне такой подход крайне не понравился, и я придумал алгоритм, который осуществляет поиск таких путей за два прохода матрицы лабиринта. Возможно этот алгоритм уже кем-то придуман, но раньше мне такое на глаза не попадалось, поэтому смело называю его своим именем.

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

Вот фрагмент получаемого лабиринта.

Немного о создании лабиринтов (Delphi) Программирование, Паскаль, Windows, IT, Программа, Delphi, Лабиринт, Длиннопост

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

Два этапа алгоритма:

Создание пространства путей в матрице за один ее проход

Объединение путей в единственный также за один проход

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

Бросил на форму два TEdit, чтобы указывать в них размерность матрицы лабиринта по Х и по Y. И компонент TImage для отрисовки лабиринта.

В первую очередь указываем тип матрицы:

type

cell = record

group:integer;

r,d:integer;

end;

И наши переменные:

var

form1: Tform1;

count:integer; //счетчик групп

cel:array of array of cell; //массив ячеек

x,y:integer;

Каждая ячейка в массиве cel имеет три поля:

group – номер группы

r и d – правая и нижняя границы соответственно (стенки лабиринта)

Создаем и заполняем массив после нажатия на кнопку:

x:=strtoint(edit1.Text); //Наши значения размера массива из эдитов

y:=strtoint(edit2.Text);

setlength(cel,x+1,y+1); //Задаем размеры массива ячеек с запасом +1, чтобы не возиться с нулевыми индексами

for j := 1 to y do //Заполняем пространство group нолями, а все стенки делаем закрытыми

for i := 1 to x do

begin

cel[i,j].group:=0;

cel[i,j].r:=1;

cel[i,j].d:=1;

end;

Все, теперь можем начинать работу алгоритма

1. Этап - создаем пространство путей, которые будут проложены трактором.

count:=1; // Наш счетчик номеров и количества групп

for j := 1 to y do //Первый проход матрицы по высоте и ширине

for I := 1 to x do

if cel[i,j].group=0 then //Находим пустую клетку и пускаем из нее трактор

begin

track(i,j);

inc(count); //Увеличиваем счетчик, после того, как трактор построил путь

end;

Собственно, код трактора:

procedure tform1.track(x1: Integer; y1: Integer);

var

k,mx,my:integer;

label start;

begin

//Процедура прохода и построения трактором лабиринта

mx:=x1;my:=y1;

cel[mx,my].group:=count; //присваиваем стартовой клетке номер новой группы

start:

k:=random(4)+1; //Случайное направление движения

case k of

1:

if (mx>1) then

if (cel[mx-1,my].group=0) then //Если слева пусто, идем туда и заодно убираем стенку

begin

cel[mx-1,my].r:=0;

cel[mx-1,my].group:=count;

mx:=mx-1;

goto start;

end;

2:

if (mx<x) then //Аналогично остальные направления

if (cel[mx+1,my].group=0) then

begin

cel[mx,my].r:=0;

cel[mx+1,my].group:=count;

mx:=mx+1;

goto start;

end;

3:

if (my>1) then

if (cel[mx,my-1].group=0) then

begin

cel[mx,my-1].d:=0;

cel[mx,my-1].group:=count;

my:=my-1;

goto start;

end;

4:

if (my<y) then

if (cel[mx,my+1].group=0) then

begin

cel[mx,my].d:=0;

cel[mx,my+1].group:=count;

my:=my+1;

goto start;

end;

end;

//Проверяем не тупик ли

if canmove(mx,my) then goto start;

end;

В конце проверка на возможность дальнейшего движения для трактора:

function tform1.canmove(x1: Integer; y1: Integer): LongBool;

begin

//Проверка на возможность хода

result:=false;

if x1>1 then if cel[x1-1,y1].group=0 then

begin

result:=true;exit;

end;

if x1<x then if cel[x1+1,y1].group=0 then

begin

result:=true;exit;

end;

if y1>1 then if cel[x1,y1-1].group=0 then

begin

result:=true;exit;

end;

if y1<y then if cel[x1,y1+1].group=0 then

begin

result:=true;exit;

end;

end;

Все, наше пространство путей готово. Оно будет иметь примерно такой вид:

Немного о создании лабиринтов (Delphi) Программирование, Паскаль, Windows, IT, Программа, Delphi, Лабиринт, Длиннопост

Соответствующая ему матрица групп:

Немного о создании лабиринтов (Delphi) Программирование, Паскаль, Windows, IT, Программа, Delphi, Лабиринт, Длиннопост

Как видно из точки S в точку F дойти невозможно, тем не менее у нас уже есть четыре отдельных группы, каждая из которых представляет собой путь, пройденный трактором.

Чем более крупным является лабиринт, тем больше таких путей. Каждый из них является идеальным, поскольку изначально построен так, чтобы исключить вероятность создания петлей и замкнутых областей.

Осталось объединить их в один идеальный путь:

for i:= 1 to x do //Запускаем второй проход матрицы (первая ячейка всегда имеет номер группы 1)

for j:= 1 to y do

begin

if i<x then if cel[i+1,j].group<>1 then //Если находим группу справа от нас отличную от единицы то присоединяем к нашей единичной следующим образом:

begin

cel[i,j].r:=0; //Убираем заодно стенку

del(cel[i+1,j].group,i+1); //Меняем все найденные индексы группы на нашу единицу, для оптимизации процесса делаем это не с начала, а с ряда, где находится наша найденная клетка

end;

if j<y then if cel[i,j+1].group<>1 then //Аналогично смотрим клетку снизу

begin

cel[i,j].d:=0;

del(cel[i,j+1].group,i);

end;

end;

Процедура замены на единички:

procedure tform1.del(x1,x2: Integer); //x1 – наша группа, х2 – точка старта

var

i,j,f:integer;

begin

for i:= x2 to x do

begin

f:=0; //Флаг поиска групп в ряду для оптимизации

for j:= 1 to y do

if cel[i,j].group=x1 then

begin

cel[i,j].group:=1;

f:=1;

end;

if f=0 then exit; //Если не найдено групп в хотя бы в одном ряду, то в оставшихся рядах и искать нет смысла, чтобы не тратить ресурсы ПК

end;

end;

В результате получаем одну группу, которая соединяет все клетки лабиринта в один единственный путь.

Осталось только нарисовать любым доступным способом, например, так:

image1.width:=x*20;

image1.Height:=y*20;

image1.Picture.Bitmap.Width:=x*20;

image1.Picture.Bitmap.Height:=y*20;

with image1.Canvas do

begin

brush.Color:=clwhite;

fillrect(rect(0,0,width,height));

pen.Color:=clblack;

pen.Style:=psSolid;

pen.Width:=2;

Rectangle(1,1,x*20,y*20);

for j := 1 to y do

for i := 1 to x do

begin

moveto(i*20,(j-1)*20);

if cel[i,j].r=1 then lineto(i*20,j*20);

moveto((i-1)*20,j*20);

if cel[i,j].d=1 then lineto(i*20,j*20);

end;

Ну тут и объяснять ничего не надо.

Из особенностей этого алгоритма можно отметить высокую скорость работы – генерация матрицы размером 5000 на 5000 без отрисовки заняла всего 2 минуты, на моем не самом быстром домашнем ПК, а это 25 миллионов ячеек. Генерация 500х500 с отрисовкой – всего 6 секунд!

У меня нет возможности сравнить с другими алгоритмами, но там, в статье как раз на скорость и жаловались. Генерация маленьких лабиринтов – мгновенна. Стандартный размер 200х200 делает как раз за секунду.

Естественно рисовать таким способом большой лабиринт нет смысла – никакой памяти не хватит, можно делать частичную отрисовку на TImage и распечатывать частями. Но для лабиринтов размером до 300-400 ячеек на сторону подходит вполне.

Из недостатков стоит отметить как раз отсутствие привязки к точкам входа и выхода, а значит нет готового решения для тех, кто хотел бы иметь его сразу. Придется брать карандашик в руки и искать его самостоятельно, но в этом же ведь и суть любого лабиринта?

Еще недостаток – на мой взгляд, не слишком высокая сложность, но, если сделать хотя бы 15х15 уже сразу глазом не зацепишься за правильное решение.

Готовую программу выложил на Гитхабе, если кому интересно – можете скачать здесь. Хотелось бы услышать мнение специалистов.

Другие проекты:

Игра в пазлы: https://github.com/stalkself/SuperPuzzleMaster

Показать полностью 3
[моё] Программирование Паскаль Windows IT Программа Delphi Лабиринт Длиннопост
12
stalkself
stalkself
1 год назад
Серия Программирую, пока программируется

Бесполезное⁠⁠

Попался на глаза псто: Бесполезный сайт.

Заинтересовал алгоритм, решил попробовать воссоздать его на Дельфи.

Оказалось, он достаточно прост, не пришлось долго думать.

Ну собственно, получилось такое:

Бесполезное Delphi, Паскаль, Программирование, Алгоритм, IT

Скачать, если интересно, можно здесь:

https://disk.yandex.ru/d/TqO3ppfOquhXlQ

[моё] Delphi Паскаль Программирование Алгоритм IT
3
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии