goto - с любимыми не расставайтесь, или break не тащит

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Re: goto - с любимыми не расставайтесь, или break не тащит

Сообщение Сквозняк » 06.12.2020 22:58:32

runewalsh писал(а):Покажи пример, именно рабочий код, который, используя функцию CITALNIK, фильтрует из файла
Код: Выделить всё
$name='werewolf'
$hit_points='500'
$weapon='claws'

значения name и weapon.

Зачем делать именно наме и веапон, если есть готовый тестовый полигон novellotyk-1.0.2 с остросюжетной демкой, которую мало кто может пройти без подсказок, или не расстроиться в случае проигрыша - "догони меня кирпич". https://sourceforge.net/projects/novellotyk/files/1.0.0/ В файле dvizok.pp содержится процедура использующая читальник. Отложите в сторону печеньки, чай и сухарики и читайте код:
Код: Выделить всё
PROCEDURE ZAGRUZKA_SOHRANKI;
CONST
KOLP=100;
LIMIT=10000000;
VAR
S5: ARRAY OF SHORTSTRING;
Z5: ARRAY OF ANSISTRING;
Q3: BYTE;
Q2,W2,E2,R2,T2,Y2: LONGINT;
Q64,W64: INT64;
Q364:M_3_64;
LABEL
100;
BEGIN
SETLENGTH (S5,KOLP);
SETLENGTH (Z5,KOLP);
WRITELN('Читается файл '+IMJA_FAILA_SOHRANKI);
S5[1]:='NOMER_SCENY='+#39;
S5[2]:='slucainyi_identifikator_igry='+#39;
S5[3]:='RAZRESENIE='+#39;
S5[4]:='VERTIKALJNAJA_SINHRINIZACIJA='+#39;
//S5[5]:='ZAPUSTITJ_IGRU3='+#39;  //Не будем это сохранять и загружать,
//S5[6]:='PRODOLZITJ_IGRU3='+#39; //иначе игра может запуститься сама!
S5[7]:='SUNDUK3='+#39;
S5[8]:='TYK_PO_MENJUHE3='+#39;
S5[9]:='TAIMER64='+#39;
S5[10]:='TAIMER_PR64='+#39;
S5[11]:='TAIMER_SEK64='+#39;
S5[12]:='TAIMER_SEK_PR64='+#39;
S5[13]:='TYK_PO_PULJTU3='+#39;
S5[14]:='TYK_PO_HELPU3='+#39;
S5[15]:='GROMKOSTJ1='+#39;
S5[16]:='NACINALJNIK64='+#39;
S5[17]:='POD_MENJUHOI='+#39;
S5[18]:='MASSIV='+#39;
S5[19]:='RAMKI='+#39;
S5[20]:='ALTSRIFT='+#39;
S5[21]:='PEKUNDY_SCAS='+#39;
S5[22]:='PEKUNDY_TOGDA='+#39;
S5[23]:='ODEVALJNIK3='+#39;
S5[24]:='JACEIKA='+#39;
S5[25]:='JACEIKA_HVATALJNIKA='+#39;
S5[26]:='JACEIKA_HVATALJNIKA_PR='+#39;
S5[27]:='TEKUSCAJA_VKLADKA3='+#39;
S5[28]:='AKTIVNAJA_JACEIKA='+#39;
S5[29]:='GROMKOSTJ_M1='+#39;
S5[30]:='AKTIVNAJA_PINKTOGRAMMA='+#39;
S5[31]:='RAZMER_TEKSTUR='+#39;



IF CITALNIK(IMJA_FAILA_SOHRANKI,S5,Z5,LIMIT)=FALSE THEN BEGIN
                                                        WRITELN('Не удалось прочитать файл '+IMJA_FAILA_SOHRANKI);
                                                        GOTO 100;
                                                        END;
IF Z_L_2(Z5[1],1,Q364)>1 THEN NOMER_SCENY:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[2],2,Q364)>1 THEN slucainyi_identifikator_igry:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[3],3,Q364)>1 THEN RAZRESENIE:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[4],4,Q364)>1 THEN VERTIKALJNAJA_SINHRINIZACIJA:=BOLATRUI(Z5[Q364[3]]);
//IF Z_L_2(Z5[5],5,Q364)>1 THEN ZAPUSTITJ_IGRU3:=F_VAL(Z5[Q364[3]]);  //Не будем это сохранять и загружать,
//IF Z_L_2(Z5[6],6,Q364)>1 THEN PRODOLZITJ_IGRU3:=F_VAL(Z5[Q364[3]]); //иначе игра может запуститься сама!
IF Z_L_2(Z5[7],7,Q364)>1 THEN SUNDUK3:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[8],8,Q364)>1 THEN TYK_PO_MENJUHE3:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[9],9,Q364)>1 THEN TAIMER64:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[10],10,Q364)>1 THEN TAIMER_PR64:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[11],11,Q364)>1 THEN TAIMER_SEK64:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[12],12,Q364)>1 THEN TAIMER_SEK_PR64:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[13],13,Q364)>1 THEN TYK_PO_PULJTU3:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[14],14,Q364)>1 THEN TYK_PO_HELPU3:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[15],15,Q364)>1 THEN GROMKOSTJ1:=F_VAL_V(Z5[Q364[3]]);
IF Z_L_2(Z5[16],16,Q364)>1 THEN NACINALJNIK64:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[17],17,Q364)>1 THEN BEGIN //ВОТ ТАК ЗАГРУЖАЮТСЯ РАЗЛИЧНЫЕ МАССИВЫ И СТРУКТУРЫ ДАННЫХ, В ТОМ ЖЕ ПОРЯДКЕ ЧТО И СОХРАНЯЛИСЬ
  POD_MENJUHOI.KOLVO_KVADRATOSHEM3:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.TEKUSCAJA_KVADRATOSHEMA:=Z_VAL_2(Z5[Q364[3]],Q364);
  FOR Q2:=1 TO 17 DO BEGIN
      W2:=Z_VAL_2(Z5[Q364[3]],Q364);
      POD_MENJUHOI.STROKA17[Q2]:='';
      IF W2>0 THEN FOR E2:=1 TO W2 DO
        POD_MENJUHOI.STROKA17[Q2]:=POD_MENJUHOI.STROKA17[Q2]+CHR(Z_VAL_2(Z5[Q364[3]],Q364));
                     END;
  SETLENGTH(POD_MENJUHOI.KVADRATY,POD_MENJUHOI.KOLVO_KVADRATOSHEM3+1); //МАССИВ "РЕЗИНОВЫВЙ",
                          // ПОЭТОМУ ПЕРЕД ЗАПИСЬЮ НУЖНО УСТАНОВИТЬ ЕГО ДЛИНУ
  FOR Q2:=1 TO POD_MENJUHOI.KOLVO_KVADRATOSHEM3 DO BEGIN
    POD_MENJUHOI.KVADRATY[Q2].KOLVO_KVADRATOV:=Z_VAL_2(Z5[Q364[3]],Q364);
    W2:=POD_MENJUHOI.KVADRATY[Q2].KOLVO_KVADRATOV;
    SETLENGTH(POD_MENJUHOI.KVADRATY[Q2].X1,W2+1);
    SETLENGTH(POD_MENJUHOI.KVADRATY[Q2].Y1,W2+1);
    SETLENGTH(POD_MENJUHOI.KVADRATY[Q2].X2,W2+1);
    SETLENGTH(POD_MENJUHOI.KVADRATY[Q2].Y2,W2+1);
    IF W2>0 THEN BEGIN   
      FOR E2:=1 TO W2 DO POD_MENJUHOI.KVADRATY[Q2].X1[E2]:=Z_VAL_2(Z5[Q364[3]],Q364);
      FOR E2:=1 TO W2 DO POD_MENJUHOI.KVADRATY[Q2].Y1[E2]:=Z_VAL_2(Z5[Q364[3]],Q364);
      FOR E2:=1 TO W2 DO POD_MENJUHOI.KVADRATY[Q2].X2[E2]:=Z_VAL_2(Z5[Q364[3]],Q364);
      FOR E2:=1 TO W2 DO POD_MENJUHOI.KVADRATY[Q2].Y2[E2]:=Z_VAL_2(Z5[Q364[3]],Q364);
                 END;
                                                   END;
  POD_MENJUHOI.FLAG1:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.FLAG2:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.FLAG3:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.FLAG4:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.FLAG5:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.FLAG6:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.FLAG7:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.FLAG8:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.FLAG9:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.FLAG10:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.CASY1:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.CASY2:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.CASY3:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.CASY4:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.TEKUSCII_KVADRAT:=Z_VAL_2(Z5[Q364[3]],Q364);
  POD_MENJUHOI.PROSLYI_KVADRAT:=Z_VAL_2(Z5[Q364[3]],Q364);
                                END;
IF Z_L_2(Z5[18],18,Q364)>1 THEN BEGIN
  W2:=Z_VAL_2(Z5[Q364[3]],Q364); 
  SETLENGTH(MASSIV,W2);
  IF W2>0 THEN FOR Q2:=0 TO W2-1 DO BEGIN
    E2:=Z_VAL_2(Z5[Q364[3]],Q364);
    SETLENGTH(MASSIV[Q2].Q3,E2);
    IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].Q3[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
    E2:=Z_VAL_2(Z5[Q364[3]],Q364);
    SETLENGTH(MASSIV[Q2].W3,E2);
    IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].W3[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
    E2:=Z_VAL_2(Z5[Q364[3]],Q364);
    SETLENGTH(MASSIV[Q2].E3,E2);
    IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].E3[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
    E2:=Z_VAL_2(Z5[Q364[3]],Q364);
    SETLENGTH(MASSIV[Q2].Q2,E2);
    IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].Q2[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
    E2:=Z_VAL_2(Z5[Q364[3]],Q364);
    SETLENGTH(MASSIV[Q2].W2,E2);
    IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].W2[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
    E2:=Z_VAL_2(Z5[Q364[3]],Q364);
    SETLENGTH(MASSIV[Q2].E2,E2);
    IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].E2[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
    E2:=Z_VAL_2(Z5[Q364[3]],Q364);
    SETLENGTH(MASSIV[Q2].Q64,E2);
    IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].Q64[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
    E2:=Z_VAL_2(Z5[Q364[3]],Q364);
    SETLENGTH(MASSIV[Q2].W64,E2);
    IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].W64[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
    E2:=Z_VAL_2(Z5[Q364[3]],Q364);
    SETLENGTH(MASSIV[Q2].E64,E2);
    IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].E64[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
    E2:=Z_VAL_2(Z5[Q364[3]],Q364);
    SETLENGTH(MASSIV[Q2].X1,E2);
    IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].X1[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
    E2:=Z_VAL_2(Z5[Q364[3]],Q364);
    SETLENGTH(MASSIV[Q2].Y1,E2);
    IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].Y1[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
    E2:=Z_VAL_2(Z5[Q364[3]],Q364);
    SETLENGTH(MASSIV[Q2].Z1,E2);
    IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].Z1[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
    E2:=Z_VAL_2(Z5[Q364[3]],Q364);
    SETLENGTH(MASSIV[Q2].A5,E2);
    IF E2>0 THEN FOR R2:=0 TO E2-1 DO BEGIN
    T2:=Z_VAL_2(Z5[Q364[3]],Q364);
    MASSIV[Q2].A5[R2]:='';
    IF T2>0 THEN FOR Y2:=1 TO T2 DO MASSIV[Q2].A5[R2]:=MASSIV[Q2].A5[R2]+CHR(Z_VAL_2(Z5[Q364[3]],Q364));
                                      END;
    E2:=Z_VAL_2(Z5[Q364[3]],Q364);
    SETLENGTH(MASSIV[Q2].S5,E2);
    IF E2>0 THEN FOR R2:=0 TO E2-1 DO BEGIN
    T2:=Z_VAL_2(Z5[Q364[3]],Q364);
    MASSIV[Q2].S5[R2]:='';
    IF T2>0 THEN FOR Y2:=1 TO T2 DO MASSIV[Q2].S5[R2]:=MASSIV[Q2].S5[R2]+CHR(Z_VAL_2(Z5[Q364[3]],Q364));
                                      END;
                                    END;
                                END;
IF Z_L_2(Z5[19],19,Q364)>1 THEN RAMKI:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[20],20,Q364)>1 THEN ALTSRIFT:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[21],21,Q364)>1 THEN PEKUNDY_SCAS:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[22],22,Q364)>1 THEN PEKUNDY_TOGDA:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[23],23,Q364)>1 THEN ODEVALJNIK3:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[24],24,Q364)>1 THEN BEGIN
   E2:=Z_VAL_2(Z5[Q364[3]],Q364);
   IF E2>0 THEN FOR R2:=1 TO E2 DO KUKU2(Z5[24],JACEIKA[R2],Q364);
                                END;
