Tower defence
Tower defence
Jotkut saattavat muistaa vanhan Tower defence projektini, joka kuitenkin jäätyi huonon muokattavuutensa takia. Projektia on nyt kuitenkin herätelty ja olen kirjoittanut pelimoottorin kokonaan uudestaan. Tällä hetkelllä pelimoottori kattaa:
- Vihollisaaltojen lisääminen tiedostosta
- Vihollisten lisääminen tiedostosta
- Karttojen luominen tiedostosta
- 4 erilaista puolustustornia (Plain, Double, Laser, Cannon)
- Tornien päivittäminen
- Raha
- Tornit ampuvat vihollisia fiksusti (Torni lukitsee kohteen ja ampuu sitä niin kauan kunnes vihollinen on joko kuollut tai tornin toimintasäteen ulkopuolella)
- Ja kaikkia semmoista mitä en jaksa mainita : )
- Vihollisaaltojen lisääminen tiedostosta
- Vihollisten lisääminen tiedostosta
- Karttojen luominen tiedostosta
- 4 erilaista puolustustornia (Plain, Double, Laser, Cannon)
- Tornien päivittäminen
- Raha
- Tornit ampuvat vihollisia fiksusti (Torni lukitsee kohteen ja ampuu sitä niin kauan kunnes vihollinen on joko kuollut tai tornin toimintasäteen ulkopuolella)
- Ja kaikkia semmoista mitä en jaksa mainita : )
Last edited by DatsuniG on Fri Jan 01, 2010 12:09 pm, edited 7 times in total.
Hengität nyt manuaalisesti.
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Re: Tower defence
Ohjelma aloitti toimintansa tyylikkäästi MAVilla. Voi toki johtua Winestä, mutta kaikki muut CoolBasic ohjelmat ovat pyörineet täydellisesti, joten en usko tähän. Laitan kommenttia jos saan toimimaan vielä.
CoolBasic henkilökuntaa
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Re: Tower defence
Jep jep, mavia heittää heti. Eli ennenkuin edes näkyy mitään. (<-Siinä sinulle apua, MAV tulee joko drawscreenin yhteydessä tai sitä ennen. )
Re: Tower defence
Jos joku viitsisi ajaa tämän ohjelman ja kertoa mitä otsikkorivillä luki Mavin ilmestyessä.
- Attachments
-
- debug.rar
- (590.02 KiB) Downloaded 353 times
Hengität nyt manuaalisesti.
Re: Tower defence
Työkoneella (WinXP) pikaisesti testattuna käynnistyy ilman ongelmia. Taustalle jätettynä peli kaatui MAViin jossain vaiheessa, tilannetta en nähnyt. Koitin toistamiseen jättää pelin pyörimään niin, että näen mitä ruudulla tapahtuu, MAV-tilanteessa yksikään torni ei ampunut, eikä ainakaan näkyvillä ollut vihollisia (mahdollisesti aalto vaihtumassa?).
Pikkubugiin törmäsin myös, upgradetut tornit tuntuivat pystyvän ampumaan huomattavasti kauemmas, kuin mitä tornin ympärillä näkyvä ympyrä antaisi ymmärtää (Onko mahdollisesti mennyt säde ja halkaisija sekaisin?). Grafiikka on myös ehkä turhan pientä, tässä koneessa taitaa olla 22"-laajakuvanäyttö 1680x1050-resoluutiolla, kotona samankokoinen fullhd-resolla, jonka kanssa pelin ikkunaa saisi katsoa jo varmaan suurennuslasilla.
EDIT: Testasin debug-versiolla, MAVin kohdalla otsikkopalkissa luki StartWave() (monen aallon jälkeen).
Pikkubugiin törmäsin myös, upgradetut tornit tuntuivat pystyvän ampumaan huomattavasti kauemmas, kuin mitä tornin ympärillä näkyvä ympyrä antaisi ymmärtää (Onko mahdollisesti mennyt säde ja halkaisija sekaisin?). Grafiikka on myös ehkä turhan pientä, tässä koneessa taitaa olla 22"-laajakuvanäyttö 1680x1050-resoluutiolla, kotona samankokoinen fullhd-resolla, jonka kanssa pelin ikkunaa saisi katsoa jo varmaan suurennuslasilla.
EDIT: Testasin debug-versiolla, MAVin kohdalla otsikkopalkissa luki StartWave() (monen aallon jälkeen).
Last edited by ezbe on Tue Dec 29, 2009 1:50 pm, edited 1 time in total.
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Re: Tower defence
RestrcitSpots() lukee ainakin itselläniDatsuniG wrote:Jos joku viitsisi ajaa tämän ohjelman ja kertoa mitä otsikkorivillä luki Mavin ilmestyessä.
CoolBasic henkilökuntaa
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Re: Tower defence
Sama tulee minullakin. Win XP ja sp3KilledWhale wrote:RestrcitSpots() lukee ainakin itselläniDatsuniG wrote:Jos joku viitsisi ajaa tämän ohjelman ja kertoa mitä otsikkorivillä luki Mavin ilmestyessä.
-
- Advanced Member
- Posts: 485
- Joined: Tue Aug 28, 2007 3:53 pm
- Location: Suomi, Finland
- Contact:
Re: Tower defence
Viltzu wrote:Sama tulee minullakin. Win XP ja sp3
Re: Tower defence
Nonniin vika on (luultavasti) korjattu. Korjattua pakettia voi ladata aloitusviestistä.
KillBurn: Keksin jo tuohonkin vastauksen, hetki vain.
KillBurn: Keksin jo tuohonkin vastauksen, hetki vain.
Last edited by DatsuniG on Tue Dec 29, 2009 2:44 pm, edited 1 time in total.
Hengität nyt manuaalisesti.
Re: Tower defence
Kaatuu vieläkin kun on tappanut kaikki ja odottanut hetken. Johtuu luultavasti siitä startwave():sta. Näyttää kaatuilevan useilla
Sumu Games: Sam, Ur eye!
Re: Tower defence
Minulle kaatui siihen kun upragesin 3 laseria, niin että niiden range oli yli .. Then mav
Re: Tower defence
Yli 2000 piti kirjottaaalker(vierailijana) wrote:Minulle kaatui siihen kun upragesin 3 laseria, niin että niiden range oli yli .. Then mav
- kaneli2000
- Guru
- Posts: 1059
- Joined: Mon Mar 17, 2008 2:40 pm
- Location: Lempäälä
Re: Tower defence
Tulipa tätäkin testattua. Muuten näyttää hyvältä, mutta pelin FPS alkoi olla erittäin alhainen joissain kohdissa - joskus, kun vihollisia ei ollut ruudulla ollenkaan. Sen lisäksi testiversio oli hiukan tylsä, kun tykkejä sai kuinka paljon halusi, eikä rahaa näkynyt missään.
I see the rainbow rising
Re: Tower defence
Nyt on korjattu kaikki viat jotka voi aiheuttaa MAVin. Korjattua pakettia saa ladata aloitusviestistä. (taas )
@kaneli: Viholliset spawnaa ruudun ulkopuolella.
@kaneli: Viholliset spawnaa ruudun ulkopuolella.
Hengität nyt manuaalisesti.
Re: Tower defence
Bugi ilmeisesti.
Kuvassa olevaan kohtaan ei voi laittaa laseria. Vieressä olevaan paikkaan voi.
Paikka on siis tyhjä mihin yritän tuota laseria laittaa.
Kuvassa olevaan kohtaan ei voi laittaa laseria. Vieressä olevaan paikkaan voi.
Paikka on siis tyhjä mihin yritän tuota laseria laittaa.
- Attachments
-
- Bugi?
- bug.PNG (7.35 KiB) Viewed 14507 times
Re: Tower defence
Raha on lisätty peliin, joten nyt on aidon tower defencen tuntua. : ) Peli kaipailee enään hienosäätöä ja parempaa karttasuunnittelua. Aloitusviesti päivitetty ja sieltä vaan latailemaan.
Jep, säde ja halkaisija meni sekaisin. Eikä grafiikka ole omasta mielestäni liian pientä. (Itsehän koodailen tätä 24"-laajakuvanäytöllä 1920x1080 resoluutiolla.)ezbe wrote:Pikkubugiin törmäsin myös, upgradetut tornit tuntuivat pystyvän ampumaan huomattavasti kauemmas, kuin mitä tornin ympärillä näkyvä ympyrä antaisi ymmärtää (Onko mahdollisesti mennyt säde ja halkaisija sekaisin?). Grafiikka on myös ehkä turhan pientä, tässä koneessa taitaa olla 22"-laajakuvanäyttö 1680x1050-resoluutiolla, kotona samankokoinen fullhd-resolla, jonka kanssa pelin ikkunaa saisi katsoa jo varmaan suurennuslasilla.
Hengität nyt manuaalisesti.
Re: Tower defence
On tämä kyllä aika hauska TD peli, mutta se on turhan lyhyt. Tein itse siihen lisää kenttiä, mutta erilaisten tornien puute rupesi ärsyttämään 20 tason kohdalla.
Hienoa tulee kunhan saat päiviteltyä.
Hienoa tulee kunhan saat päiviteltyä.
Re: Tower defence
Lähdekoodia jakoon taas. Koodasin tämän omasta mielestäni niin tyhmästi, että päätin jättää asian sikseen. : )
Main Functions.cb
Game.cb
[/edit]
Main Functions.cb
Code: Select all
Global gSnap, gAmount, gSpawnX, gSpawnY, gWaveStart, gCurrentWave, gCounter, gEnemyTypeAmount, gSelected, gBuildMode, gMoney, gLives
gSnap = 20
FrameLimit 30
gMoney = 600
gLives = 15
bg = Background()
mp = DrawTDMap()
Type ENEMY
Field id
Field char$
Field MaxHP#
Field CurHP#
Field r
Field g
Field b
Field x#
Field y#
Field wp
Field speed#
Field hp#
Field tTimer
Field cash
EndType
Type TURRET
Field sort
Field price
Field x
Field y
Field dmg
Field target
Field range
Field ttime
Field reload
Field speed
Field level
Field id
Field splash
EndType
Type BULLET
Field x#
Field y#
Field splash
Field angle
Field speed
Field dmg
Field sort
Field target
EndType
Type WayPoints
Field x
Field y
EndType
Dim RestrictedSpots(40,30) As integer
Dim Wavelist(500) As String
Dim Enemies(500,4) As String
Dim Turrets(4) As String
Dim Prices(4) As Integer
Turrets(1) = "Plain"
Turrets(2) = "Double"
Turrets(3) = "Laser"
Turrets(4) = "Cannon"
Prices(1) = 250
Prices(2) = 600
Prices(3) = 800
Prices(4) = 1200
ChDir "enemy"
LoadEnemies()
ChDir ".."
Function LoadTDWP(file As String)
ChDir "Maps"
If FileExists(file) Then handle = OpenToRead(file) Else ChDir ".." : Return 0
gSpawnX = ReadInt(handle)
gSpawnY = ReadInt(handle)
For add.WAYPOINTS = Each WAYPOINTS
Delete add
Next add
gAmount = 0
While Not EOF(handle)
gAmount + 1
ParseLine As String = Trim(ReadLine(handle))
add.WAYPOINTS = New(WAYPOINTS)
add\x = GetWord(ParseLine,1,",")
add\y = GetWord(ParseLine,2,",")
Wend
CloseFile handle
ChDir ".."
ChDir "Waves"
If FileExists(file) Then handle = OpenToRead(file) Else ChDir ".." : Return 0
While Not EOF(handle)
num + 1
Wavelist(num) = ReadLine(handle)
Wend
CloseFile handle
ChDir ".."
EndFunction
Function SaveTDWP(file As String)
ChDir "Maps"
If FileExists(file) Then DeleteFile file
handle = OpenToEdit(file)
WriteInt handle, gSpawnX
WriteInt handle, gSpawnY
For add.WAYPOINTS = Each WAYPOINTS
WriteLine handle,add\x+","+add\y
Next add
CloseFile handle
ChDir ".."
EndFunction
Function DrawTDMap()
img = MakeImage(ScreenWidth(),ScreenHeight())
DrawToImage img
Color 44,44,44
For add.WAYPOINTS = Each WAYPOINTS
add = After(add)
If add <> NULL Then tmpx = add\x : tmpy = add\y : add = Before(add) Else Exit
dis = Distance(add\x,add\y,tmpx,tmpy)
ang = GetAngle(add\x,add\y,tmpx,tmpy)
For a = 0 To dis
Circle add\x + Cos(ang) * a,add\y - Sin(ang) * a, gSnap
Next a
Next add
DrawToScreen
Return img
EndFunction
Function SnapToGridX(x)
Return X - (X Mod gSnap)
EndFunction
Function SnapToGridY(y)
Return Y - (Y Mod gSnap)
EndFunction
Function RestrictSpots()
ClearArray OFF
ReDim RestrictedSpots(ScreenWidth() / gSnap,ScreenHeight() / gSnap)
Lock SCREEN()
For a = 0 To ScreenHeight() / gSnap - 1
For i = 0 To ScreenWidth() / gSnap - 1
pix = GetPixel2(i * gSnap + gSnap /2,a * gSnap + gSnap/2)
R = RoundDown(pix Shr 16)
gb = pix - R Shl 16
G = RoundDown(gb Shr 8)
B = gb - G Shl 8
If r <> 0 And g <> 0 And b <> 0 Then RestrictedSpots(i,a) = 1
Next i
Next a
Unlock SCREEN()
EndFunction
Function Background()
img = MakeImage(ScreenWidth(),ScreenHeight())
DrawToImage img
For a = 0 To ScreenHeight() / gSnap
For i = 0 To ScreenWidth() / gSnap
Color 22,22,22
Box i * gSnap, a * gSnap, gSnap, gSnap, 0
Next i
Next a
DrawToScreen
Return img
EndFunction
Function UpdateEnemy()
For add.WAYPOINTS = Each WAYPOINTS
tm + 1
For uusi.ENEMY = Each ENEMY
If uusi\wp = tm And uusi\ttimer < Timer() Then
For i = 1 To uusi\speed
uusi\x = uusi\x + Cos(GetAngle(uusi\x,uusi\y,add\x + gSnap / 2,add\y + gSnap / 2))
uusi\y = uusi\y - Sin(GetAngle(uusi\x,uusi\y,add\x + gSnap / 2,add\y + gSnap / 2))
If Int(uusi\x) = add\x + gSnap / 2 And Int(uusi\y) = add\y + gSnap / 2 Then uusi\WP + 1 : Exit
Next i
Color uusi\r, uusi\g, uusi\b
Select uusi\char
Case "1"
Box uusi\x - 1, uusi\y - 1, 3, 3
Case "2"
Circle uusi\x - 1, uusi\y - 1, 3
Case "3"
Dot uusi\x , uusi\y
Default
Text uusi\x - TextWidth(uusi\char) / 2, uusi\y - TextHeight(uusi\char) / 2, uusi\char
EndSelect
Color cbred
Box uusi\x - 2, uusi\y - 3, 5 , 1
Color cbgreen
Box uusi\x - 2, uusi\y - 3,Float( 5 * (uusi\CurHP / uusi\MaxHP)) , 1
If uusi\WP = gAmount + 1 Then gLives - 1 : Delete uusi
EndIf
Next uusi
Next add
If gWaveStart = True Then
uusi.ENEMY = First(ENEMY)
If uusi = NULL Then gWaveStart = False
EndIf
EndFunction
Function StartWave()
If gWaveStart = False Then
If Wavelist(gCurrentWave + 1) <> "" Then
gMoney = gMoney * 1.05
gCurrentWave + 1
For a = 1 To CountWords(Wavelist(gCurrentWave),";")
tex$ = GetWord(Wavelist(gCurrentWave),a,";")
For i = 1 To Int(GetWord(Tex$,2,","))
gCounter + 1
For u = 0 To gEnemyTypeAmount
If Enemies(u,0) = GetWord(tex$,1,",") Then
uusi.ENEMY = New(ENEMY)
uusi\id = gCounter
uusi\char = Enemies(u,0)
uusi\r = GetWord(Enemies(u,2),1,",")
uusi\g = GetWord(Enemies(u,2),2,",")
uusi\b = GetWord(Enemies(u,2),3,",")
uusi\speed = Enemies(u,3)
uusi\wp = 1
uusi\ttimer = Timer() + 250 * (i + (a - 1) * Int(GetWord(Tex$,2,",")))
uusi\cash = Enemies(u,4)
uusi\MaxHP = int(Enemies(u,1))
uusi\CurHP = int(Enemies(u,1))
uusi\x = gSpawnX
uusi\y = gSpawnY
EndIf
Next u
Next i
Next a
gWaveStart = True
EndIf
EndIf
EndFunction
Function UpdateTurrets()
For i.TURRET = Each TURRET
shot = False
For uusi.ENEMY = Each ENEMY
If i\target = 0 And Distance(i\x,i\y,uusi\x,uusi\y) <= i\range Then i\target = uusi\ID
If i\target = uusi\ID And Distance(i\x,i\y,uusi\x,uusi\y) <= i\range And Timer() - i\reload > i\ttime Then
Select i\sort
Case 1
CreateBullet(1,i\x,i\y,GetAngle(i\x,i\y,uusi\x,uusi\y),i\speed,i\dmg,i\splash)
Case 2
CreateBullet(2,i\x,i\y,GetAngle(i\x,i\y,uusi\x,uusi\y),i\speed,i\dmg,i\splash)
Case 3
CreateBullet(3,i\x,i\y,GetAngle(i\x,i\y,uusi\x,uusi\y),i\speed,i\dmg,i\splash,uusi\id)
Case 4
CreateBullet(1,i\x,i\y,GetAngle(i\x,i\y,uusi\x,uusi\y),i\speed,i\dmg,i\splash)
EndSelect
i\reload = Timer()
shot = True
EndIf
Next uusi
Color cbwhite
If i\id = gSelected Then
Circle i\x - i\range ,i\y - i\range ,i\range * 2,0
Box 320,0,80,100,0
Text 322,2,"Dmg +" + Int((i\dmg * 1.6 - i\dmg))
Text 322,18,"Speed +" + abs(Int((i\ttime * 0.95 - i\ttime)))
Text 322,34,"Range +" + Int((i\range * 1.3 - i\range))
Text 322,52,"Price "+i\price
Box 322,68,76,20,0
Text 324,70,"Upgrade"
If MouseX() >322 And MouseX() < 398 And MouseY() > 68 And MouseY() < 88 And MouseHit(1) And gMoney >= i\price Then
gMoney = gMoney - i\Price
i\dmg = Int(i\dmg * 1.6)
i\ttime = Int(i\ttime * 0.95)
i\range = Int(i\range * 1.3)
i\Price = i\Price * 1.8
EndIf
EndIf
If shot = False Then i\target = 0
Select i\sort
Case 1
Color cbgreen
Box i\x - gSnap / 4,i\y - gSnap / 4,gSnap / 2,gSnap / 2,0
Box i\x - gSnap / 8 - 1,i\y - gSnap / 8 - 1,gSnap / 4 + 1,gSnap / 4 + 1
Case 2
Color cborange
Box i\x - gSnap / 4,i\y - gSnap / 4,gSnap / 2,gSnap / 2,0
Box i\x - gSnap / 8 - 1,i\y - gSnap / 8 - 1,gSnap / 4 + 1,gSnap / 4 + 1
Case 3
Color cbblue
Box i\x - gSnap / 8 - 1,i\y - gSnap / 8 - 1,gSnap / 4 + 1,gSnap / 4 + 1
Box i\x - gSnap / 4,i\y - gSnap / 4,gSnap / 2,gSnap / 2,0
Case 4
Color cbPurple
Box i\x - gSnap / 8 - 1,i\y - gSnap / 8 - 1,gSnap / 4 + 1,gSnap / 4 + 1
Box i\x - gSnap / 4,i\y - gSnap / 4,gSnap / 2,gSnap / 2,0
EndSelect
Next i
EndFunction
Function CreateBullet(sort,x,y,angle,speed,dmg,splash,target = 0)
Select sort
Case 1
a.BULLET = New(BULLET)
a\x = x
a\y = y
a\angle = angle
a\speed = speed
a\dmg = dmg
a\splash = splash
a\sort = 1
Case 2
For i = -1 To 1 Step 2
a.BULLET = New(BULLET)
a\x = x + Cos(angle + 45 * i) * 2
a\y = y - Sin(angle + 45 * i) * 2
a\angle = angle
a\speed = speed
a\dmg = dmg
a\splash = splash
a\sort = 1
Next i
Case 3
a.BULLET = New(BULLET)
a\x = x
a\y = y
a\angle = angle
a\speed = speed
a\dmg = dmg
a\splash = splash
a\sort = 0
a\target = target
EndSelect
EndFunction
Function UpdateBullets()
Color cbwhite
For a.BULLET = Each BULLET
hit = 0
If a\sort Then
For i = 1 To a\speed
a\x = a\x + Cos(a\angle)
a\y = a\y - Sin(a\angle)
For uusi.ENEMY = Each ENEMY
If Int(uusi\x) - a\splash / 2 < Int(a\x) And Int(uusi\x) + a\splash / 2 > Int(a\x) And Int(uusi\y) - a\splash / 2 < Int(a\y) And Int(uusi\y) + a\splash / 2 > Int(a\y) Then
uusi\CurHP = uusi\CurHP - a\dmg
If uusi\CurHP < 0 Then gMoney = gMoney + uusi\cash : Delete uusi
If hit = 0 Then
Dot a\x,a\y
EndIf
hit = 1
EndIf
Next uusi
Next i
If hit = 0 Then
Dot a\x,a\y
EndIf
Else
For uusi.ENEMY = Each ENEMY
If a\target = uusi\id Then
Line a\x,a\y,uusi\x,uusi\y
uusi\CurHP = uusi\CurHP - a\dmg
If uusi\CurHP < 0 Then Delete uusi
hit = 1
EndIf
Next uusi
EndIf
If hit = 1 Or outofscreen(a\x,a\y) Then Delete a
Next a
EndFunction
Function ReadConfig(tiedosto$, otsikko$)
otsikko$ = Lower(otsikko$)
If FileExists(tiedosto$) Then
f = OpenToRead(tiedosto$)
While Not EOF(f)
rivi$ = Lower(ReadLine(f))
If Left(rivi$, Len(otsikko$)+1) = otsikko$+"=" Then
arvo$ = Replace(rivi$, otsikko$+"=", "")
Return arvo$
EndIf
Wend
Return 0
Else
MakeError "Config file not found!"
EndIf
EndFunction
Function LoadEnemies()
gEnemyTypeAmount = 0
StartSearch
Repeat
file$ = FindFile()
If Lower(Right(file$,4))= ".txt" Then
Enemies(gEnemyTypeAmount,0) = ReadConfig(file$,"t"+"ype")
Enemies(gEnemyTypeAmount,1) = ReadConfig(file$,"hp")
Enemies(gEnemyTypeAmount,2) = ReadConfig(file$,"c"+"olor")
Enemies(gEnemyTypeAmount,3) = ReadConfig(file$,"speed")
Enemies(gEnemyTypeAmount,4) = ReadConfig(file$,"cash")
gEnemyTypeAmount + 1
EndIf
Until file$ = ""
EndSearch
EndFunction
Function Button(x,y,txt$)
Color cbblack
Box x,y,50,20
Color cbwhite
Box x,y,50,20,0
Text x + (50 - TextWidth(txt)) / 2, y + 2,txt
If MouseX() > x And MouseX() < x + 50 And MouseY() > y And MouseY() < y + 20 And MouseHit(1) Then Return 1
EndFunction
Function OutOfScreen(x,y)
If x < 0 Or y < 0 Or x > ScreenWidth() Or y > ScreenHeight() Then Return 1
EndFunction
Code: Select all
Include "Main Functions.cb"
FrameLimit 30
gSnap = 20
bg = Background()
LoadTDWP("test.txt")
mp = DrawTDMap()
Repeat
SetWindow "Money: " + gMoney + " - Lives: " + gLives
DrawImage bg,0,0
DrawImage mp,0,0
UpdateEnemy()
UpdateTurrets()
UpdateBullets()
RestrictSpots()
If gBuildMode = 1 Then
If RestrictedSpots(SnapToGridX(MouseX()) / gSnap,SnapToGridY(MouseY()) /gSnap) = 1 Then
Color cbred
Else
Color 0,170,0
EndIf
Box SnapToGridX(MouseX()),SnapToGridY(MouseY()),gSnap,gSnap,0
Select BuildType
Case 1
Color cbgreen
Box SnapToGridX(MouseX()) + gSnap / 4,SnapToGridY(MouseY()) + gSnap / 4,gSnap / 2,gSnap / 2,0
Box SnapToGridX(MouseX()) + gSnap / 4 + 2,SnapToGridY(MouseY()) + gSnap / 4 + 2,gSnap / 2 - 4,gSnap / 2 - 4
Case 2
Color cborange
Box SnapToGridX(MouseX()) + gSnap / 4,SnapToGridY(MouseY()) + gSnap / 4,gSnap / 2,gSnap / 2,0
Box SnapToGridX(MouseX()) + gSnap / 4 + 2,SnapToGridY(MouseY()) + gSnap / 4 + 2,gSnap / 2 - 4,gSnap / 2 - 4
Case 3
Color cbblue
Box SnapToGridX(MouseX()) + gSnap / 4,SnapToGridY(MouseY()) + gSnap / 4,gSnap / 2,gSnap / 2,0
Box SnapToGridX(MouseX()) + gSnap / 4 + 2,SnapToGridY(MouseY()) + gSnap / 4 + 2,gSnap / 2 - 4,gSnap / 2 - 4
Case 4
Color cbpurple
Box SnapToGridX(MouseX()) + gSnap / 4,SnapToGridY(MouseY()) + gSnap / 4,gSnap / 2,gSnap / 2,0
Box SnapToGridX(MouseX()) + gSnap / 4 + 2,SnapToGridY(MouseY()) + gSnap / 4 + 2,gSnap / 2 - 4,gSnap / 2 - 4
EndSelect
EndIf
If gSelected = 0 Then
If Button(350,0,"Buy") And gBuildMode = 0 Then
gBuildmode = 1
BuildType = 1
ClearMouse
EndIf
EndIf
If MouseHit(2) Then
if gBuildmode = 1 Then
gBuildMode = 0
BuildType = 0
ElseIf gSelected > 0 Then
gSelected = 0
EndIf
EndIf
If gBuildMode = 1 Then
For u = 0 To 3
Color cbblack
Box 300,u * 20,100,20
Color cbwhite
Box 300,u * 20,100,20,0
Text 302,u * 20 + 2,Turrets(u + 1)
Text 398 - TextWidth(Str(Prices(u + 1))), u * 20 + 2, Str(Prices(u + 1))
If MouseHit(1) And MouseX() > 300 And MouseX() < 400 And MouseY() > u * 20 And MouseY() < u * 20 + 20 Then BuildType = U + 1
Next u
Color cbblack
Box 300,80,100,20
Color cbwhite
Box 300,80,100,20,0
Text 302,82,"Exit"
If MouseHit(1) And MouseX() > 300 And MouseX() < 400 And MouseY() > 80 And MouseY() < 100 Then gBuildMode = 0
EndIf
If MouseHit(1) And gBuildmode = 1 Then
If RestrictedSpots(SnapToGridX(MouseX()) / gSnap,SnapToGridY(MouseY()) /gSnap) = 0 Then
If MouseX() > 300 And MouseY() < 100 Then
Else
If gMoney >= Prices(BuildType)
Select BuildType
Case 1
i.TURRET = New(TURRET)
i\x = SnapToGridX(MouseX()) + gSnap / 2
i\y = SnapToGridY(MouseY()) + gSnap / 2
i\price = Prices(BuildType)
i\ttime = 500
i\speed = 20
i\range = 25
i\dmg = 15
gCounter + 1
i\id = gCounter
i\sort = 1
i\splash = 5
Case 2
i.TURRET = New(TURRET)
i\x = SnapToGridX(MouseX()) + gSnap / 2
i\y = SnapToGridY(MouseY()) + gSnap / 2
i\price = Prices(BuildType)
i\ttime = 800
i\speed = 20
i\range = 35
i\dmg = 18
gCounter + 1
i\id = gCounter
i\sort = 2
i\splash = 5
Case 3
i.TURRET = New(TURRET)
i\x = SnapToGridX(MouseX()) + gSnap / 2
i\y = SnapToGridY(MouseY()) + gSnap / 2
i\price = Prices(BuildType)
i\ttime = 0
i\speed = 1
i\range = 25
i\dmg = 1
gCounter + 1
i\id = gCounter
i\sort = 3
i\splash = 1
Case 4
i.TURRET = New(TURRET)
i\x = SnapToGridX(MouseX()) + gSnap / 2
i\y = SnapToGridY(MouseY()) + gSnap / 2
i\price = Prices(BuildType)
i\ttime = 2000
i\speed = 20
i\range = 40
i\dmg = 40
gCounter + 1
i\id = gCounter
i\sort = 4
i\splash = 25
EndSelect
RestrictedSpots(SnapToGridX(MouseX()) / gSnap,SnapToGridY(MouseY()) /gSnap) = 1
gMoney = gMoney - Prices(BuildType)
EndIf
EndIf
EndIf
ElseIf MouseHit(1) And RestrictedSpots(SnapToGridX(MouseX()) / gSnap,SnapToGridY(MouseY()) /gSnap) = 1 And gBuildMode = 0 Then
For i.TURRET = Each TURRET
If i\x = SnapToGridX(MouseX()) + gSnap / 2 And i\y = SnapToGridY(MouseY()) + gSnap / 2 Then
If gSelected = i\id Then gSelected = 0 Else gSelected = i\id
Exit
EndIf
Next i
EndIf
StartWave()
If gLives < 1 Then End
DrawScreen
Forever
EDIT:
Vielä mappieditorin lähdekoodikin löytyi:
Code: Select all
Include "Main Functions.cb"
Repeat
DrawImage bg,0,0
DrawImage mp,0,0
Color cbwhite
Box SnapToGridX(MouseX()),SnapToGridY(MouseY()),gSnap,gSnap,0
If MouseHit(1) Then
gAmount + 1
add.WAYPOINTS = New(WAYPOINTS)
add\x = SnapToGridX(MouseX())
add\y = SnapToGridY(MouseY())
mp = DrawTDMap()
RestrictSpots()
ElseIf MouseHit(2) Then
For add.WAYPOINTS = Each WAYPOINTS
If SnapToGridX(MouseX()) = add\x And add\y = SnapToGridY(MouseY()) Then Delete add : RestrictSpots() : mp = DrawTDMap() : gAmount - 1 : Exit
Next add
ElseIf MouseHit(3) Then
gSpawnX = SnapToGridX(MouseX()) + gSnap / 2
gSpawnY = SnapToGridY(MouseY()) + gSnap / 2
EndIf
Color cbred
Circle gSpawnX - 1,gSpawnY - 1,3
If KeyHit(cbKeyS) Then SaveTDWP("test.txt") : Cls
If KeyHit(cbKeyL) Then LoadTDWP("test.txt") : mp = DrawTDMap()
gSpawnX = gSpawnX + RightKey() - LeftKey()
gSpawny = gSpawnY + DownKey() - UpKey()
DrawScreen
Forever
Hengität nyt manuaalisesti.
-
- Advanced Member
- Posts: 308
- Joined: Tue Nov 25, 2008 8:06 pm
- Contact:
Re: Tower defence
Muuten kokeilisin peliä, mutta F-Secure väitti kivenkovaan, että paketissa oli troijalainen ja poisti exen heti, kun purin paketin.
a.k.a. Gehock