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

Рыбалка по-русски

Казуальные, Симуляторы, На ловкость

Играть

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

  • Oskanov Oskanov 9 постов
  • Animalrescueed Animalrescueed 46 постов
  • AlexKud AlexKud 33 поста
Посмотреть весь топ

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

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

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

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

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
AlSoh8vne
AlSoh8vne
6 лет назад
IT-юмор

"Комментарный" стиль оформления кода)⁠⁠

Delphi'сты признавайтесь, кто еще так делает?)
"Комментарный" стиль оформления кода)

Собстно на днях получил задание дописать прогу за одним men'ом, скинули исходники, а там такое во всех ёлочках_

Суть в том, что в основных ide под delphi (borland, lazarus, embarcadero) курсор в строке можно поставить в её любое место вне зависимости от того, если ли в ней пробели или табуляция или нет и сколько, и начать писать в любом её месте, хоть с середины, а потом переставить курсор на начало и писать там, а тем временем текст в середине начнёт отступать на соответствующий отступ. Редактор кода при сохранении потом сам доставляет нужные tab или пробелы.

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

И при этом автоматическая разметка кода, которой он старался видимо придерживаться, чтоб не сбиваться с стиля, делает так:

[пишем]

if {условие} then [жмём Enter]

_[автоматом получаем tab->]

_[пишем] begin [жмём Enter]

__[автоматом получаем второй tab-> и еще иногда сразу end; на третьей строке]

_end;

И если мы после этого end; нажмём Enter, то всё еще будем на его _ [Tab->] отступе, вровень с ним, хотя должны быть вровень с if, по логике, ну не беда, стираем tab и идём дальше. Но иногда это не нужно, а участок кода в итоге добавляешь много потом, а находясь между двумя end мы стираем автоматически 2 tab и приравниваемся к последнему, опять не удобно, теперь добавляем еще один tab и пишем.

Потом бывают ситуации, когда последний end намного дальше, а код к которому выровнять выше экрана и ты начинаешь путаться сколько tab'ов тебе надо в итоге выставить. Вот тут уже сложновато.

И что придумал этот интересный человек) Он просто на каждый отступ делает вот такие вот засечки на автомате, чтоб не путаться)

Я дооолго думал нафига) В итоге привык, даже сам потихоньку начинаю так делать)

Но позабавила, такая фишка.

Что скажите на её счёт?) ...мб он зря так делает и можно тупо где то отключить эту фичу редактора?

Показать полностью
Delphi Засечки Программирование Читабельность
28
124
AfterBefore
6 лет назад

Вторая жизнь старому стрелочному мультиметру⁠⁠

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

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

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

Выбираем провод с более резким наклоном прямой. В моем случае получилось что при максимальном отклонении стрелки напряжение равно 96,4 мВ. Для оцифровки микроконтроллером мало, но ничего страшного, это напряжение можно усилить операционным усилителем. Подойдет любой ОУ, я взял LM2904, просто потому что у меня такой был. Смотрим документ на микросхему – два ОУ в одном корпусе, максимальное выходное напряжение Vcc-1.5v. Запитывать будем от 3.3 вольт, значит надо подобрать коэффициенты усиления так, чтобы при зашкаливающей стрелке ОУ выдавал максимально возможное напряжение.

Готово. Первый каскад усиливает напряжение со стрелки мультиметра в 10 раз, второй каскад усиливает выход первого в зависимости от настройки потенциометра. Для тестов я собрал все на старом кусочке текстолита.

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

На борту у нее микроконтроллер STM32F103C8T6. Есть АЦП и USB. Подходит. Для первоначальной настройки предлагаю воспользоваться STM32CubeMX. Включаем тактирование, настраиваем кварцевые резонаторы.

Включаем и настраиваем АЦП, не забываем про прерывание по готовности.

АЦП будет запускаться по событию таймера, настраиваем таймер.

Таймер тактируется частотой 48 МГц, с предделителем 24 и периодом 2000 получится, что он будет запускать АЦП каждую 1 мс. В принципе так часто нет смысла, но мы будем использовать усреднение значений, поэтому пусть будет. Включаем USB, выбираем Custom HID.

Генерируем проект и переходим к написанию кода. Я использовал System Workbench for STM32. Добавляем в «main.c» запуск таймера и АЦП, и несколько глобальных переменных.


/* USER CODE BEGIN PV */

//uint16_t adc_arr[ADC_MAX_CONVERSATIONS];

uint16_t adc_to_send;

uint32_t adc_sum;

uint8_t adc_counter;

uint8_t send_flag;

volatile uint16_t x;

/* USER CODE END PV */

/* USER CODE BEGIN 2 */

HAL_ADC_Start(&hadc1);

HAL_ADC_Start_IT(&hadc1);

HAL_TIM_Base_Start(&htim3);

/* USER CODE END 2 */


В прерывании прибавляем к переменной значение с АЦП и увеличиваем счетчик. Когда счетчик достигнет 200, усредняем значение и перекладываем в буфер для отправки по USB. Поднимем флаг, что пора отправлять.


/* USER CODE BEGIN 4 */

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){

adc_sum+=HAL_ADC_GetValue(hadc);

adc_counter++;

if(adc_counter==ADC_MAX_CONVERSATIONS){

HAL_GPIO_TogglePin(LD_1_GPIO_Port,LD_1_Pin);

adc_to_send=adc_sum/ADC_MAX_CONVERSATIONS;

adc_counter=0;

adc_sum=0;

send_flag=1;

}

}

/* USER CODE END 4 */


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


/* USER CODE BEGIN WHILE */

while (1)

{

// HAL_GPIO_TogglePin(LD_1_GPIO_Port,LD_1_Pin);

if(send_flag){

send_flag=0;

..USB_Send_report(adc_to_send);

}

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

}


Дескриптор USB устройства уже создался стм кубом, его трогать не будем, только проверим интервал опроса, должно быть не больше наших 200 мс.


/* 34 */

0x07, /* bLength: Endpoint Descriptor size */

USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: */

CUSTOM_HID_EPOUT_ADDR, /*bEndpointAddress: Endpoint Address (OUT)*/

0x03, /* bmAttributes: Interrupt endpoint */

CUSTOM_HID_EPOUT_SIZE, /* wMaxPacketSize: 2 Bytes max */

0x00,

0x20, /* bInterval: Polling Interval (20 ms) */

/* 41 */


Далее составим «HID Report» дескриптор в программке HID Descriptor Tool.

Тут мы говорим, что наше устройство сообщает температуру в комнате (Usage). Report Size=8 и Report Count=4 означают, что 32 бита посылается от устройства к компьютеру (Input) и столько же от компьютера к устройству (Output). Нам из этого всего понадобится только 2 байта, остальное на будущее. Сохраняем как заголовочный файл, и копируем в наш код (куб там оставил место в файле usbd_custom_hid_if.c). Так же надо проверить соответствие размеров репорт дескриптора 35 байт и размер буфера под отправку (тут должно быть 5 байт, потому что мы еще указали Report ID – это еще 1 байт в самом начале). Прошьем и проверим, что устройство правильно определилось в системе.

Раскомментируем функцию отправки в файле «usbd_custom_hid_if.c» и заполняем, указав первым байтом Report ID, дальше наше значение АЦП.


/* USER CODE BEGIN 7 */

/**

* @brief Send the report to the Host

* @Param report: The report to be sent

* @Param len: The report length

* @retval USBD_OK if all operations are OK else USBD_FAIL

*/

static uint8_t USBD_CUSTOM_HID_SendReport_FS(uint8_t *report, uint16_t len)

{

return USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, report, len);

}

uint8_t USB_Send_report(uint16_t data){

Rep_buffer[0]=0x01;//report id

Rep_buffer[1]=data>>8;

Rep_buffer[2]=data;

Rep_buffer[3]=0xFF;

Rep_buffer[4]=0xFF;

return USBD_CUSTOM_HID_SendReport_FS(Rep_buffer,5);

}

/* USER CODE END 7 */


Проверяем в какой-нибудь утилитке что пакеты действительно идут.

Осталось написать программку под Windows, которая бы все это обрабатывала. Берем любимую среду программирования и библиотеку для работы с HID устройствами. Я взял старенькую Delphi 7 и библиотеку компонентов JEDI VCL. Из нее нужны «TJvHidDeviceController» и «TJvHidDevice». Добавляем обработчик «OnEnumerate» у девайс контроллера, в него по очереди прилетают все HID устройства при вызове энумерации. Остается отфильтровать наше устройство по VID и PID, затем связать с компонентом «TJvHidDevice».


function TUSBMeter.HidControllerEnumerate(HidDev: TJvHidDevice; const Idx: Integer): Boolean;

begin

if (IntToHex(HidDev.Attributes.VendorID,4)=VID)and

(IntToHex(HidDev.Attributes.ProductID,4)=PID) then

begin

if (HidDev.Caps.OutputReportByteLength=OUT_REPORT_COUNT_AMPERAGE) then

HidController.CheckOutByIndex(HidAmperage,Idx);

usb_ready:=true;

end;

Result := True;

end;


Данные будут приходить в обработчик «OnDeviceData». В нем вычисляем из посылки значение АЦП и выводим куда-нибудь для проверки.


procedure TUSBMeter.HidControllerDeviceData(HidDev: TJvHidDevice; ReportID: Byte; const Data: Pointer; Size: Word);


var

buf:^byte;

begin

if (IntToHex(HidDev.Attributes.VendorID,4)<>VID)or((IntToHex(HidDev.Attributes.ProductID,4)<>PID)) then exit;

buf:=Data; // rep

adc_abs:=buf^;

adc_abs:= adc_abs shl 8;

inc(buf);

adc_abs:=adc_abs+(buf^);

inc(buf);

callback;

end;


Теперь надо сделать пересчет, добавим на форму RadioGroup и настроим как на переключателе мультиметра. Я не стал добавлять шкалу сопротивлений, не нужна.

Заведем так же масштабирующий массив для пересчета и массив с единицами измерений.


const

scale_arr: array[1..18] of real = (600,300,150,60,30,15,6,3,0.75,1500,300,60,15,3,0.6,0.12,0.000012,1);

scale_arr_symb: array[1..18] of string[2] = ('V','V','V','V','V','V','V','V','V','mA','mA','mA','mA','mA','mA','mA','uA','');


Для пересчета еще понадобятся два граничных значения acd_min и adc_max. Подключаем потенциометр к мультиметру, выставляем стрелку на 0 и смотрим, что присылается в программу. Если тоже 0 – хорошо, если нет – не беда, подкорректируем. Потом выставляем стрелку на максимум и так же смотрим. Важно чтобы когда стрелка «зашкаливала» значение продолжало увеличиваться, так будет запас. Если этого нет, надо подкрутить потенциометр ОУ. У меня получилось 0 и 2365. Пересчитываем и выводим уже на основное табло.


procedure TMainForm.HID_Callback;

var

s:string;

buf:string;

rec_s:string;

begin

s:=floattostr(((meter.ADC-adc_min)/(adc_max-adc_min))*scale_arr[RadioGroup1.ItemIndex+1]);

buf:=copy(s,1,5);

buf[pos(',',buf)]:='.';

Label2.Caption:=buf;

end;

Большая часть готова, теперь надо прикрутить запись в файл, страницу настроек с сохранением и красивый GUI. Формат файла я взял CSV, так как из него будет легко строить графики в Экселе.

Все, готово. Осталось собрать все в корпус мультиметра, свободного места там полно. Прорезать отверстие под USB шнурок и убрать обратно на самую дальнюю полку до тех пор, пока не понадобится снять долгий график разряда аккумулятора или график потребления тока каким-нибудь устройством.


Надеюсь, кому-нибудь будет полезно.

Показать полностью 23 1
[моё] Мультиметр Новая жизнь старых вещей Схемотехника Микроконтроллеры Arduino Stm32 Delphi Программирование Видео Длиннопост
45
vitalneponimaet
6 лет назад
Лига программистов