IF Z_L_2(Z5[25],25,Q364)>1 THEN BEGIN
   E2:=Z_VAL_2(Z5[Q364[3]],Q364);
   IF E2>0 THEN FOR R2:=1 TO E2 DO KUKU2(Z5[25],JACEIKA_HVATALJNIKA[R2],Q364);
                                END;
IF Z_L_2(Z5[26],26,Q364)>1 THEN BEGIN
   E2:=Z_VAL_2(Z5[Q364[3]],Q364);
   IF E2>0 THEN FOR R2:=1 TO E2 DO KUKU2(Z5[26],JACEIKA_HVATALJNIKA_PR[R2],Q364);
                                END;
IF Z_L_2(Z5[27],27,Q364)>1 THEN TEKUSCAJA_VKLADKA3:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[28],28,Q364)>1 THEN AKTIVNAJA_JACEIKA:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[29],29,Q364)>1 THEN GROMKOSTJ_M1:=F_VAL_V(Z5[Q364[3]]);
IF Z_L_2(Z5[30],30,Q364)>1 THEN AKTIVNAJA_PINKTOGRAMMA:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[31],31,Q364)>1 THEN RAZMER_TEKSTUR:=F_VAL(Z5[Q364[3]]);



100:
ZAGRUZITJ_IGRU:=0;
END;
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

Re: goto - с любимыми не расставайтесь, или break не тащит

Сообщение runewalsh » 06.12.2020 23:13:07

Ну вот я в это, собственно, и хотел ткнуть: фильтруемым ключам нужно дописывать знак «равно» и апостроф, зачем — науке не известно.
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 578
Зарегистрирован: 27.04.2010 00:15:25

Re: goto - с любимыми не расставайтесь, или break не тащит

Сообщение Seenkao » 06.12.2020 23:27:50

Смысл вашего спора?
Это два разных кода. Один для нативного использования, второй посредством использования библиотек LCL и подобных. Goto используется в обоих вариантах!!!

Не забываем: Break, Continue а зачастую и Exit - это тот же GoTo. И как бы не хотелось признавать, ни один код не ушёл от использования GoTo.

Добавлено спустя 8 минут 59 секунд:
runewalsh писал(а):фильтруемым ключам нужно дописывать знак «равно» и апостроф, зачем — науке не известно.

то есть, ты считаешь, что ключами не пользуешься? Точнее всё из воздуха взялось и в коде работает всё само по себе? :)

Добавлено спустя 6 минут 1 секунду:
Сквозняк, я думаю стоит прекратить спор. Не все занимаются нативными приложениями и уж далеко не всем понять смысл их разработки. Большая часть привыкла к использованию того, что предоставляют.
Seenkao
энтузиаст
 
Сообщения: 502
Зарегистрирован: 01.04.2020 03:37:12

Re: goto - с любимыми не расставайтесь, или break не тащит

Сообщение Сквозняк » 06.12.2020 23:59:27

runewalsh писал(а):Ну вот я в это, собственно, и хотел ткнуть: фильтруемым ключам нужно дописывать знак «равно» и апостроф, зачем — науке не известно.

