Funktio tarvitsee cbSDK:n cbMap:n toimiakseen!
Tällä hetkellä funktio on varsin "tyhmä" eli se osaa rakentaa vain mutkaista, yksisuuntaista tietä jonka mutkat täytyvät olla yli 2 tilen päässä toisistaan. Eli ei siis mitään hienoa neljän/kolmen tien risteyksiä tai eritasoliittymiä Funktio päivittyy riippuen siitä, kuinka paljon jaksan sitä koodata.
Ja tässä funktio:
Code: Select all
//naputtelijan Tienrakennusfunktio v 1.0_1
'---------------------------------------------------------------------------------------------
Function BuildRoad(buildx,buildy,VERTR=0,HORR=0,BTR=0,BTL=0,TOR=0,TOL=0)
If VERTR=0 Then
PutTile2(MAP_BACK,buildx,buildy,HORROAD)
PutTile2(MAP_OVER,buildx,buildy,0)
If GetTile2(MAP_BACK,buildx,buildy+1)=HORROAD Or GetTile2(MAP_BACK,buildx,buildy+1)=VERTROAD Then
PutTile2(MAP_BACK,buildx,buildy,VERTROAD)
If GetTile2(MAP_BACK,buildx+1,buildy+1)=HORROAD And GetTile2(MAP_BACK,buildx-1,buildy+1)=HORROAD Then
ElseIf GetTile2(MAP_BACK,buildx+1,buildy+1)=HORROAD Then
PutTile2(MAP_BACK,buildx,buildy+1,BTML)
ElseIf GetTile2(MAP_BACK,buildx-1,buildy+1)=HORROAD Then
PutTile2(MAP_BACK,buildx,buildy+1,BTMR)
EndIf
EndIf
If GetTile2(MAP_BACK,buildx,buildy-1)=HORROAD Or GetTile2(MAP_BACK,buildx,buildy-1)=VERTROAD Then
PutTile2(MAP_BACK,buildx,buildy,VERTROAD)
If GetTile2(MAP_BACK,buildx+1,buildy-1)=HORROAD And GetTile2(MAP_BACK,buildx-1,buildy-1)=HORROAD Then
ElseIf GetTile2(MAP_BACK,buildx+1,buildy-1)=HORROAD Then
PutTile2(MAP_BACK,buildx,buildy-1,TOPL)
ElseIf GetTile2(MAP_BACK,buildx-1,buildy-1)=HORROAD Then
PutTile2(MAP_BACK,buildx,buildy-1,TOPR)
EndIf
EndIf
If GetTile2(MAP_BACK,buildx+1,buildy)=HORROAD Or GetTile2(MAP_BACK,buildx+1,buildy)=VERTROAD Then
If GetTile2(MAP_BACK,buildx+1,buildy+1)=VERTROAD And GetTile2(MAP_BACK,buildx+1,buildy-1)=VERTROAD Then
ElseIf GetTile2(MAP_BACK,buildx+1,buildy-1)=VERTROAD Then
PutTile2(MAP_BACK,buildx+1,buildy,BTMR)
ElseIf GetTile2(MAP_BACK,buildx+1,buildy+1)=VERTROAD Then
PutTile2(MAP_BACK,buildx+1,buildy,TOPR)
EndIf
EndIf
If GetTile2(MAP_BACK,buildx-1,buildy)=HORROAD Or GetTile2(MAP_BACK,buildx-1,buildy)=VERTROAD Then
If GetTile2(MAP_BACK,buildx-1,buildy+1)=VERTROAD And GetTile2(MAP_BACK,buildx-1,buildy-1)=VERTROAD Then
ElseIf GetTile2(MAP_BACK,buildx-1,buildy-1)=VERTROAD Then
PutTile2(MAP_BACK,buildx-1,buildy,BTML)
ElseIf GetTile2(MAP_BACK,buildx-1,buildy+1)=VERTROAD Then
PutTile2(MAP_BACK,buildx-1,buildy,TOPL)
EndIf
EndIf
If GetTile2(MAP_BACK,buildx,buildy-1)=HORROAD Then PutTile2(MAP_BACK,buildx,buildy-1,VERTROAD)
If GetTile2(MAP_BACK,buildx,buildy+1)=HORROAD Then PutTile2(MAP_BACK,buildx,buildy+1,VERTROAD)
Else
PutTile2(MAP_BACK,buildx,buildy,HORR)
PutTile2(MAP_OVER,buildx,buildy,0)
If GetTile2(MAP_BACK,buildx,buildy+1)=HORR Or GetTile2(MAP_BACK,buildx,buildy+1)=VERTR Then
PutTile2(MAP_BACK,buildx,buildy,VERTR)
If GetTile2(MAP_BACK,buildx+1,buildy+1)=HORR And GetTile2(MAP_BACK,buildx-1,buildy+1)=HORR Then
ElseIf GetTile2(MAP_BACK,buildx+1,buildy+1)=HORR Then
PutTile2(MAP_BACK,buildx,buildy+1,BTL)
ElseIf GetTile2(MAP_BACK,buildx-1,buildy+1)=HORR Then
PutTile2(MAP_BACK,buildx,buildy+1,BTR)
EndIf
EndIf
If GetTile2(MAP_BACK,buildx,buildy-1)=HORR Or GetTile2(MAP_BACK,buildx,buildy-1)=VERTR Then
PutTile2(MAP_BACK,buildx,buildy,VERTR)
If GetTile2(MAP_BACK,buildx+1,buildy-1)=HORR And GetTile2(MAP_BACK,buildx-1,buildy-1)=HORR Then
ElseIf GetTile2(MAP_BACK,buildx+1,buildy-1)=HORR Then
PutTile2(MAP_BACK,buildx,buildy-1,TOL)
ElseIf GetTile2(MAP_BACK,buildx-1,buildy-1)=HORR Then
PutTile2(MAP_BACK,buildx,buildy-1,TOR)
EndIf
EndIf
If GetTile2(MAP_BACK,buildx+1,buildy)=HORR Or GetTile2(MAP_BACK,buildx+1,buildy)=VERTR Then
If GetTile2(MAP_BACK,buildx+1,buildy+1)=VERTR And GetTile2(MAP_BACK,buildx+1,buildy-1)=VERTR Then
ElseIf GetTile2(MAP_BACK,buildx+1,buildy-1)=VERTR Then
PutTile2(MAP_BACK,buildx+1,buildy,BTR)
ElseIf GetTile2(MAP_BACK,buildx+1,buildy+1)=VERTR Then
PutTile2(MAP_BACK,buildx+1,buildy,TOR)
EndIf
EndIf
If GetTile2(MAP_BACK,buildx-1,buildy)=HORR Or GetTile2(MAP_BACK,buildx-1,buildy)=VERTR Then
If GetTile2(MAP_BACK,buildx-1,buildy+1)=VERTR And GetTile2(MAP_BACK,buildx-1,buildy-1)=VERTR Then
ElseIf GetTile2(MAP_BACK,buildx-1,buildy-1)=VERTR Then
PutTile2(MAP_BACK,buildx-1,buildy,BTL)
ElseIf GetTile2(MAP_BACK,buildx-1,buildy+1)=VERTR Then
PutTile2(MAP_BACK,buildx-1,buildy,TOL)
EndIf
EndIf
If GetTile2(MAP_BACK,buildx,buildy-1)=HORR Then PutTile2(MAP_BACK,buildx,buildy-1,VERTR)
If GetTile2(MAP_BACK,buildx,buildy+1)=HORR Then PutTile2(MAP_BACK,buildx,buildy+1,VERTR)
EndIf
End Function
Parametrit:
buildx: Mihin tie rakennetaan. Vaakasuuntainen tilekoordinaatti.
buildy: Mihin tie rakennetaan. Pystysuuntainen tilekoordinaatti.
Valinnaiset:
VERTR: Tilekartan vaakasuora tiepalikka.
HORR: Tilekartan pysysuora tiepalikka.
BTR: Tilekartan vasemmalta ylös-palikka.
BTL: Tilekartan oikealta ylös-palikka.
TOR: Tilekartan alhaalta vasemmalle-palikka.
TOL: Tilekartan alhaalta oikealle-palikka.
Voit myös jättää valinnaiset pois, jolloin täytyy käyttää ohjelman alussa määriteltyjä vakioita. Vakionimet eroavat Parametrinimistä näin:
VERTR=VERTROAD
HORR=HORROAD
BTR=BTMR
BTL=BTML
TOR=TOPR
TOL=TOPL
Sitten pannaan vielä kunnon testiohjelma: