Тема: GRIG Project
Показать сообщение отдельно
Старый 06.11.2012, 17:30   #3
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Кстати желающих присоединится ,добро пожаловать !(писать в личку!)
думаю для вас будет неплохой опыт ...


Тест код: 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 и запустить код.
Изображения
Тип файла: bmp hero4.bmp (75.1 Кб, 1051 просмотров)

Последний раз редактировалось moka, 06.11.2012 в 18:49.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (06.11.2012)