PDA

Просмотр полной версии : страшнокриво реализованная функция перевода транслита + разное


supernewbie
07.09.2010, 22:14
;)

Breadfan
07.09.2010, 22:58
Все фигня :) смори как нада!!))
const
MyFileName = 'c:\tst\trans.txt'; // в файле - таблица соответствий в формате CH=Ч
var
skip:boolean;
i:integer;
a,c,d,e:string; //а - для теста, в c - тестовая строка, е - строка для определения двухбуквенных обозначений
trans: TStringList;
b:integer;
function GetValue(ValName: string): string;
begin
result:=trans.Values[ValName];
end;
procedure Init; //Вызывается при включении скрипта
begin
trans:=TStringList.Create;
try
trans.LoadFromFile(MyFileName);
except// если ошибка, не обращаем внимание
end;
a:='PrImEr tranSlita';
a:=a+' '; // хз почему - но для верного определения двубуквенных символов и их преобразования - надо пробел прибавить :) не вникал....
c:='';
d:='';
skip:=false;
for i:=1 to (length(a))do begin
e:='';
if not skip then d:=GetValue(Copy(a,i,1));
skip:=false;
if (i<(length(a))-1)then e:=GetValue(Copy(a,i,2));
if (e<>'') then begin
d:=e;
skip:=true;
end;
if ((ord(Copy(a,i,1)))>64) and ((ord(Copy(a,i,1)))<91) then begin // and (d<>e)
d:=Uppercase(d); //проверки на лоу аппер кейз
end;
if not skip then begin
c:=c+d;
end;
end;
SendMsg(a+' ---- >>> '+c);
end;
procedure Free;
begin
end;
begin
end.
Кусок таблички преобразований: =
l=л
o=о
t=т
i=и
n=н
s=с
ch=ч
e=е
k=к
o=о
g=г
p=п
r=р
b=б
z=з
u=у
m=м
'=ь
ja=я
bl=ы
a=а
08.09.2010 02:16:34 Script: PrImEr tranSlita ---- >>> ПрИмЕр транСлита
Переделать в вариант "кириллица в транслит" - точно таким же образом, меняется лишь таблица и коды символов в условии перевода "if ((ord(Copy(a,i,1)))>64) and ((ord(Copy(a,i,1)))<91) then"
ЗЫ: пишу без клиента, так что все в блоке инит. Сделал пример "транслит в кириллицу".

ЗЗЫ: чето затеи у тебя постоянно глобальные какие-то, ты там что - на коленке Скайнет мастеришь чтоль? :D

supernewbie
08.09.2010, 03:27
дальше поехали;

есть мой x y z
есть x y z объекта

из этих данных надо сделать рассчет того, как по x y z должен ускорится объект, чтобы отлететь от меня

Добавлено через 1 минуту
воощем была мысль

мой x - обж x;

мой y - обж y;

и вот на эти разницы ускорять объект, но получается что если я стою близко - ускарение будет минимально, а если объект далеко то слишком сильным

Breadfan
08.09.2010, 03:29
вот только из этих данных - ниче не выдет :) как минимум нехватает новых координат объекта + скорости...т.е. надо: x\y\z(0) - начальные координаты во время 0, x\y\z(1) - координаты во время - t(время), а далее все просто - из координат получаешь путь (S), исходя из t - получаешь ускорение.

supernewbie
08.09.2010, 03:37
да не скажи, эти ребята по углу определяли
косинус = x ускарения
синус = у ускарения

и ускаряли на синус и косинус

Добавлено через 34 секунды
все-таки как-то можно я думаю сделать тоже самое, но основываясь на координатах

Добавлено через 3 минуты
Actor.Angle($PLAYER_ACTOR) = 30@
wait 250
04C4: store_coords_to 5@ 6@ 7@ from_actor $PLAYER_ACTOR with_offset 0.0 10@ -1.0
4@ = 150.0
02F6: 5@ = cosine 30@ // (float)
02F7: 6@ = sine 30@ // (float)
006B: 5@ *= 4@ // (float)
006B: 6@ *= 4@ // (float)
5@ *= -1.0
083C: set_actor $PLAYER_ACTOR velocity_in_direction_XYZ 5@ 6@ 150.0

Breadfan
08.09.2010, 03:45
неа, основывая лишь на координатах и углах - не узнать ускорение, только путь...ведь один и тот же путь объект может пройти и за секунду и за десять, то есть не имея в начальных данных скорости - не можем...кроме того - каков характер движения - равномерный (s=vt) или равноускореный