Это только сишникам неизвестно зачем нужно писать := когда можно писать = для краткости. Это читаемый людьми формат, потому должен быть красивым и логичным. Получается унификация записей в сохраняющей и загружающей процедурах. Строчки копипастятся из одной в другую и минимально дорабатываются. Если сокращать знаки в одной процедуре, то надо делать это и в другой, иначе будет только лишняя нагрузка на программиста.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

Re: goto - с любимыми не расставайтесь, или break не тащит

Сообщение Seenkao » 07.12.2020 00:25:30

Сквозняк, лично я использую константы и уже через константы в массивы. Точнее массивы, через константы.
Или и то и другое... )))
Seenkao
энтузиаст
 
Сообщения: 502
Зарегистрирован: 01.04.2020 03:37:12

Re: goto - с любимыми не расставайтесь, или break не тащит

Сообщение runewalsh » 07.12.2020 07:12:30

У тебя в «загружающей процедуре» ключи выглядят так:
Код: Выделить всё
S5[17]:='POD_MENJUHOI='+#39;

Зачем каждый раз дописывать ='? Это же работа читающей процедуры их интерпретировать. По-человечески было бы так:
Код: Выделить всё
S5[17]:='POD_MENJUHOI';

К тому же твоя процедура вернёт значение с ПОСЛЕДНИМ апострофом, но без ПЕРВОГО, то есть по
Код: Выделить всё
$POD_MENJUHOI='abc'

на фильтр
Код: Выделить всё
S5[17]:='POD_MENJUHOI='+#39;

выдаст
Код: Выделить всё
abc'

(внимание на последний апостроф и отсутствие первого). Это та самая «чушь».
Это читаемый людьми формат

Ты же только что был против читаемости людьми (арабами и евреями), да и пишущий 39 вместо ord('''') в принципе не выглядит шарящим за читаемость.
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 578
Зарегистрирован: 27.04.2010 00:15:25

Re: goto - с любимыми не расставайтесь, или break не тащит

Сообщение Сквозняк » 07.12.2020 11:48:54

runewalsh писал(а):Зачем каждый раз дописывать ='? Это же работа читающей процедуры их интерпретировать.

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

runewalsh писал(а):К тому же твоя процедура вернёт значение с ПОСЛЕДНИМ апострофом, но без ПЕРВОГО, то есть по

И это тоже благо. Управляющие символы в строковой абракадабре - должны быть! В баше и цмд придурки уже досокращались управляющих символов и теперь там наклонные черты нужно экранировать, а при чтении таких команд пересчитывать наклонные палки или экранировать их ещё раз, увеличивая вдвое их длину. И имена файлов с кучей символов читающихся в одной ОС не читаются в другой и нужно вручную их править - а всё из-за того что недоумки смешали код и данные. Человеки показали людям как не нужно сокращать управляющие символы, спасибо им за это - постараемся быть умнее их и не повторять их ошибки. (Ну типа как при чтении Писания: смотрите люди на каки сотворяемые человеками и не будьте такими плохими)

runewalsh писал(а):(внимание на последний апостроф и отсутствие первого). Это та самая «чушь».


Это полученное экспериментально свидетельство несформированности мозга у недавно сотворённых гибридов. Например, европейцев до сих пор штырит без кокса - молодая раса, дети с глюками... Если ты пораскинешь мозгами, то сможешь убедиться что первый апостроф уже не нужен и затрудняет чтение, а вот последний должен указать читающим функциям что звиздец наступил и данные кончились. Фраза "КОНЕЦ" в конце фильма ведь тебя наверно не раздражает? Так вот, а фразы "НАЧАЛО" в фильмах обычно нет. Так и тут, конец процесса надо обозначить, а начало таким же маркером обозначать не есть хорошо - потом надо предпринимать усилия чтобы не спутать начало с концом.
runewalsh писал(а):Ты же только что был против читаемости людьми (арабами и евреями)


В Библии их людьми стесняются называть, а кто я такой чтобы спорить с Библией? В Библии пишут "мужи израильские", ещё какие-то мужи и прочие определения, а людьми, когда в их толпу попадает кто-то из других народов. Люди и человеки это просто разные народы, до тебя это не доходит. Перечитай шестую главу Книги Бытия, там в нескольких предложениях описаны люди, человеки, исполины, сыны Божии.
runewalsh писал(а):да и пишущий 39 вместо ord('''') в принципе не выглядит шарящим за читаемость.

Это ты не шаришь за читаемость. Процедурный код заточен на удобство писания и читания в редакторе fp а там есть окошко с таблицей ASCII символов, нет необходимости лишний раз вызывать функцию и прописывать все скобочки и экранирования. Нафейхуа это делать, если создатели редактора обо всём позаботились? Ну а если а лазарусе нет в быстром доступе такого окошка, то это вопрос к его криворуким разработчикам копипастящим из дельфей и боящихся сделать то, чего там нет.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

Re: goto - с любимыми не расставайтесь, или break не тащит

Сообщение Сквозняк » 27.12.2020 04:40:15


Я столкнулся с проблемой многократного прыжка персонажа, то есть при нажатии одной клавиши игрок прыгает, и при повторном нажатии игрок прыгает не с земли, а с воздуха. Я считаю, что для решения этой проблемы нужна проверка на нахождение игрока на земли. Другими словами: игрок может прыгать только тогда, когда он на земле, и когда нажата клавиша для прыжка. Сделать это легко, если у твоего персонажа нет анимации (текущего кадра, переключения спрайтов). Но в моей игре я уже добавил анимацию... Возможно ли реализовать прыжок при таких условиях? Буду рад помощи!

Вот код моего удара в прыжке(4 кадра анимации):

Код: Выделить всё
if (Keyboard::isKeyPressed(Keyboard::W) and Keyboard::isKeyPressed(Keyboard::Q)) //vertical jump + attack
    {
      if (position.y*SCALE >= 400)
      {
        if (CurrentJumpFrame > 3.5 or !(Keyboard::isKeyPressed(Keyboard::W)))
        {
          if (onGround)
          {
            std::cout << " На земле ";
            sprite_player_1_move.setTextureRect(IntRect(0, 480, 270, 480));
            velocity.y = 0;
            CurrentJumpFrame = 0;
          }
          else
          {
            std::cout << " Конец прыжка! ";
            sprite_player_1_move.setTextureRect(IntRect(270, 0, 270, 480));
            velocity.y = 0.4*time;
          }
        }
        else {
          std::cout << " Прыжок! ";
          CurrentJumpFrame += player_1_speed * time;
          sprite_player_1_move.setTextureRect(IntRect(int(CurrentJumpFrame) * 270, 0, 270, 480));
          velocity.y = -0.2*time;
          std::cout << CurrentJumpFrame << std::endl;
        }
        std::cout << sprite_player_1_move.getTextureRect().width << std::endl;
      }
    }

Звиздец, какую нечитаемую логику люди без гото пишут про прыжки персонажа (логично прыжки прыжками и программировать, если уметь гото пользоваться) а потом сами не понимают как это работает... В одной куче 4 if а потом 2 else и уже не видно к чему они относятся, надо мучительно пересчитывать (макароны в пачке) ифы и блоки чтобы выяснить что к чему относится. С гото было бы несколько отсечений выполнения при каких-то условиях, а не большущая формула плохо помещающаяся в памяти людей. А если такой код разрастётся в 4 раза, то без гото превратится слипшуюся нечитаемую лапшу!

Добавлено спустя 6 минут 13 секунд:
Вот код проверки, находится ли персонаж на земле (Но я его не использую, т.к. не знаю куда его впихнуть учитывая анимацию):

:mrgreen:
Ну естественно, в такую формулу что-то впихнуть и не поломать, надо постараться.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

Re: goto - с любимыми не расставайтесь, или break не тащит

Сообщение Seenkao » 27.12.2020 09:58:51

zub писал(а):https://bugs.freepascal.org/view.php?id=37911

недавно обратил внимание. Уже давно всё сделано и в настройках Lazarus вы можете отключить себе GoTo, раз он вам так не нравится.
Seenkao
энтузиаст
 
Сообщения: 502
Зарегистрирован: 01.04.2020 03:37:12

Пред.

Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

Рейтинг@Mail.ru