www.boolean.name

www.boolean.name (http://forum.boolean.name/index.php)
-   Проекты на Blitz3D (http://forum.boolean.name/forumdisplay.php?f=14)
-   -   GRIG Project (http://forum.boolean.name/showthread.php?t=17487)

polopok 06.11.2012 13:12

GRIG Project
 
Вложений: 1
рабочее название: GRIG Project
сюжет: фэнтэзи
жанр: пошаговая стратегия
проект с открытым кодом .(но без комментариев по коду)

Местами код Г....о
Тест Код: виды атаки .
клавишы:
1 - стрела/ы
2 - камень/и или ядра/о
3 - квазар/ы
4 - луч/и или лазер
(esc) - выход из программы
левая кнопка - удар по одной ячейки
правая кнопка - удар по одной ячейки и смежным

код в архиве (открыть в Блитце)

moka 06.11.2012 13:27

Ответ: GRIG Project
 
Круто что OpenSource, домой приду гляну обязательно!

polopok 06.11.2012 13:30

Вложений: 1
Кстати желающих присоединится ,добро пожаловать !(писать в личку!)
думаю для вас будет неплохой опыт ...


Тест код: GRIG MAP 4x12 для замка
Войны могут занимать 1,2,3 или 4 клетки

клавиши 1,2,3,4
Код:

        Global GRx = 400 , GRy = 180 , fov# = 25  ;GRx = 400
    Global TileSizeX = 30 , TileSizeY = 20
    Global num_tileX = 2 , num_tileY = 13
   
    Dim TPosX#(num_tileY ,num_tileY) : Dim TPosY#(num_tileY ,num_tileY)
    Dim TPozX#(num_tileY ,num_tileY) : Dim TPozY#(num_tileY ,num_tileY)
;    Mesto ячейка 1- занята , 0 - свободна
    Dim Mesto(num_tileY ,num_tileY) : Dim Character(2)
   
Function CreateGrid()
    For y = 1 To num_tileY
        For x = -num_tileX To num_tileX
            ScaleRatio# = fov/(fov+y)
            px# = x*TileSizeX/ScaleRatio
            py# = y*TileSizeY
            Color 85, 107, 47
        ;    Text GRx +px , GRy +py , x+" "+y
            If x<num_tileX Then Line GRx+px , GRy +py , GRx+((x+1)*TileSizeX/ScaleRatio) , GRy +py
            If y<num_tileY Then Line GRx+px , GRy +py , GRx+((x)*TileSizeX/(fov/(fov+(y+1)))) , GRy +(y+1)*TileSizeY
               
           
                TPozX#(x+num_tileX+1,y)    = px#  ;
                TPozY#(x+num_tileX+1,y)    = py#  ;
               
                Mesto(x+num_tileX+1,y)        = 0 ;

           
            If x<num_tileX And y<num_tileY Then
                prx# = px+(TileSizeX*0.5)+(x +y)*0.5;
                pry# = py+(TileSizeY*0.5)

                TPosX(x+num_tileX+1,y)        = prx#
                TPosY(x+num_tileX+1,y)        = pry#
               
                Plot GRx+prx , GRy +pry
            ;    Plot GRx+2 ,GRy+2
            EndIf
        Next
    Next   
End Function

Function GridSelect(STX,STY,kolvoseg=1,Sr=0,Sg=0,Sb=0)
    If STX<num_tileY And STX >0 And STY <num_tileY And STY >0
            Color Sr,Sg,Sb
            Line GRx + TPozX(STX,STY) , GRy +TPozY(STX,STY), GRx + TPozX(STX+kolvoseg,STY), GRy +TPozY(STX,STY) ; верхняя
            Line GRx + TPozX(STX,STY+kolvoseg) , GRy +TPozY(STX,STY+kolvoseg) , GRx + TPozX(STX+kolvoseg,STY+kolvoseg) ,GRy + TPozY(STX,STY+kolvoseg);нижняя
           
            Line GRx + TPozX(STX,STY) , GRy +TPozY(STX,STY) , GRx + TPozX(STX,STY+kolvoseg) , GRy +TPozY(STX+kolvoseg,STY+kolvoseg);левая
            Line GRx + TPozX(STX+kolvoseg,STY) , GRy +TPozY(STX+kolvoseg,STY) , GRx + TPozX(STX+kolvoseg,STY+kolvoseg) , GRy +TPozY(STX+kolvoseg,STY+kolvoseg);правая
            Color 255,255,255
    EndIf
End Function

Graphics 800,600,32,2
SetBuffer BackBuffer()
   
seg%=1   
ClsColor 189 ,183, 107
While Not KeyHit(1)
    Cls
mx# = MouseX() : my# = MouseY()
CreateGrid()

    ym# = Floor#((my-GRy)/ TileSizeY)
    xm# = Floor#((  (mx-GRx )/ TileSizeX*( (fov/(fov+ym#))) )+num_tileX+1)
    TX = Int(xm) : TY = Int(ym)
   
   
If  KeyDown(2) Then  seg%=1
If KeyDown(3) Then  seg%=2
If KeyDown(4)Then  seg%=3
If KeyDown(5) Then  seg%=4

    If TX<num_tileX+3 And TX >0 And TY <num_tileY And TY >0

        Select seg
        Case 1
            GridSelect(TX,TY,1,255)
        Case 2
            If  TX = 4  Then TX = 3  ;Or TX = 3 Or  TX = 4
            If TY >num_tileY-seg Then TY =num_tileY-seg
            GridSelect(TX,TY,seg,0,255)
            GridSelect(TX,TY,1,255)   
        Case 3
            If  TX = 3 Or  TX = 4  Then TX = 2  ;Or TX = 3
            If TY >num_tileY-seg Then TY =num_tileY-seg
            GridSelect(TX,TY,seg,0,255)
            GridSelect(TX,TY,1,255)   
        Case 4
            If  TX = 2 Or TX = 3 Or  TX = 4  Then TX = 1  ;
            If TY >num_tileY-seg Then TY =num_tileY-seg
            GridSelect(TX,TY,seg,0,255)
            GridSelect(TX,TY,1,255)
        End Select
    EndIf   
    Text mx,my,"\"
Flip
Wend
End




Тест Код: виды атаки .(вариант с анимацией)
код в (offtop e)
Код:

Include "F_Strela_2.bb"
Include "Grid_2d_iso.bb"
    Global TX,TY,mx#,my#

Graphics 800,600,32,2

    elf_lukcinik = LoadAnimImage ("Images\hero4.bmp",80,80,0,4)
    ;ResizeImage elf_lukcinik ,64 ,64
    MaskImage elf_lukcinik, 100,100,100            ; 255,255,255  ;
    IW = ImageWidth(elf_lukcinik )
    IH = ImageHeight(elf_lukcinik )
    HandleImage elf_lukcinik,IW/2,IH
   
    fon = CreateImage (761,511)
    SetBuffer ImageBuffer(fon )
        CreateGrid()
    SetBuffer BackBuffer()

    vibor%=1
    frmSparks =0
ClsColor 189 ,183, 107
While Not KeyHit(1)
Cls
mx# = MouseX() : my# = MouseY()

        TXMap =6
        TYMap =6
       
    DrawImage fon,0,0
        DrawImage elf_lukcinik, GRx + TPosX(TXMap,TYMap)  ,GRy + TPosY(TXMap,TYMap) ,frmSparks

    ;Rect GRx + TPosX(6,6)-16,GRy + TPosY(6,6)-48,32,48
    ym# = Floor#((my-GRy)/ TileSizeY)
    xm# = Floor#((  (mx-GRx )/ TileSizeX*( (fov/(fov+ym#))) )+num_tileX+1)
    TX = Int(xm) : TY = Int(ym)


If  KeyDown(2) Then  vibor%=1
If KeyDown(3) Then  vibor%=2
If KeyDown(4)Then  vibor%=3
If KeyDown(5) Then  vibor%=4


If MouseHit(1) Then playanimation=1:m1=True
If MouseHit(2) Then playanimation=1:m2=True


Select  playanimation
Case 1
    If MilliSecs() > tmrSparks + 200 Then
        tmrSparks=MilliSecs() ; сбрасываем таймер
        frmSparks=( frmSparks + 1 ) Mod 4 +(4*1-4)   
    If frmSparks =3 Then
    frmSparks =0:playanimation=0
    EndIf
    If frmSparks =2 Then attack = True
    EndIf
End Select

If attack = True And m1 = True Then
    If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
        If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
            CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
        End If
    EndIf   
    attack = False : m1 = False
EndIf

If attack = True And m2 = True Then
    If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
       
        If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
            CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
   
            CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY )-1 ,GRy + TPosY(TX+1 ,TY )-35 ,vibor%)
            CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY )-1 ,GRy + TPosY(TX-1 ,TY )-35 ,vibor%)
            CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY +1)-1 ,GRy + TPosY(TX ,TY+1 )-35 ,vibor%)
            CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY -1)-1 ,GRy + TPosY(TX ,TY-1 )-35 ,vibor%)
           
            CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY +1)-1 ,GRy + TPosY(TX+1 ,TY+1 )-35 ,vibor%)
            CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY +1)-1 ,GRy + TPosY(TX-1 ,TY+1 )-35 ,vibor%)
            CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY -1)-1 ,GRy + TPosY(TX+1 ,TY-1 )-35 ,vibor%)
            CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY -1)-1 ,GRy + TPosY(TX-1 ,TY-1 )-35 ,vibor%)

        End If
    EndIf   
    attack = False : m2 = False
EndIf

For ss.streliba = Each streliba
UpdateStrela(ss)
If ss <>Null Then
Text 20,160,"dist "+ss\rastoianie_do_misheni#

EndIf
Next   
               
Draw_Ekran()

Flip
Wend
FreeImage elf_lukcinik
FreeImage fon
Delete Each streliba
End



Function Draw_Ekran()
    Color 85, 107, 47
;    Rect 0,0,800,50,1
;    Rect 0,460,800,140,1
    Rect 70,30,660,430,0
   
;    Rect 0,30,70,5,1
;    Rect 730,30,70,430,1
    Color 255,255,255   
If TX<num_tileY And TX >0 And TY <num_tileY And TY >0   
        Text 20,60,"X : "+TX
        Text 20,80,"Y : "+TY   
EndIf       
        Text 20,100,"mX : "+mx
        Text 20,120,"mY : "+my   
        Text 20,140,"kolvo "+kolvo_elementov
End Function



из вложения изображение поместить в папку Images и запустить код.

polopok 06.11.2012 19:27

Ответ: GRIG Project
 
Вложений: 1
добавил растительность , удар ножом при клике смежных с эльфом клеток ,
анимация с любого кадра .( последовательность можно задать любую ?!)

Тест Код: виды атаки .(вариант 2 ,с анимацией) см. вложение

Arton 06.11.2012 19:35

Ответ: GRIG Project
 
Цитата:

Сообщение от polopok (Сообщение 242713)
добавил растительность , удар ножом при клике смежных с эльфом клеток ,
анимация с любого кадра .( последовательность можно задать любую ?!)

Тест Код: виды атаки .(вариант 2 ,с анимацией) см. вложение

Респект. Так держать. :super:

Может побольше разрешение медии сделаешь? Или автоматическое масштабирование. Мне с моим зрением надо в экран тыкаться.

polopok 06.11.2012 20:16

Ответ: GRIG Project
 
Цитата:

Сообщение от Arton (Сообщение 242716)
Респект. Так держать. :super:

Может побольше разрешение медии сделаешь? Или автоматическое масштабирование. Мне с моим зрением надо в экран тыкаться.

крупнее разрешение ни к чему ,так как в перспективе будет АТВ шкала (а-ля Герои меча и магии) .

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

Тест Код: виды атаки .(вариант 3 ,с анимацией)
заменить GRIG 5 на этот код (см. оффтоп)
Код:

Include "F_Strela_2.bb"
Include "Grid_2d_iso_2.bb"
        Global TX,TY,mx#,my# ,frmSparks

Graphics 800,600,32,2
                Load_BackGround_Image()
        elf_lukcinik = LoadAnimImage ("Images\hero4.bmp",80,80,0,9)
        ;ResizeImage elf_lukcinik ,64 ,64
        MaskImage elf_lukcinik, 100,100,100            ; 255,255,255  ;
        IW = ImageWidth(elf_lukcinik )
        IH = ImageHeight(elf_lukcinik )
        HandleImage elf_lukcinik,IW/2,IH
       
        fon = CreateImage (761,511)
        SetBuffer ImageBuffer(fon )
                CreateGrid()
        SetBuffer BackBuffer()
                Free_BackGround_Image()
               
        vibor%=1
        frmSparks =0
        TXMap =6
        TYMap =6       
ClsColor 189 ,183, 107
While Not KeyHit(1)
Cls
mx# = MouseX() : my# = MouseY()


               
        DrawImage fon,0,0
                DrawImage elf_lukcinik, GRx + TPosX(TXMap,TYMap)  ,GRy + TPosY(TXMap,TYMap) ,frmSparks

        ;Rect GRx + TPosX(6,6)-16,GRy + TPosY(6,6)-48,32,48
        ym# = Floor#((my-GRy)/ TileSizeY)
        xm# = Floor#((  (mx-GRx )/ TileSizeX*( (fov/(fov+ym#))) )+num_tileX+1)
        TX = Int(xm) : TY = Int(ym)


If  KeyDown(2) Then  vibor%=1
If KeyDown(3) Then  vibor%=2
If KeyDown(4)Then  vibor%=3
If KeyDown(5) Then  vibor%=4

If MouseDown(1) Or MouseDown(2) And TX = TXMap And  TY =  TYMap And mouse_sel = False Then mouse_sel = True

If MouseDown(1) Or MouseDown(2) And mouse_sel = True Then
        TXMap = TX : TYMap  = TY
Else       
        mouse_sel = False
EndIf


If MouseHit(1) And mouse_sel = False Then
        If TX = (TXMap+1) Or TX =  (TXMap-1) Or TY = (TYMap-1) Or TY = (TYMap+1) Then
                playanimation=2
                Restore elf_attack_noj       
        EndIf
        If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
                playanimation=1:m1 = True
                Restore elf_attack_luk
        EndIf
EndIf

If MouseHit(2) And mouse_sel = False Then
        If TX = (TXMap+1) Or TX =  (TXMap-1) Or TY = (TYMap-1) Or TY = (TYMap+1) Then
                playanimation=2
                Restore elf_attack_noj       
        EndIf
                If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
                playanimation=1:m2 = True
                Restore elf_attack_luk
        EndIf
EndIf


Select  playanimation
Case 0
        If MilliSecs() > tmrSparks + 2180 Then
                tmrSparks=MilliSecs() ; сбрасываем таймер
                Read frmSparks
        If frmSparks =0 Then
        frmSparks =0:playanimation=0 : Restore elf_attack_static
        EndIf
        If frmSparks =2 Then attack1 = True
        EndIf
Case 1
        If MilliSecs() > tmrSparks + 180 Then
                tmrSparks=MilliSecs() ; сбрасываем таймер
                Read frmSparks
        If frmSparks =0 Then
        frmSparks =0:playanimation=0 : Restore elf_attack_static
        EndIf
        If frmSparks =2 Then attack1 = True
        EndIf
Case 2

        If MilliSecs() > tmrSparks + 180 Then
                tmrSparks=MilliSecs() ; сбрасываем таймер
                Read frmSparks
        If frmSparks =0 Then
        frmSparks =0:playanimation=0 : Restore elf_attack_static
        EndIf
        EndIf
End Select

If attack1 = True And m1 = True Then
        If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
                If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
                End If
        EndIf       
        attack1 = False  :m1 = False
EndIf

If attack1 = True And m2 = True Then
        If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
               
                If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
       
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY )-1 ,GRy + TPosY(TX+1 ,TY )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY )-1 ,GRy + TPosY(TX-1 ,TY )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY +1)-1 ,GRy + TPosY(TX ,TY+1 )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY -1)-1 ,GRy + TPosY(TX ,TY-1 )-35 ,vibor%)
                       
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY +1)-1 ,GRy + TPosY(TX+1 ,TY+1 )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY +1)-1 ,GRy + TPosY(TX-1 ,TY+1 )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY -1)-1 ,GRy + TPosY(TX+1 ,TY-1 )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY -1)-1 ,GRy + TPosY(TX-1 ,TY-1 )-35 ,vibor%)

                End If
        EndIf       
        attack1 = False :m2 = False
EndIf

For ss.streliba = Each streliba
UpdateStrela(ss)
If ss <>Null Then
Text 20,160,"dist "+ss\rastoianie_do_misheni#

EndIf
Next       
                               
Draw_Ekran()

Flip
Wend
FreeImage elf_lukcinik
FreeImage fon
Delete Each streliba
End



Function Draw_Ekran()
        Color 85, 107, 47
        Rect 0,0,800,50,1
        Rect 0,460,800,140,1
        Rect 70,30,660,430,0
       
        Rect 0,30,70,5,1
        Rect 730,30,70,430,1
        Color 255,255,255       
If TX<num_tileY And TX >0 And TY <num_tileY And TY >0       
                Text 20,60,"X : "+TX
                Text 20,80,"Y : "+TY       
EndIf               
                Text 20,100,"mX : "+mx
                Text 20,120,"mY : "+my       
                Text 20,140,"kolvo "+kolvo_elementov
                Text 20,180,"frmSparks "+frmSparks
End Function

.elf_attack_static
Data 0,0 ;3,0
.elf_attack_noj
Data 5,6,7,6,5,0
.elf_attack_luk
Data 1,2,5,0


moka 06.11.2012 20:31

Ответ: GRIG Project
 
А можно туда exe скомпилированный скинуть? А то у меня блица под рукой и думаю у многих других тоже не будет..

Arton 06.11.2012 20:33

Ответ: GRIG Project
 
Был глюк когда перетащил эльфа за поле влево, эльф телепортировался наверх вне поля, отпустил кнопку там и остался.
Да, когда перетаскиваешь эльфа за границу клеток, он оказывается вне поля сверху, зависит от того как далеко перетащить от границы поля, он тогда за экран убегает.

polopok 06.11.2012 20:49

Вложений: 1
Да есть такое ... позже подправлю (тот же "глюк" при нажатии правой кнопки мыши когда наведена на крайние ячейки)

поправил ...

заменить код ...
Код:

If MouseDown(1) Or MouseDown(2) And mouse_sel = True Then
        TXMap = TX : TYMap  = TY
Else       
        mouse_sel = False
EndIf

на ...
Код:

If MouseDown(1) Or MouseDown(2) And mouse_sel = True Then
        If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
                TXMap = TX : TYMap  = TY
        EndIf
Else       
        mouse_sel = False
EndIf

исправил мелкие "баги"
теперь если мышь за пределами поля анимация проигрываться не будет , вообще реакций не будет.

Тест Код: виды атаки .(вариант 3 ,с анимацией)
заменить GRIG 5 на этот код (см. оффтоп)
Код:

Include "F_Strela_2.bb"
Include "Grid_2d_iso_2.bb"
        Global TX,TY,mx#,my# ,frmSparks

Graphics 800,600,32,2
                Load_BackGround_Image()
        elf_lukcinik = LoadAnimImage ("Images\hero4.bmp",80,80,0,9)
        ;ResizeImage elf_lukcinik ,64 ,64
        MaskImage elf_lukcinik, 100,100,100            ; 255,255,255  ;
        IW = ImageWidth(elf_lukcinik )
        IH = ImageHeight(elf_lukcinik )
        HandleImage elf_lukcinik,IW/2,IH
       
        fon = CreateImage (761,511)
        SetBuffer ImageBuffer(fon )
                CreateGrid()
        SetBuffer BackBuffer()
                Free_BackGround_Image()
               
        vibor%=1
        frmSparks =0
        TXMap =6
        TYMap =6       
ClsColor 189 ,183, 107
While Not KeyHit(1)
Cls
mx# = MouseX() : my# = MouseY()


               
        DrawImage fon,0,0
                DrawImage elf_lukcinik, GRx + TPosX(TXMap,TYMap)  ,GRy + TPosY(TXMap,TYMap) ,frmSparks

        ;Rect GRx + TPosX(6,6)-16,GRy + TPosY(6,6)-48,32,48
        ym# = Floor#((my-GRy)/ TileSizeY)
        xm# = Floor#((  (mx-GRx )/ TileSizeX*( (fov/(fov+ym#))) )+num_tileX+1)
        TX = Int(xm) : TY = Int(ym)


If  KeyDown(2) Then  vibor%=1
If KeyDown(3) Then  vibor%=2
If KeyDown(4)Then  vibor%=3
If KeyDown(5) Then  vibor%=4

If MouseDown(1) Or MouseDown(2) And TX = TXMap And  TY =  TYMap And mouse_sel = False Then mouse_sel = True

If MouseDown(1) Or MouseDown(2) And mouse_sel = True Then
        If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
                TXMap = TX : TYMap  = TY
        EndIf
Else       
        mouse_sel = False
EndIf


If MouseHit(1) And mouse_sel = False Then
        If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
        If TX = (TXMap+1) Or TX =  (TXMap-1) Or TY = (TYMap-1) Or TY = (TYMap+1) Then
                playanimation=2
                Restore elf_attack_noj       
        EndIf
        If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
                playanimation=1:m1 = True
                Restore elf_attack_luk
        EndIf
        EndIf
EndIf

If MouseHit(2) And mouse_sel = False Then
        If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
        If TX = (TXMap+1) Or TX =  (TXMap-1) Or TY = (TYMap-1) Or TY = (TYMap+1) Then
                playanimation=2
                Restore elf_attack_noj       
        EndIf
                If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
                playanimation=1:m2 = True
                Restore elf_attack_luk
        EndIf
        EndIf
EndIf


Select  playanimation
Case 0
        If MilliSecs() > tmrSparks + 2180 Then
                tmrSparks=MilliSecs() ; сбрасываем таймер
                Read frmSparks
        If frmSparks =0 Then
        frmSparks =0:playanimation=0 : Restore elf_static
        EndIf
        If frmSparks =2 Then attack1 = True
        EndIf
Case 1
        If MilliSecs() > tmrSparks + 180 Then
                tmrSparks=MilliSecs() ; сбрасываем таймер
                Read frmSparks
        If frmSparks =0 Then
        frmSparks =0:playanimation=0 : Restore elf_static
        EndIf
        If frmSparks =2 Then attack1 = True
        EndIf
Case 2

        If MilliSecs() > tmrSparks + 180 Then
                tmrSparks=MilliSecs() ; сбрасываем таймер
                Read frmSparks
        If frmSparks =0 Then
        frmSparks =0:playanimation=0 : Restore elf_static
        EndIf
        EndIf
End Select

If attack1 = True And m1 = True Then
        If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
                If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
                End If
        EndIf       
        attack1 = False  :m1 = False

ElseIf attack1 = True And m2 = True
        If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
               
                If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
       
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY )-1 ,GRy + TPosY(TX+1 ,TY )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY )-1 ,GRy + TPosY(TX-1 ,TY )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY +1)-1 ,GRy + TPosY(TX ,TY+1 )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY -1)-1 ,GRy + TPosY(TX ,TY-1 )-35 ,vibor%)
                       
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY +1)-1 ,GRy + TPosY(TX+1 ,TY+1 )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY +1)-1 ,GRy + TPosY(TX-1 ,TY+1 )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY -1)-1 ,GRy + TPosY(TX+1 ,TY-1 )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY -1)-1 ,GRy + TPosY(TX-1 ,TY-1 )-35 ,vibor%)

                End If
        EndIf       
        attack1 = False :m2 = False
EndIf

For ss.streliba = Each streliba
UpdateStrela(ss)
If ss <>Null Then
Text 20,160,"dist "+ss\rastoianie_do_misheni#

EndIf
Next       
                               
Draw_Ekran()

Flip
Wend
FreeImage elf_lukcinik
FreeImage fon
Delete Each streliba
End



Function Draw_Ekran()
        Color 85, 107, 47
        Rect 0,0,800,50,1
        Rect 0,460,800,140,1
        Rect 0,30,70,430,1
       

       
        Rect 0,30,70,5,1
        Rect 730,30,70,430,1
        Color 10,50,0
        Rect 70,50,660,410,0       
        Rect 70,466,660,120,0
        Color 255,255,255       
If TX<num_tileY And TX >0 And TY <num_tileY And TY >0       
                Text 80,445,""+TX+" : "+TY

EndIf               
                Text 10,20,"mx "+mx+" : my "+my
                Text 10,140,"kolvo "+kolvo_elementov
                Text 10,180,"frmSparks "+frmSparks
                Text mx,my,"\"
End Function

.elf_static
Data 3,0
.elf_attack_noj
Data 5,6,7,6,5,0
.elf_attack_luk
Data 1,2,5,0



Цитата:

Сообщение от MoKa (Сообщение 242728)
А можно туда exe скомпилированный скинуть? А то у меня блица под рукой и думаю у многих других тоже не будет..

по просьбе трудящихся добавил EXE. ( его нужно поместить в ранее скаченную папку)

замените код..
Код:

If attack1 = True And m1 = True Then
        If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
                If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
                End If
        EndIf       
        attack1 = False  :m1 = False

ElseIf attack1 = True And m2 = True
        If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
               
                If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
       
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY )-1 ,GRy + TPosY(TX+1 ,TY )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY )-1 ,GRy + TPosY(TX-1 ,TY )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY +1)-1 ,GRy + TPosY(TX ,TY+1 )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY -1)-1 ,GRy + TPosY(TX ,TY-1 )-35 ,vibor%)
                       
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY +1)-1 ,GRy + TPosY(TX+1 ,TY+1 )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY +1)-1 ,GRy + TPosY(TX-1 ,TY+1 )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY -1)-1 ,GRy + TPosY(TX+1 ,TY-1 )-35 ,vibor%)
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY -1)-1 ,GRy + TPosY(TX-1 ,TY-1 )-35 ,vibor%)

                End If
        EndIf       
        attack1 = False :m2 = False
EndIf

на ...
Код:

If attack1 = True And m1 = True Then
        If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
                If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
                        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
                End If
        EndIf       
        attack1 = False  :m1 = False

ElseIf attack1 = True And m2 = True
        If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
               
                If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
                CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
               
                If TX+1<num_tileY And TX+1 >0 And TY <num_tileY And TY >0 Then        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY )-1 ,GRy + TPosY(TX+1 ,TY )-35 ,vibor%)
                If TX-1<num_tileY And TX-1 >0 And TY <num_tileY And TY >0 Then        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY )-1 ,GRy + TPosY(TX-1 ,TY )-35 ,vibor%)
                If TX<num_tileY And TX >0 And TY+1 <num_tileY And TY+1 >0 Then        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY +1)-1 ,GRy + TPosY(TX ,TY+1 )-35 ,vibor%)
                If TX<num_tileY And TX >0 And TY-1 <num_tileY And TY-1 >0 Then        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY -1)-1 ,GRy + TPosY(TX ,TY-1 )-35 ,vibor%)
                       
                If TX+1<num_tileY And TX+1 >0 And TY+1 <num_tileY And TY+1 >0 Then CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY +1)-1 ,GRy + TPosY(TX+1 ,TY+1 )-35 ,vibor%)
                If TX-1<num_tileY And TX-1 >0 And TY+1 <num_tileY And TY+1 >0 Then        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY +1)-1 ,GRy + TPosY(TX-1 ,TY+1 )-35 ,vibor%)
                If TX+1<num_tileY And TX+1 >0 And TY-1 <num_tileY And TY-1 >0 Then        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY -1)-1 ,GRy + TPosY(TX+1 ,TY-1 )-35 ,vibor%)
                If TX-1<num_tileY And TX-1 >0 And TY-1 <num_tileY And TY-1 >0 Then        CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY -1)-1 ,GRy + TPosY(TX-1 ,TY-1 )-35 ,vibor%)

                End If
        EndIf       
        attack1 = False :m2 = False
EndIf

исправил очередной "баг".

moka 06.11.2012 21:06

Ответ: GRIG Project
 
Спасибо.
Да и не забывай пользоваться кнопкой "Правка" под сообщениями - это лучше чем постить много сообщений подряд, т.к. модераторам прийдётся их объединять за тебя..

polopok 07.11.2012 14:44

Ответ: GRIG Project
 
Вложений: 1
Таки появилась возможность размножать Эльфов ;) .
теперь чтоб эльф начал действовать надо его выбрать .
чтоб переместить эльфа надо чтоб эльф был выбран ,затем удерживать пробел и левую кнопку мыши ,перемещать .
снять выделение правая кнопка мыши (в дальнейшем ПКМ).
если эльф выделен ,резать ,стрелять ,левая кнопка мыши (в дальнейшем ЛКМ)
массовый обстрел ,удерживать левый Ctrl + ЛКМ
пока всё ... (не пытайтесь стрелять по другому эльфу ,пока ... "баг")
Ах ,да , разархивируйте файлы из вложения в предыдущую папку с программами.

Dzirt 07.11.2012 16:42

Ответ: GRIG Project
 
Вложений: 1
Открыл дедулю блитц3д, посмотрел код...блин, мужик нечитабельно же нихера. Ты там сам не путаешся?
Вложение 18000

polopok 07.11.2012 17:10

Ответ: GRIG Project
 
нет пока не путаюсь ,это так намётки ,позже почищу код :)
а так пробуйте в том виде ,которое есть

polopok 09.11.2012 09:28

Ответ: GRIG Project
 
Вложений: 1
Итак, продолжение следует . Накатал пример игрового меню (сырой вариант) и включил туда предыдущие файлы .
управление меню ЛКМ и дубль ЛКМ ( увы при Баталии стрельба,перемещение ,пока не работают ,но позже исправлю (хочу код переписать просто) ,а так смотрите сами ...

Вложение распаковать ...
можно .Exe запустить или Майн программ.

Кстати двойной ЛКМ на изображениях замка и единорога.

polopok 11.11.2012 08:53

Ответ: GRIG Project
 
Вложений: 1
добавил карту мира , переписал код города и баталии ( пока нет юнитов ...)
стал использовать массив типов , думаю код стал более понятен . :ok:
если возникнут вопросы ,смело задавайте (по возможности отвечу)

в дальнейшем (уже думаю над кодом ) будут юниты ,группы юнитов ,
размеры юнитов 1-2-3 клетки + думаю на поле битвы будут редко появляться боги 4 клетки в помощь нашей или другой стороне .
так же боги будут защищать основной город .
пока всё ... файлы вложены + .exe

Да ещё ,на единороге и городе кликать несколько раз (небольшой "глюк")


Часовой пояс GMT +1, время: 11:45.

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