Ай нид хэлп⁠⁠

Ребята кто-нибудь разбирается в delphi и access нужен листинг программы. Для диплома нужно. Знакомых программистов нету( поэтому рискнул написать сюда. Может быть найдутся добрые люди.

Delphi Access Текст
23
Rock9
Rock9
6 лет назад

ПОМОЩЬ В ДЕЛФИ 7⁠⁠

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

ПОМОЩЬ В ДЕЛФИ 7
Delphi Help!i need somebody Delphi7
19
NuVotTak
6 лет назад

Тут не сайт резюме, это просто история того, кто хочет кодить⁠⁠

Админы, пропустите, если можно. Я много раз видел, как на пикабу переворачивают мир, со всякими судьями, со всякими несправедливостями, и всегда люди пишут "Верю в силу пикабу!". Я читаю его уже много лет, но никогда ничего не писал, ну нет годноты, нет что-то, что бы стоило рассказать. Я напишу один раз. И добавлю - "Верю в силу Пикабу!". Питер. Комменты для минусов сделаю, вроде как-то так говорят. Просто рискну.


Я работал на многих работах, кальянщиком несколько лет, барменом две недели, разнорабочим на стройке, фаршесоставителем, мусорщиком в общаге института. По общению - предпочел бы общаться с машинами, чем с людьми, потому что логику машин можно понять. Но проблем с общением с людьми не возникнет - обо мне всегда говорили, что я очень общительный, и я "типа" был центром любой движухи. А еще я бывший КВНщик и наша команда заняла второе место на региональных играх, команда называлась не "Желтый поселок", но "Цвет + тип местности". Выиграли кучу канцелярии и ящик пива (а за первое место давали бочку пива, вот).


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


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


Я помню, как я написал свою первую программу на бейсике. Это была мелодия и я еле успел ее дописать, потому что меня посадили на 15 минут и уже выгоняли.


Программирование я изучал по книгам, и даже когда у многих уже были компьютеры - у меня его не было. Я читал книги, которые мог достать, в библиотеках и у учителей по информатике, читал Компьютерру, все по картинкам. Когда меня в первый раз посадили за компьютер, я по памяти управлял Norton Commander и командной строкой DOS, увидев это все в первый раз.


Всякое было. А теперь, что я умею.


Перед прочтением, хотел бы отметить, что все я изучил самостоятельно, по книгам и информации в Интернете.


Delphi 7, написал больше 20 программ, которые успешно продавал и зарабатывал на них достаточно, чтобы купить себе новый ноутбук и только появившийся iPad Air 2, разрабатываю и обновляю их до сих пор, хочу перейти на последнюю версию Delphi, но очень сложно переделать весь мой софт на новую версию, потому что она зависима от библиотек, которых нет под новую версию. Софт могу продемонстрировать, тот, который не потерял после того, как умерло два жестких диска, один основной, а второй с бекапами. AutoIt - могу автоматизировать практически все, что угодно при работе приложений в Windows, работу с распознаванием графики изучал, но скрипты под нее не разрабатывал. Написал скрипт для прокачки аккаунтов в LoL (без распознавания изображений). Переводил игры на Sega Mega Drive, хотел перевести только одну - игру по D&D, но для практики разобрал несколько других ROM'ов. Не перевел, потому что в игре было очень много сугубо D&D сленга, который невозможно перевести, не зная суть D&D. Умею ремонтировать компы, если что-то с виндой - способен устранить неполадки. Многие годы ремонтировал компьютеры бесплатно в своей деревне. Работал со всеми ПК, начиная от IBM/PS2 и заканчивая последними моделями наших лет. Знаю историю развития компьютерной техники, начиная с 80 годов, лучшими системами считаю Amstrad CPC и Commondore 64, уважаю Spectrum не только из-за архитектуры, но и из-за того, что он дал возможность познакомиться с ПК многим людям. Могу подбирать лучшие комплектующие по цене/качеству, менять их и собирать хорошие машинки. Умею работать с пакерами для защиты ПО, имею лицензию на Obsidium, активно использую его для защиты своих программ, изучил API, справочная система очень подробная с кучей страниц, я все изучил практически без использования переводчика, умею читать техническую документацию на английском языке. Самостоятельно написал библиотеки и классы для нескольких очень популярных сайтов (SoundCloud из крупнейших, из мелких - сайты для работы с каптчей, работал с многими сайтами), даже для тех, у которых нет API. Декомпилировал и деобфусфировал программы на C# и скрипты AutoIt, ломал защиту у ПО. Базовый уровень. Имею в распоряжении пакет лицензионных программ для разработки, одна из них - BotChief. Версия для разработчиков, стоимостью 25 тысяч рублей. Фактически, единственный в России разработчик скриптов для этого софта, активный участник форума, помогаю другим в разработке скриптов, запустил небольшой блог по этому софту. Активно использовал веб-технологии, использовал многие движки CMS и форумов, OpenCart, PrestaShop (работал немного, нашел опенкарт и посчитал его более лучшим, ушел на него), WordPress, форумные движки, писал небольшие расширения для OpenCart, разбираюсь в модулях, могу выбрать лучшие. Могу найти что угодно в Интернете, главное знать, где искать (а я знаю). Фанат OpenSource и уважаю GNU больше чем Линуса Торвальдса. Разбираюсь в прикладном софте, разберусь в любом ПО, подскажу другим. Использовал практически все антивирусы, популярные в СНГ. Был тестером в игре World of Tanks. Разбираюсь в играх, знаю их историю, культовые игры и просто их люблю (Doom Forever). Способен изучить что угодно за короткое время. Все языки программирования очень простые, суть в сложных алгоритмах. Считаю, что в программировании главное - хорошо написанный код (под этим я понимаю код, понятный программисту) и логика. А еще костыли, костыли и костыли :) Написал несколько ТЗ и алгоритмы для работ серверных частей моего ПО (не пишу на PHP, заказывал, код их - идея моя). Читаю блог GunSmoker'а и уважаю его, как программиста высокого класса, но он, бывает, общается очень неприятно. Очень много (МНОГО!) работал с социальными сетями и накруткой в них (весь мой софт работает на это). Нужны лайки, подписчики - их есть у меня. Активно читаю важные ресурсы - хабру, delphisources, все форумы по программированию. Умею решать задачи программирования с помощью смекалки, если не знаю, как сделать это правильно. Нашел ошибку в математическом модуле Delphi 7 (модуль Math - получение рандомного значения из диапазона - написал сначала свою версию, потом посмотрел, косяк там).


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


Я ни в коем случае не требую относиться ко мне с жалостью, я хочу делать свою работу хорошо, ту, которую смогу. Хотя бы катриджи в принтерах менять, тестером могу быть (я нашел очень много багов в своей жизни и отправил репортов), отлично (я так считаю) разрабатываю интерфейсы приложений (в одном из ПО, я могу показать в каком, очень много крутых фишечек - мои предложения). По интерфейсам - больше всего нравится подход Apple.


Не знаю, что еще сказать. Есть что-то, что я забыл написать.


Мои минусы:

- Веб-разработка: PHP не знаю, начал изучать питон, времени было в обрез. Считаю пито лучше PHP, да и хостингов нормальных с питоном не нашел.

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

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

- Криптовалюты: о сути технологии считаю вот что - потенциал большой, но используется херово.


P.S. Кроме чтения книг, программирование изучал по чтению исходных кодов. Вроде как лучший способ научиться делать что-то - посмотреть, как делают профи. В программировании силен в разработке интерфейсов, большая часть моего ПО работает с многопоточностью, но реализовано все через синхронизацию (тупо экономия времени - добавить к этому нечего), активная работа с вебом - библиотеки Synapse и ICS.

P.P.S. Владею слепым набором на русском языке, на английском - наполовину.

Показать полностью
[моё] Delphi Работа Длиннопост Текст
21
8
DELETED
7 лет назад

Реализация старой, доброй игры "Змейка"⁠⁠

Классическая игра змейка без особых премудростей. Содержит 5 игровых уровней, которые открываются по завершению предыдущих. Реализовалась в Delphi7. Все ресурсы(изображения) выполнялись в Paint.

Показать полностью 2
[моё] Pixel Art Разработка игр Gamedev Delphi
8
86
Darthman
7 лет назад
Лига Разработчиков Видеоигр

"Мини-игра за 4 с лишним года" или "есть ли жизнь без Unity?"⁠⁠

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

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


Итак, всё лучшее:

Лучший 2Д движок - ЕСТЬ (потрачено много времени)

Лучший саундтрек - ЕСТЬ (потрачено прилично денег и времени)

Мы обязаны сделать подддержку геймпадов - ЕСТЬ

Ачивки должны быть видны прямо в игре, как и лидерборды - ЕСТЬ

Поддержка любых разрешений, но без растягивания всего - ЕСТЬ

Десяток языков и свой собственный шрифт - ЕСТЬ

Уникальный геймплей, никаких копий других проектов - ЕСТЬ

Фигова гора эффектов и шейдеров - ЕСТЬ

Своя реализация классического интерфейса с окошками и кнопками - ЕСТЬ

Система обновлений игры - ЕСТЬ


Собственно сюда и утекало время.  Давайте вычеркивать лишнее.

Лучший 2Д движок:

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

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

Куча крутых фич и разных свистоперделок:

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

Можно было бы делать игру большей командой, чем 2 программиста. (Да большая часть графики в игре рисована программистами).

Немало времени можно было бы съэкономить просто снизив планку качества, и не пытаясь делать "как у Blizzard".

У нас свой хардкорный геймплей:

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

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

С коммерческой точки зрения игра не оправдывает вложенных в неё сил и времени. Отчасти из-за того, что о ней совершенно никто не знает, а рынок перенасыщен инди-поделками.

Достижений, тем не менее очень много. Нам удалось создать пускай и маленькую, но игру, которая не вызывает невероятное количество негатива. Да, она сложная, возможно даже черезчур. Но уникальна в своем роде и закончена настолько, что самим приятно (сам не похвалишь...) Закончена ли история с её производством? Не факт.

Десяток языков и свой собственный шрифт

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

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

Но качественно делать стоит, однако нужно быть хорошо уверенным в маркетинге, не делать столь нишевые игры.

Перезаклад на будущее:

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

Творите, делитесь, продавайте. Не демпенгуйте, ведь ваш труд стоит денег. Спасибо за внимание.

Страница игры в Steam: http://store.steampowered.com/app/391140/Blastoff/

Пара видосиков:

https://www.youtube.com/watch?v=Ks1T_zpQpZw

https://www.youtube.com/watch?v=Uh4m7CKBaAE

Показать полностью 5
[моё] Gamedev Indiedev Delphi Steam Длиннопост
31
d1kssS
7 лет назад

Мудрим sql запросы⁠⁠

Здравствуйте, Уважаемые Пикабутяне. Начал осваивать программирование и начал это делать со среды Delphi 7 (По принципу от простого к сложному). Сейчас работаю над созданием приложения "Электронный кошелек". С помощью таблиц Paradox создал БД и хочу реализовать это через SQL-запросы. В таблице transaction 2-столбец это uid(очепятка на скрине)

Реализовав запрос на проверку существующего логина в БД, приступил к реализации главного окна.

Теперь, встал на этапе формирования самого запроса. Логика должна быть такова: При авторизации из поля(edit) "Login" запрос должен проверить есть ли в таблице такой логин, далее(в таблице users у каждого логина есть свой uid) по uid вывести поля из таблицы кошельки(wallet_name), а из "кошельков" по тому же полю историю платежей(trans). И далее выводить ее в DBGrid.

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

Вот собственно, сам запрос.

Прошу знающих помочь. Я думал, через какие-либо операторы можно удалить, но ничего путного не нашел

Показать полностью 4
[моё] SQL Delphi Длиннопост
51
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии