forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Синтаксис в блице (http://forum.boolean.name/showthread.php?t=5324)

AndruXa 16.12.2007 22:19

Синтаксис в блице
 
Вопрос вобщем-то адресован Diplomaty, который частенько утверждает, что я не знаю синтаксис. Вы спросите, почему я не задал его в личку, да потомучто большинство новичков с этим сталкиваются, и им это тоже будет полезно. Так вот, я так задумался а ведь действительно синтаксис-то у меня хромает, вследствие с этим у меня появился ряд вопросов:
1)Чем чревато использование большого количества глобала
2)Какое количество условий лучше использовать при написании проги, как можно меньше, или блицу без разницы, ато зачастую у меня 80% кода - это условия
3)Ну и прямой вопрос по условиям: вот 2 случая, оба работают, но какой все-таки будет грамотней, и какая разница между ними?
Код:

If ... Then
If...
...
Endif
EndIf

Код:

If ...
If...
...
Endif
EndIf


Bagration 16.12.2007 22:27

Re: Синтаксис в блице
 
Цитата:

Сообщение от AndruXa
Код:

If ... Then
If...
...
Endif
EndIf

Код:

If ...
If...
...
Endif
EndIf


If a=1 then
Deistvie1
If b=2 then
Deistvie2
End If
End If
старайся делать табы, легче будет понять какое условие куда входит.

AndruXa 16.12.2007 22:32

Re: Синтаксис в блице
 
Цитата:

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

Diplomat 16.12.2007 22:51

Re: Синтаксис в блице
 
Цитата:

1)Чем чревато использование большого количества глобала
Тормозами. Если ты создашь 5к глобальных переменных- результат будет заметен.
Цитата:

2)Какое количество условий лучше использовать при написании проги, как можно меньше, или блицу без разницы, ато зачастую у меня 80% кода - это условия
"Я всё понял. Это неправильные пчёлы. И они делают неправильный код"(с).
80% кода НЕ МОЖЕТ состоять из ветвлений IF...THEN. Если 80% кода- это ветвления, значит тебе за одну парту с Кристаллом.
Само же ветвление IF...THEN выполняется как правило очень быстро.
Цитата:

Тоесть разница лишь в удобстве?
Выйди летом на улицу голым. Что в одежде, что без нее- совсем не холодно. Разве что кошелек без наличия одежды и карманов носить неудобно.
То есть разница лишь в удобстве? (с)

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

jimon 16.12.2007 23:19

Re: Синтаксис в блице
 
Diplomat
если я пишу коментарии в коде только там где явно мутное место
то это плохо или нет ?

Diplomat 16.12.2007 23:25

Re: Синтаксис в блице
 
Цитата:

если я пишу коментарии в коде только там где явно мутное место
то это плохо или нет ?
Не знаю, я тоже так делаю. ))

ABTOMAT 16.12.2007 23:54

Re: Синтаксис в блице
 
Цитата:

Сообщение от jimon
Diplomat
если я пишу коментарии в коде только там где явно мутное место
то это плохо или нет ?

А я наоборот пишу камменты вообще везде. Делаю, вообще, так:
сначала в каменатх излагаю что я хочу сделать, потом пишу строчку(и) кода, где делается то, что написано в каменте. Зато сразу понятно, какая строка что делает, а если место совсем мутное, то подробно тоже поясняю как я его собираюсь преодолеть. Хотя, говорят, от обилия каментов компиляция становится очень долгой...
Читать чужой код (в основном Leito'вский) я пытался, но так и не разобрал ничего, хоть убей...

AndruXa 16.12.2007 23:59

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

HolyDel 17.12.2007 00:08

Re: Синтаксис в блице
 
Оптимизация:

1) Не используйте строки для обозначения констант!
Например
select a$
case "run"
case "dead"
case "maa"
можно заменить на
const run=1
const dead=2
const maa=3
select a
case run
case dead
case maa

2) Не создавайте камеру в цикле ))))

3) все текстуры взрывов (спрайтами), или текстуры, в которые будет происходить рендеринг, создавайте с флагом 256

4)двоичный сдвиг рулит! юзайте его, если ето возможно.

alcoSHoLiK 17.12.2007 00:14

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

Код:

A = Input("Введите знаение для A: ")
B = Input("Введите значение для B:")
If(Len(Str(A))=Len(Str(B))):For i=1 To Len(Str(A)):If(Mid(Str(A),i,1)=Mid(Str(B),i,1)):j=j+1:EndIf:Next:If(Len(Str(a))=j):Print"Равны":Else:Print"Не равны":EndIf:EndIf


ABTOMAT 17.12.2007 00:20

Re: Синтаксис в блице
 
alcoSHoLiK, Бугага, жжошь :-D

Bagration 17.12.2007 00:22

Re: Синтаксис в блице
 
Цитата:

Сообщение от HolyDel
Оптимизация:
2) Не создавайте камеру в цикле ))))

ну и вообще ничего не грузить. А кстати двоичный сдвиг это когда вместо a\2 пишут a*0.5? То есть блиц как бы быстрее производит умножение.

jimon 17.12.2007 00:28

Re: Синтаксис в блице
 
ну вот кусок кода из jAqua ... сходу мало че поймешь и мало че не поймешь

Код:

                Local MouseDist# = MouseX()*MouseX()+MouseY()*MouseY()
                Local ImageSize# = 32
               
                If MouseDist > (Radius-ImageSize)*(Radius-ImageSize) And MouseDist < (Radius+ImageSize)*(Radius+ImageSize) Then
                        Enable = 1
                                               
                        AngleRotateDist :+ MouseZSpeed() * Size
                       
                        Rotating = 0
                        If MouseX() > (Radius-ImageSize) And MouseX() < (Radius+ImageSize) And MouseY() < (ImageSize*2) Then
                                If AngleRotateDist < Size Then
                                        Rotating = 1
                                        AngleRotateDist:+RotateSpeed
                                End If
                        End If
                        If MouseY() > (Radius-ImageSize) And MouseY() < (Radius+ImageSize) And MouseX() < (ImageSize*2) Then
                                If (AngleRotateDist + TotalAngleSize) > (90 - Size*2) Then
                                        Rotating = 1
                                        AngleRotateDist:-RotateSpeed
                                End If
                        End If
                       
                        If Rotating = 1 Then
                                AnimateValue(RotateSpeed,RotateSpeedMax,RotateSpeedDelta)
                        Else
                                AnimateValue(RotateSpeed,RotateSpeedMin,RotateSpeedDelta)
                        End If

                       
                        If AngleRotateDist > (90-Size) Then AngleRotateDist = 90-Size
                        If AngleRotateDist < (-TotalAngleSize+Size*2) Then AngleRotateDist = -TotalAngleSize+Size*2
                       
                        AnimateValue(Zoom,ZoomMax,0.02)
                Else
                        Enable = 0
                        AnimateValue(Zoom,ZoomMin,0.02)
                End If
               
                AnimateValue(AngleRotate,AngleRotateDist,Abs((AngleRotate - AngleRotateDist)/10))

                Local x#,y#,a#
                Local mx# = MouseX()
                Local my# = MouseY()


HolyDel 17.12.2007 00:28

Re: Синтаксис в блице
 
Цитата:

А кстати двоичный сдвиг это когда вместо a\2 пишут a*0.5? То есть блиц как бы быстрее производит умножение.
неугадали, батенька.
ето a shl b или a shr b, соответственно сдвиг влево и вправо, соответсуют умножению на два и делению на два целочисленных чисел.

AndruXa 17.12.2007 00:30

Re: Синтаксис в блице
 
Цитата:

А кстати двоичный сдвиг это когда вместо a\2 пишут a*0.5? То есть блиц как бы быстрее производит умножение.
Кстати, у меня какая-то х..ня в блице, когда писал управление колесницей в рпг своем, там короче есть переменная speed# и rotate#
так вот поворот должен уменьшаться с увеличением скорости, ну как это сделать, как все нормальные люди, делением хотел, тоесть поворот разделить на скорость. Запускаю, хопа... 2д грузиться, а вместо 3д черное пространство, это ладно когда делишь на число, там-то заменить умножением мона, а сдесь, вопсчем пришлось создавать еще одну переменную, кот. уменьшается по мере увеличения скорости, и на нее умножать поворот. Может кто нить сталкивался с таким, или это тока у мяня деление в 3д не работает?

HolyDel 17.12.2007 00:32

Re: Синтаксис в блице
 
