ПроЭктировщик
Регистрация: 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 и запустить код.
Последний раз редактировалось moka, 06.11.2012 в 18:49.
|