Меня часто радовало то что в паскале обязательно объявлять переменные в начале функции, это здорово помогает при ее переводе на ассемблер, но еще больше меня это раздражало, так как отнимает дополнительное время и вынуждает создавать кашу объявлений. Ориентироваться в таком коде сложнее, а не проще, потому я сделал возможность объявлять переменные по сишному, в любом месте.
- Код: Выделить всё
string s := 'hello!!';
for int i := 0 to 100 do
Несколько лет назад я начал программировать языке python, к хорошему быстро привыкаешь... и естественно в паскале частые begin и end, постепенно начали казаться мусором, потому сделал чтоб do или then вместе с bigin и end можно было заменить просто двоеточием
- Код: Выделить всё
if pos < 0:
f['experience']:= 0;
f['premium_exp']:= Now + 7 days;
else:
spacecraft_presets['parentid'][nid] := pos;
spacecraft_presets.Save;
for i := 0 to 100:
f+=1;
hh+=i;
Result := fs['level'];
Конечно-же иногда не достаточно операторов, и вообще в одних документах нужны одни операторы, а в других другие, потому сделал возможность положить в operators.ini указать какие у нас будут дополнительные операторы и какую функцию они будут вызывать.
- Код: Выделить всё
|| COr
&& CAnd
== Equal
!= NotEqual
<| Less
|> Greater
<|= LessOrEqual
|>= GreaterOrEqual
from ItemsFrom
. join
ну и конечно-же их можно использовать в тех файлах которые лежат в одном директории с operators.ini
- Код: Выделить всё
function GetShopItems(AVKUserId: int64): ansistring;
begin
int uid:=vk_users['vk_userid'].ItemIndex(AVKUserId); // Определяем внутренний id игрока по vkid
if uid < 0 then exit; // Если данного игрока в базе нет - выходим
// В iUserModels записываем список моделей кораблей которые уже есть у играка
TIntCol iUserModels := spacecraft_presets['modelid'].ItemsI(ids(spacecraft_presets['parentid'] == uId && spacecraft_presets['_del'] == 0));
with SpacecraftShop do
begin
// в iCanBey составляем список пресетов кораблей на которые у ирока достаточно серебра, золота и опыта
TBoolCol iCanBey := experiencePrice <|= vk_users['experience'][uid]
&& silverPrice <|= vk_users['silver'][uid]
&& goldenPrice <|= vk_users['gold'][uid];
// формируем строку ответа, в цикле добавляем параметр каждого корабля из магазина
int iLoop := 0;
for spacecraft_presets.pos in shopItems:
spacecrafts.pos := spacecraft_presets['modelid']; // Номер модели корабля
boolean iBought := spacecrafts.pos in iUserModels;// в iBought определяем куплена-ли уже данная модель
Result += spacecraft_presets.pos . ';' // Номер пресета
. (iCanBey[iLoop] and not iBought) . ';' // Доступен-ли для покупки
. spacecrafts['fraction'] . ';' // фракция
. experiencePrice[iLoop] . ';' // Стоимость в опыте
. silverPrice[iLoop] . ';' // Стоимость в серебре
. goldenPrice[iLoop] . ';' // Стоимость в золоте
. spacecrafts['maxspeed'] . ';' // Максимальная скорость
. spacecrafts['size'] . ';' // Длина
. spacecrafts['health'] . ';' // Общее hp корабля
. spacecrafts['shield_mod'] . ';' // hp щита
. iBought . ';' // Куплен
. spacecraft_presets['title'] . ';' // Название
. spacecraft_presets['description'] . '~'; // Описание
iLoop+=1;
end;
end;
Ну да, еще иногда к какой-то величине нужно, например к времени нужно добавить какую-то величину, например время, чтоб лишний раз не считать можно сделать так предварительно задать константы юнитам времени
- Код: Выделить всё
const
Week = 7;
Weeks = 7;
Day = 1;
Days = 1;
Hour = Day/24;
Minute = Hour/60;
Second = Minute/60;
MiliSecond = Second/1000;
Hours = Day/24;
Minutes = Hour/60;
Seconds = Minute/60;
MiliSeconds = Second/1000;
а потом писать так fDataTime += 1hour+23Minutes или fDataTime += 2 hourі + 1 Minute препроцессор сам перемножит
- Код: Выделить всё
function Get_User_Info(AVkId: int64): ansistring;
begin
with vk_users:
pos:=vk_users['vk_userid'].ItemIndex(AVKId);
if pos < 0:
pos:=additem;
f['template'] := 'vk_users';
f['vk_userid'] := AVKId;
f['level'] := 0;
f['gold'] := 200;
f['silver'] := 20000;
f['experience']:= 0;
f['premium_exp']:= Now + 7 weeks;
else:
Save;
int nid := spacecraft_presets.addClone(16);
spacecraft_presets['parentid'][nid] := pos;
spacecraft_presets.Save;
Result := fs['level']+';'
+ fs['gold']+';'
+ fs['silver']+';'
+ fs['experience']+';'
+TimeToStr(fs['premium_exp']);
end;
Добавлено спустя 12 минут:
Вот собственно..
Данный вариант будет обрабатывать только те файлы, рядом с которыми в папке лежит operators.ini
Сам препроцессор нужно положить в одну папку с ppcx64 и в лазарусе указать его как компилятор или заменить fpc