вот кусок кода из вартич
Код:

                        ;Так скажем, захват зданий
                        If u(t,i,style_)=uns_base
                       
                                If uf(t,i,protected_)>0
                               
                                        If u(t,i,assaulted_)
                                                                               
                                                h=Rnd(1,3)
                                                If h=1
                                                        fas=0
                                                        eas=0
                                                       
                                                        maxasss=0
                                                        For ot=0 To maxteam
                                                                curasss=0
                                                                For oi=1 To ttu(ot)
                                                               
                                                                        If u(ot,oi,assault_) And u(ot,oi,intoENT_)=0
                                                                       
                                                                                If EntityDistance(u(ot,oi,ent_),ent)<40
                                                                                        If dip(ot,t)
                                                                                                fas=fas+1
                                                                                        Else
                                                                                                eas=eas+1
                                                                                                curasss=curasss+1
                                                                                                If curasss>maxasss Then maxasss=curasss:u(t,i,assault_team_)=ot
                                                                                        EndIf
                                                                                EndIf
                                                                               
                                                                        EndIf
                                                                       
                                                                Next
                                                               
                                                        Next
                                               
                                                        If eas<fas-1 Or eas=0
                                                                u(t,i,assaulted_)=0               
                                                        EndIf
                                                EndIf
       
                                                pgrvalue=uf(t,i,cur_protect_)*200.0/uf(t,i,protect_)
                                                spx=uf(t,i,spx_)-100
                                                spy=uf(t,i,spy_)-60
                                               
                                                SetColor tm_color(t,1),tm_color(t,2),tm_color(t,3)       
                                                SetBlend FI_ALPHABLEND                                                                       
                                                For k=0 To pgrvalue-1
                                                        DrawImageEx(gfx_assswirl,spx+k,spy,(k+MilliSecs()*0.03) Mod 12)
                                                Next
                                               
                                                SetColor tm_color(u(t,i,assault_team_),1),tm_color(u(t,i,assault_team_),2),tm_color(u(t,i,assault_team_),3)                                                       
                                                For k=pgrvalue To 199
                                                        DrawImageEx(gfx_assswirl,spx+k,spy,(k+MilliSecs()*0.03) Mod 12)
                                                Next       
                                               
                                                SetColor 255,255,255       
                                                SetBlend FI_LIGHTBLEND
                                                DrawImageEx gfx_assbar,spx,spy
                                                SetBlend FI_ALPHABLEND
                                                       
                                               
                                                uf(t,i,cur_protect_)=uf(t,i,cur_protect_)-1
                                               
                                                If uf(t,i,cur_protect_)<0
                                                        u(t,i,assaulted_)=0
                                                        uf(t,i,cur_protect_)=1
                                                        TransmitUnit(t,i,u(t,i,assault_team_))                                                       
                                                EndIf

                                        Else
                                       
                                                uf(t,i,cur_protect_)=uf(t,i,cur_protect_)+5
                                                If uf(t,i,cur_protect_)>uf(t,i,protect_) Then uf(t,i,cur_protect_)=uf(t,i,protect_)
                                                h=Rnd(1,30)
                                                If h=1
                                                        fas=0
                                                        eas=0
                                                        maxasss=0
                                                        For ot=0 To maxteam
                                                                curasss=0
                                                                For oi=1 To ttu(ot)
                                                               
                                                                        If u(ot,oi,assault_) And u(t,i,into_)=0
                                                                       
                                                                                If EntityDistance(u(ot,oi,ent_),ent)<40
                                                                                        If dip(ot,t)
                                                                                                fas=fas+1
                                                                                        Else
                                                                                                eas=eas+1
                                                                                                curasss=curasss+1
                                                                                                If curasss>maxasss Then maxasss=curasss:u(t,i,assault_team_)=ot
                                                                                        EndIf
                                                                                EndIf
                                                                               
                                                                        EndIf
                                                                       
                                                                Next
                                                               
                                                        Next
                                                       
                                                        If eas>fas+2
                                                                u(t,i,assaulted_)=1                                                               
                                                        EndIf
                                                       
                                                EndIf
                                               
                                        EndIf
                                       
                                EndIf
                               
                        EndIf
                        ;Так скажем обработка гарнизона, когда юнит сидит внутри
                       
                        If u(t,i,into_)
                                PositionEntity ent,EntityX(u(t,i,intoENT_),1),EntityY(u(t,i,intoENT_),1),EntityZ(u(t,i,intoENT_),1)                               
                        EndIf
                       
                        If u(t,i,maxinto_)>0 And t=myteam
                                If u(t,i,nav_time_)>1
                                        packing=0
                                        idut_into=0
                                       
                                        For ot=0 To maxteam
                                                For oi=1 To ttu(ot)
                                                        If u(ot,oi,intoENT_)=ent Then idut_into=idut_into+1
                                                Next
                                        Next
                                       
                                        If idut_into<u(t,i,maxinto_)
                                                For k=1 To ttu(myteam)
                                                        If k<>i And u(myteam,k,sel_) And ((u(t,i,intotype_)=2 And u(myteam,k,style_)<>uns_base) Or u(myteam,k,style_)=uns_solider) Then packing=1
                                                Next
                                                If packing
                                                        current_cur=cur_pack
                                                        If md2
                                                                sx_#=0
                                                                sz_#=0
                                                                cnt=0
                                                                For k=1 To ttu(myteam)
                                                                        If k<>i And u(myteam,k,sel_)
                                                                                If (u(t,i,intotype_)=2 And u(myteam,k,style_)<>uns_base) Or u(myteam,k,style_)=uns_solider And cnt<(u(t,i,maxinto_)-u(t,i,uinto_))
                                                                                        u(myteam,k,intoENT_)=ent
                                                                                        u(myteam,k,intoI_)=i
                                                                                        u(myteam,k,intoT_)=t
                                                                                        u(myteam,k,intoID_)=u(t,i,id_)
                                                                                        sx_#=sx_#+EntityX(u(myteam,k,ent_),1)
                                                                                        sz_#=sz_#+EntityZ(u(myteam,k,ent_),1)
                                                                                        cnt=cnt+1
                                                                                EndIf
                                                                        EndIf
                                                                Next
                                                               
                                                                If cnt>0
                                                                        sx_#=sx_#/Float(cnt)
                                                                        sz_#=sz_#/Float(cnt)
                                                                       
                                                                        MoveUnitTo(t,i,sx_,sz_)
                                                                       
                                                                        If u(t,i,landing_)=0 Then u(t,i,eng_enabled_)=0       
       
                                                                EndIf       
                                                                                                                                                               
                                                        EndIf
                                                       
                                                EndIf
                                               
                                        EndIf
                                       
                                EndIf
                               
                        EndIf


Diplomat 17.12.2007 00:39

Re: Синтаксис в блице
 
Чёрт, вопрос о необходимом количестве каментов меня заинтересовал. ))

Вот примитивная программка, которая приблизительно подсчитывает количество каментов в коде и выводит ориентировочное процентное соотношение строк кода и комментариев. У меня в основном 10-17% комментариев в коде. Бывают подскоки до 30%, но они почти не влияют на результирующую статистику. Анализируя старые программы (ессно без QBASIC и MS VB ) могу заметить, что с годами статистика не меняется.

А у вас как?

Код:

RFile=OpenFile("Имя исходника.bb")

While Eof(RFile)=0
        NLines=NLines+1
        Lne$=ReadLine(RFile)
        For NChar=1 To Len(Lne$)
                Char$=Mid(Lne$,NChar,1)
                If Char$=";" Then
                        NComments=NComments+1
                        Exit
                EndIf
        Next
Wend

CloseFile(RFile)

Print "NUMBER OF LINES: "+NLines
Print "COMMENTED LINES: "+NComments
Print "____________________________"
Print "COMMENTS PART IN CODE: "+ Float(NComments)/Float(NLines)*100.0 +" %"

Print
Print
Print "Press any key to continue..."

WaitKey()

End

_______________
Added:

Цитата:

вот кусок кода из вартич
А-а, убийца! Ты сломал мой мозг! ))

AndruXa 17.12.2007 00:46

Re: Синтаксис в блице
 
Цитата:

А у вас как?
в рпг 4.8%
в шутере 17%
в гонках 8%
Пробовал вставлять документ примерно 10 страниц - 57% - тормозов обнаружено не было да и на скорость компиляции не очень повлияло по крайней мере на глаз

sSwSs 17.12.2007 00:47

Re: Синтаксис в блице
 
мммм.....у меня 14%)))

Crystal 17.12.2007 00:49

Re: Синтаксис в блице
 
У меня всё в функциях.
Выше и ниже функций описываю что она делает
внутри функции над и под процессом описываю что делает.

HolyDel 17.12.2007 00:52

Re: Синтаксис в блице
 
NUMBER OF LINES 14154
COMMENTED LINES 1028
~7.26% комментариев, НО где то, где то 80% из них, ето закоментенный код, дабы не компилился он.

Bagration 17.12.2007 00:54

Re: Синтаксис в блице
 
8 процентов

AndruXa 17.12.2007 00:59

Re: Синтаксис в блице
 
Цитата:

Кстати, у меня какая-то х..ня в блице, когда писал управление колесницей в рпг своем, там короче есть переменная speed# и rotate#
так вот поворот должен уменьшаться с увеличением скорости, ну как это сделать, как все нормальные люди, делением хотел, тоесть поворот разделить на скорость. Запускаю, хопа... 2д грузиться, а вместо 3д черное пространство, это ладно когда делишь на число, там-то заменить умножением мона, а сдесь, вопсчем пришлось создавать еще одну переменную, кот. уменьшается по мере увеличения скорости, и на нее умножать поворот. Может кто нить сталкивался с таким, или это тока у мяня деление в 3д не работает?
так че на мой вопрос-то кто-нибудь ответит?

Diplomat 17.12.2007 01:00

Re: Синтаксис в блице
 
Цитата:

NUMBER OF LINES 14154
Похоже, рекорд Тормоза на максимальное количество строк в одном файле побит с большой силой и жестокостью. )
Эх, у меня больше 6850+ строк в один инклюд запихнуть не получалось. Да и то инклюд не честный: склад функций Беглеца. Все функции разбиты по категориям и свёрнуты средствами ГУИ.
:"(

Цитата:

или это тока у мяня деление в 3д не работает?
Деление работает везде. Не дели на ноль.

AndruXa 17.12.2007 01:04

Re: Синтаксис в блице
 
Цитата:

Деление работает везде. Не дели на ноль.
Блин, во я лохонулся. Вроде алгебру в школе учу...

ЛысыЙ_Чук-Иванчук 17.12.2007 01:25

Re: Синтаксис в блице
 
Цитата:

Сообщение от Diplomat
Похоже, рекорд Тормоза на максимальное количество строк в одном файле побит с большой силой и жестокостью. )

Какой смысл мутить все в одном?, типа я такой крутой буду писать код на 100к в одном инклде?
Я когда работаю- ну код в 2к-8к я еще перевариваю, а больше:crazy: , всеравно код уже можно делить и делить!
Хотя тут кому как нравится.
ЗЫ\ Барахолка функций у меня на 3к++;)

jimon 17.12.2007 01:28

Re: Синтаксис в блице
 
ну так не честно в одном :) я решил по читерить ...
вот программка для blitzmax которая щитает количество
строк во всех инклудах :-)

Код:


SuperStrict

Type TComments
        Field Lines%
        Field Comments%
        Field Size%
End Type

Function ReadComments:TComments(File_name$)
        Local file:TStream = ReadFile(File_name)
        Local comments:TComments = New TComments
        Local line$
        ChangeDir(CurrentDir() +"/"+ ExtractDir(File_name))
        comments.Size = file.size()
        While Not Eof(file)
                line$ = Lower(Trim(ReadLine(file)))
                If Instr(line,"'") Then
                        comments.Comments:+1
                Else
                        If Instr(line,"include "+Chr(34)) Then
                                Local line2$ = Replace(line,"include "+Chr(34),"")
                                line2 = Replace(line2,Chr(34),"")
                                line2 = Trim(line2)
                                Local dir$ = CurrentDir()
                                Local com:TComments = ReadComments(line2)
                                comments.Lines:+com.Lines
                                comments.Comments:+com.Comments
                                comments.Size:+com.Size
                                ChangeDir(dir)               
                        End If
                End If
                comments.Lines:+1
        Wend
        CloseFile(file)
        Return comments
End Function


Function Calculate(File$)

        Local coms:TComments = ReadComments(File)

        DebugLog "---------"
        DebugLog "File : " + File
        DebugLog "Size : " + coms.Size + " bytes"
        DebugLog "Lines : " + coms.Lines
        DebugLog "Comments : " + coms.Comments
        DebugLog "Percents : " + ((Float(coms.Comments)/Float(coms.Lines))*100) + " %"
       
End Function

Calculate("jAqua.bmx")
Calculate("jEditor.bmx")

в результате :
Цитата:

---------
File : jAqua.bmx
Size : 311112 bytes
Lines : 70028
Comments : 801
Percents : 1.14382815 %
---------
File : jEditor.bmx
Size : 352299 bytes
Lines : 71445
Comments : 811
Percents : 1.13513887 %
там просто редактор юзает код от игры :)
в принципе я удивлен что настрочил 70 тыс строчек с 800
закоментироваными строчками ... из них половина - убраный код :)

ABTOMAT 17.12.2007 01:35

Re: Синтаксис в блице
 
49% в моих ботах (версия от 4-го декабря :))

Bagration 17.12.2007 01:40

Re: Синтаксис в блице
 
Цитата:

Сообщение от ABTOMAT
49% в моих ботах (версия от 4-го декабря :))

Ого! :4to: Комменты для потомков?:-D

Taugeshtu 17.12.2007 02:13

Re: Синтаксис в блице
 
Ых...
В моем жутком Сферике, как оказалось, 13% кода - комменты...
А вот в редакторе для него - 5,67 ($_$)

А вот вам и несколько упийц моска, персонально от меня, из того же Сферика...


Глобал... Любуемся комментами...

Код:

;- - - - - - - - - - - - - - - - - - - - - - - - -
;    GLOBALIZATOR
;- - - - - - - - - - - - - - - - - - - - - - - - -
Global PLlife=100    ; хелсы плеера
Global p1        ; временный счётчик для опреда крайних точек позишнов ботов, по совместительству - одна из темп-варов
Global pl        ; самый важный обжект во всей гамке - игрок. Точнее это не совсем игрок, а только отражения на шарике - но в любом случае, всё и вся привязано к нему, родимому!
Global G#=-0.3    ; наша гравитационная постоянная
Global jump#    ; эт длллля прыжка, точнее - время прыжка
Global xmov        ; главная переменная во всём контроллере - отвечает за направление и скорость движения игрока
Global wt        ; число тайлов по ширине
Global ht        ; и по высоте
; вроде коорды игрока, точнее того тайла, где он находится
Global x        ; соответсна по Х...
Global y        ; ... и по У!
Global tempent    ; Временный обжект (юзается для подбора бонусов)
Global finX        ; позиция финиша по Х
Global finY        ; позиция финиша по У
Global score    ; количество пакман-бонусов, собранных игроком
Global cam        ; это наша камера, наши глазявочки
Global mscore=0    ; начальное значение количества шароподобных "рулезов"
Global play    ;    это непосредсно игрок. Несмотря на то, что привязка идёт не к нему, а к другому обжекту - это основной игрок. Именно он крутится при движении
Global pan        ; Угол, на который повернут игрок (его спрайт)
Global BFtimer=0; Таймер для бонуса блэйд форм
; ниже идут переменные для ФПС-ника
Global fps=1    ; непосредсно ФПС
Global fr        ; счётчик фреймов
Global frtime    ; время обработки фреймов
; а это для поправки - так с имиджами полегше будет...
Global poprX#=-6.52
Global poprY#=4.78
Global scale=57    ; это переменная для ресайза имиджей и их корректного расположения
Global PLstate=0; контрол за состоянием игрока и количеством навешанных на него "рулезов"
Global rez        ; переменка для циклов типа While...Wend для отсева по получению резалта.
Global tmp1        ; временные переменные для всякого целочисленного мусора...
Global tmp2
Global temp1#    ; Ну, и не совсем целочисленного...
Global musor$    ; Текстовый мусор
Global Ltime=0    ; контролим громовержца...
Global levT=0    ; ... и левитацию.
Global Lhelper    ; Хелпер для програмной визуализации шторма молний.
Global GTimer=CreateTimer(60)    ; Пытаемся стабильнуть ФПС...
Global SGTimer=CreateTimer(3)    ; Пытаемся тормознуть ФПС...
Global actLEV=0    ; Нумер текущего левела.
Global Mlevels=0; Количество левелов с пачке.
Global Mmode=2    ; Режим меню. 0-нет, 1-игровое, 2-главное.
Global actBUT=1    ; Это надо для определения активной кнопки. Также с помощью этой переменной будет легко сделать само "нажатие" кнопок.
Global musT=0    ; Переменная для контроля за тем, закончилась ли композиция.
Global Tnumb=0    ; Переменная для контроля за номером текущего трека.
Global Glife=3    ; Этот вар служит для "убивания" игрока. По сути - кол-во банальных "дендивских" жизней

Вот такое дикое количество комментов... Не переживайте, это только в глобале так (^_^)

Далее...
Совершенно неземной код коллизий (кусочек кода контроля) :
Код:

;                                            ----------------------------------------

;    Простое устранение лага с ползанием шарика без действий со стороны игрока
If Abs(xmov)<7 Then xmov=0
;- - - - - - - - - - - - - - - - - - - -
;----------PROVERKA PO "X"
;- - - - - - - - - - - - - - - - - - - -
TranslateEntity pl,xmov*0.001,0,0
x=EntityX(pl)+0.5*Sgn(xmov)
y=EntityY(pl)
;proverka na to, svobodna li kletka,kuda hotim peremestitsa
If p(x,y)>-1
TranslateEntity pl,-xmov*0.001,0,0
x=EntityX(pl)
If p(x,y-1)=-1 xmov=-xmov
EndIf
;- - - - - - - - - - - - - - - - - - - -
;----------PROVERKA PO "Y"
;- - - - - - - - - - - - - - - - - - - -
TranslateEntity pl,0,G#+jump#,0
x=EntityX(pl)
y=EntityY(pl)+0.25*Sgn(G#+jump#)
;proverka na to, svobodna li kletka,kuda hotim peremestitsa
If p(x,y)>-1 TranslateEntity pl,0,-(G#+jump#),0
;    A eto dabi ne bulo lagov s visotoj:
x=EntityX(pl)
y=EntityY(pl)
If p(x,y-1)>-1 And (EntityY(pl)-y)<0.4 PositionEntity pl,EntityX(pl),y,EntityZ(pl)
; Этот кусочек отвечает за то, что нам будет за столкновение с шипастым тайлом:
If t(x,y+1)=23 And Sgn(G#+jump#)=1 Then PLlife=PLlife-2 jump#=jump#-0.15
; Это мы добавим, дабы игрок никуда не "сползал" и не выпрыгивал с карты:
If EntityX(pl)>x And x=wt PositionEntity pl,x,EntityY(pl),EntityZ(pl)
If EntityY(pl)>y And y=ht PositionEntity pl,EntityX(pl),y,EntityZ(pl)
If EntityX(pl)<x And x=1 PositionEntity pl,x,EntityY(pl),EntityZ(pl)
If EntityY(pl)<y And y=1 PositionEntity pl,EntityX(pl),y,EntityZ(pl)
;                                            -------------------------------------

Ну, и чтобы пощекотать ваши нервы, Header готовящегося фейверка для конкурса:

Код:

;======================================-
;====================================-
;==================================-
;        Ize'g0re presents...  ==-
;==============================-

;|=====+      =====================================-
; |=====+    ===================================-
;  |=====+    =================================-
;  |=====+  particle st0rm. . . -==========-
;  |=====+    =============================-

; * . ; *  ' .  *
;* '  * . * , * '
;.С Новым Годом!,
;  * ' * , * .. ;
; * . '  *. ' * *

Комменты наводят благоговейный ужас на меня... (%_%)

alcoSHoLiK 17.12.2007 03:02

Re: Синтаксис в блице
 
У меня пару строк кода закомментировано)

johnk 17.12.2007 03:54

Re: Синтаксис в блице
 
Юзай Select...Case.

HolyDel 17.12.2007 10:32

Re: Синтаксис в блице
 
эмм. а кто вам сказал что у меня один инклюд?
у мну их тоже много, в основном модуле 14к, в остальных может 6к примерно в сумме.

H@NON 17.12.2007 14:13

Re: Синтаксис в блице
 
У меня такие результаты:
NUMBER OF LINES: 1525
COMMENTED LINES: 395
____________________________
COMMENTS PART IN CODE: ~26 %

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

HolyDel 17.12.2007 14:21

Re: Синтаксис в блице
 
Цитата:

File : jAqua.bmx
Size : 311112 bytes
Lines : 70028
Comments : 801
Percents : 1.14382815 %
---------
File : jEditor.bmx
Size : 352299 bytes
Lines : 71445
Comments : 811
Percents : 1.13513887 %
Jimon, Респект, 70к строчек написать!
Вот 311112/70028 = 4.44, как то 4 символа на строчку выходит.

moka 17.12.2007 14:52

Re: Синтаксис в блице
 
Важно не колличество строк, а мощность кода. Если писать в стиле blitzerg'а, конечно строк многа, можно погордиться, только на самом деле все эти 200 строк могут украдываться в 20.
Меньше ифов, больше простой математики.

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

Оформляю код какбы по блокам:
Инклуд
Инициализация
Типы
Переменные
Загрузка и т.п.
Главный Цикл
Функции
- Блок функций тоже разбит на разные подблоки, например функции для шейдеров, потом функции для эффекта Bloom, функции для создания объектов и т.д. и т.п.

В общем для меня важно, что вернувшись даже через пол года, я отлично заного пойму свой код, несмотря на колличество строк. :)
Рекорд у меня это 14к строк кода, но тогда я кодил весьма не мощно и было много копи-паста кода в коде :) (аля стиль blitzerg ;) ).

В общем каждый сам свой стиль вырабатывает со временем. Я например никогда не юзаю Then, часто оформляю простейшое условие в одну строку и т.п. :)

HolyDel 17.12.2007 14:57

Re: Синтаксис в блице
 
я например всегда юзаю then, сли условие идет в одну строку, и никогда не юзаю, если условие должно определить будет ли работать блок кода.
примерs:

if a>0 then b=12.5/a

или

if a>0
b=10/a
c=12/a
a=4*b-c;
endif

moka 17.12.2007 15:02

Re: Синтаксис в блице
 
if a>0 then b=12.5/a
=
if a>0 b=12.5/a

HolyDel 17.12.2007 15:04

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

moka 17.12.2007 15:31

Re: Синтаксис в блице
 
Ну тогда:
if (a>0) b=12.5/a
имхо, так ещё удобнее ;)

FrankH 17.12.2007 21:42

Re: Синтаксис в блице
 
Предыдущий проЭкт(не готовый редактор карт)
Number of lines: 2191
Commented lines: 620
28,754%
Сегодняшний(меньше недели)
Number of lines: 2039
Commented lines: 829
40,6572%
Из всех комментов 90% - результат оптимизации или переделывания кода в связи с переделыванием или добавлением других участов..
Часто приходится "делать откат" или разбираться почему старый код работал, а новый нет.

moka 17.12.2007 22:39

Re: Синтаксис в блице
 
FrankH, всё правильно, приходиться сравнивать, замерять, и лишь на 10 раз резать. :)
Ещё я юзаю пути для goto как навигаторы, т.к. в стандартном IDE есть справа список путей, так вот т.к. у меня много кода, даже когда все функции свёрнуты, всёравно приходиться долго иногда летать, а тут нажал на к примеру .Sh_Prop - и сразу кидает на блок функций с управлением шейдерами для пропа. :)

AndruXa 25.12.2007 20:23

Re: Синтаксис в блице
 
Появился у меня еще один вопросик:Что лучше(с точки зрения поедания ресурсов конечно) создавать изображение в блице(CreateImage) или же загружать созданное в фотошопе(конечно сложное не сделать блицем,возьмем к примеру простенькое изображение с несколькими линиями).

ЛысыЙ_Чук-Иванчук 25.12.2007 21:33

Re: Синтаксис в блице
 
Цитата:

Сообщение от HolyDel
я например всегда юзаю then, сли условие идет в одну строку, и никогда не юзаю, если условие должно определить будет ли работать блок кода

Я наоборот, Then некода не юзал, порой напишу участок- 100% работоспособный, и наченаю его мучить в одну строку получаются у меня длянные, тяжелые для другого человека(да и для мена порой) кодЫ:-D

Jimon-70к строк и всего 300 кб, не мясистый у тебя код;)

dector 25.12.2007 22:04

Re: Синтаксис в блице
 
Я немного не вьеду...

if условие Операторы_в_одну_строку

когда нужно:
if условие then
Блок
Операторов
endif

jimon 25.12.2007 22:23

Re: Синтаксис в блице
 
ЛысыЙ_Чук-Иванчук
ну дык там 18 тыс строчек пустых
я же не пишу без пропусков между строчками
а то прямо монолитные стихи


Часовой пояс GMT +4, время: 14:08.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot