Vähän sitä vielä kehittelin, ja sain aikaiseksi tällaisen kohtalaisen hienon salamasysteemin, joka piirtää aikast hienon
salaman hiiren kohdalta. Sopii täydellisesti esim. scifi peleihin. Kokeile myös muuttaa asetuksia!!!
Code: Select all
// SIISTI SALAMASYSTEEMI
// PAHOITTELEN KOODIN MAHDOLLISTA VAIKEASELKOISUUTTA
// HUOMIOITAVAA
'""""""""""""""""""""""""""""""""""
// SÄHKÖN ASETUKSET KUTEN SALAMOIDEN MÄÄRÄ MUUTTUU SATUNNAISESTI
// JOKA KLIKKAUKSELLA, JOTEN KOKEILE VÄLILLÄ MYÖS PÄÄSTÄÄ HIIRESTÄ IRTI!
// KOKEILE PITÄÄ HIIREN NAPPIA POHJASSA JA LIIKUTELLA HIIRTÄ
// HUOMAATKO ERON JOS MUUTAT MAXLENGHT ARVOKSI VAIKKAPA 700?
// JOS LASKET MAXLENGHT ARVON LIIAN MATALAKSI SALAMA SYSTEEMISTÄ TULEE
// EPÄVAKAA, TAI JOPA TOIMIMATON. JOTTA SYSTEEMI TOIMISI PARHAITEN, VARMISTA
// ETTÄ MAXLENGHT ON VÄHINTÄÄN RUUDUN KORKEUS/2
SCREEN 800,600
SetWindow "Electricity Example"
FrameLimit 55
//MUUTTUJAT
//SALAMASYSTEEMIN HELPOIN MUOKKAUSTAPA ON SEURAAVILLA RIVEILLÄ!!!
mode=1
maxlenght=280 //VIIVAN MAKSIMIPITUUS
originalchaos#=1.9 //KAAOKSEN MÄÄRÄ. 0.0 - 4.0
chaoschaos#=0.5 //SÄÄTÄÄ KAAOKSEN KAAOKSELLISUUTTA, ELI KUINKA PALJON KAAOSARVO VAIHTELEE
viivoja#=4
quality=2 //SÄÄTÄÄ VIIVOJEN PÄÄTEPISTEIDEN TARKKUUTTA. ISOMMAT ARVOT NOPEUTTAVAT
//SYSTEEMIÄ, MUTTA SALAMAT SAATTAVAT MENNÄ HIEMAN RAJOJEN YLI.
// (VAIKKA QUALITYN LAITTAISI PARHAIMMALLE (1), SALAMAT MENEVÄT SILTI JOSKUS HIEMAN YLI)
drawdots=0 //KÄYTETÄÄNKÖ "SCATTER" EFEKTIÄ
//(PIIRRETÄÄN PIENIÄ "HIUKKASIA" VIIVAN YMPÄRILLE)
//MONTAKO SALAMAA SAA OLLA VÄHINTÄÄN JA KORKEINTAAN
minpoints=3
maxpoints=7
Dim points(100,2)
//VARSINAINEN LOOPPI ALKAA
Repeat
Text 700,15,"FPS: "+FPS()
Gosub mainmenu
Text 40,15,"Click the left mouse button to make electricity"
Text 40,570,"Press F1 to show control panel"
//ALUKSI VALITAAN SATUNNAISIA PÄÄTEPISTEITÄ SÄHKÖLLE
//TOISIN SANOEN: KUN KLIKATAAN HIIRTÄ, LASKETAAN MINNE SALAMAT
//HIIRESTÄ KULKEVAT
If mouse1hit=1 Then
Gosub etsipisteet //ETSITÄÄN SALAMILLE PÄÄTEPISTEET
End If
//SALAMOIDEN PIIRTÄMINEN JA PÄÄTEPISTEIDEN MUUTTAMINEN REAALIAJASSA
If mouse1=1 Then
Gosub updatepisteet
End If
Color 255,255,255
Box 40,40,720,520,0
Box 39,39,722,522,0
DrawScreen
Forever
Function drawelectricline(x1#,y1#,x2#,y2#,kaaos#,r,g,b,scatter,lines)
//SALAMA/SÄHKÖ MUODOSTETAAN PIENISTÄ VIIVOISTA. TÄSSÄ SÄÄDETÄÄN
//VIIVOJEN MÄÄRÄ VASTAAMAAN PUOLTA MATKAN PIKSELEISTÄ
parts#=Distance(x1#,y1#,x2#,y2#)/lines
xx1#=x1#
yy1#=y1#
xx2#=xx1#
yy2#=yy1#
move#=Distance(x1#,y1#,x2#,y2#)/parts#
xx2#=xx2#+Cos( GetAngle(xx1#,yy1#,xx2#,yy2#) )*move#
yy2#=yy2#-Sin( GetAngle(xx1#,yy1#,xx2#,yy2#) )*move#
For i=1 To parts
xx1#=xx1#+Cos( GetAngle(xx1#,yy1#,xx2#,yy2#) )*move#
yy1#=yy1#-Sin( GetAngle(xx1#,yy1#,xx2#,yy2#) )*move#
xx2#=xx2#+Cos( GetAngle(xx1#,yy1#,x2#,y2#) )*move#
yy2#=yy2#-Sin( GetAngle(xx1#,yy1#,x2#,y2#) )*move#
xx2#=xx2#+Rnd(-kaaos#,kaaos#)
yy2#=yy2#+Rnd(-kaaos#,kaaos#)
cRED=r+Rand(-45,45)
cGREEN=g+Rand(-45,45)
cBLUE=b+Rand(-45,45)
If cRED<0 Then cRED=0
If cRED>255 Then cRED=255
If cGREEN<0 Then cGREEN=0
If cGREEN>255 Then cGREEN=255
If cBLUE<0 Then cBLUE=0
If cBLUE>255 Then cBLUE=255
Color cRED,cGREEN,cBLUE
Line xx1#,yy1#,xx2#,yy2#
If scatter=1 Then Dot xx1+Rand(-2,2),yy1+Rand(-2,2)
Next i
End Function
etsipisteet:
tries=0
pointteja=Rand(minpoints,maxpoints)
//MUUTETAAN KAAOSARVOA, MUTTEI ANNETA SEN KUITENKAAN KOSKAAN
//MENNÄ LIIAN PITKÄLLE ALKUPERÄISESTÄ
chaos#=originalchaos#+Rnd(-chaoschaos#,chaoschaos#)
For pointti=1 To pointteja
retry:
tries+1
If tries=10 Then Goto seuraava
pistex#=MouseX()
pistey#=MouseY()
angle#=Rnd(360.0)
//LUODAAN NÄKYMÄTÖN PISTE, SIJOITETAAN SE HIIREN KOHDALLE, JA
//ALETAAN LIIKUTTAA SITÄ SATUNNAISEEN SUUNTAAN.
//KUN TÖRMÄTÄÄN SEINÄÄN TALLENNETAAN SALAMAN PÄÄTEPISTEEN
//KORDINAATIT. JOS HALUAISIT TEHDÄ TÄMÄN SAMAN SALAMASYSTEEMIN
//TOIMIMAAN TILEMAPIN KANSSA, SINUN PITÄISI LAITTAA PISTEEN TILALLE
//NÄKYMÄTÖN OBJEKTI, JA KORVATA...
//If pistex#=<40 Or pistex#=>760 Then törmäys=1
//...RIVIT TAVALLISELLA COUNTCOLLISIONS KOMENNOLLA
For i=1 To Int(maxlenght/quality)
pistex#=pistex#+Cos(angle#)*quality
pistey#=pistey#-Sin(angle#)*quality
törmäys=0
//TÄSSÄ TÖRMÄYS VARSINAISESTI MÄÄRITELLÄÄN
If pistex#=<40 Or pistex#=>760 Then törmäys=1
If pistey#=<40 Or pistey#=>560 Then törmäys=1
//JOS PISTE OLI LIIAN KAUKANA, KOKEILLAAN UUDELLEEN ERI ASTEIN
//TOISIN SANOEN LASKETTU SALAMAN PÄÄTEPISTE OLI LIIAN KAUKANA
//HIIRESTÄ, JA KOSKA EMME HALUA ÄLYTTÖMÄN PITKIÄ SALAMOITA
//KOKEILEMME MUODOSTAA SALAMAN PÄÄTEPISTEEN ERI PAIKKAAN
If Distance(MouseX(),MouseY(),pistex#,pistey#)=>maxlenght Then Goto retry
If törmäys=1 Then
points(pointti,1)=pistex#
points(pointti,2)=pistey#
//LAKATAAN TUTKIMASTA TÄTÄ PISTETTÄ JA HYPÄTÄÄN SEURAAVAAN
Goto seuraava
End If
Next i
seuraava:
Next pointti
Return
updatepisteet:
For pointti=1 To pointteja
hiirix=MouseX()
hiiriy=MouseY()
//TÄSSÄ KOHTAA VARSINAISESTI PIIRRETÄÄN SE SALAMA
drawelectricline( hiirix,hiiriy,points(pointti,1),points(pointti,2),chaos#,Rand(0,10),Rand(160,180),Rand(240,255),drawdots,viivoja# )
//PARAMETRIT OVAT:
// SALAMAN ALOITUSPISTE X, SALAMAN ALOITUSPISTE Y, SALAMAN LOPETUSPISTE X, SALAMAN LOPETUSPISTE Y, KAAOKSEN MÄÄRÄ,
// SALAMAN VÄRI RED, SALAMAN VÄRI GREEN, SALAMAN VÄRI BLUE, SCATTER EFEKTI (VIIVAN YMPÄRILLE PIIRRETÄÄN PISTEITÄ)
// JA LOPUKSI LUKU, JOKA KERTOO MONESTAKO PALASTA SALAMA KOOSTUU. JOS LAITAT LUVUKSI 2 NIIN 100 PIKSELIN PITUINEN SALAMA
// KOOSTUU 50 PALASTA (100/2=50), JA JOS LAITAT LUVUKSI 4, 100 PIKSELIN PITUINEN SALAMA KOOSTUU 25 VIIVASTA (100/4=25)
tries=0
//JOS HIIRI ON LIIKKUNUT LIIAN KAUAS PÄÄTEPISTEESTÄ ETSITÄÄN PISTEELLE UUSI
//SIJAINTI.
//JOSKUS SÄHKÖN PÄÄTEPISTEIDEN SIJAINTI VOI MUUTTUA MUUTEN VAIN
sattuma=Rand(100)
If (Distance(MouseX(),MouseY(),points(pointti,1),points(pointti,2))=>maxlenght+Rand(-50,50)) Or sattuma=1 Then
retry2:
tries+1
//JOS JOSTAIN SYYSTÄ KYMMENENKIN YRITYKSEN PÄÄSTÄ EI OLE LÖYDETTY SOPIVAA
//PISTETTÄ UUDELLE SALAMALLE (ELI MAXLENGHT ON LIIAN PIENI) HYLÄTÄÄN YRITYS
If tries=10 Then Goto exit1
pistex#=MouseX()
pistey#=MouseY()
angle#=Rnd(360.0)
//PÄÄTEPISTETTÄ LIIKUTETAAN ETEENPÄIN 220 KERTAA
//JOS 220 KERRAN AIKANA PISTE EI TÖRMÄÄ KOKEILLAAN UUDELLEEN
//ERI LÄHTÖKULMALLA
For i=1 To Int(maxlenght/quality)
pistex#=pistex#+Cos(angle#)*quality
pistey#=pistey#-Sin(angle#)*quality
törmäys=0
//TÄSSÄ TÖRMÄYS VARSINAISESTI MÄÄRITELLÄÄN
If pistex#=<40 Or pistex#=>760 Then törmäys=1
If pistey#=<40 Or pistey#=>560 Then törmäys=1
//JOS PISTE OLI LIIAN KAUKANA, KOKEILLAAN UUDELLEEN ERI ASTEIN
If Distance(MouseX(),MouseY(),pistex#,pistey#)=>maxlenght+Rand(-40,40) Then Goto retry2
//JOS PISTE ON VIHDOINKIN TÖRMÄNNYT, TALLENNETAAN KOORDINAATIT
//JA HYPÄTÄÄN SEURAAVAAN SALAMAN PÄÄTEPISTEESEEN
If törmäys=1 Then
points(pointti,1)=pistex#
points(pointti,2)=pistey#
Goto Exit1
End If
Next i
End If
exit1:
Next pointti
Return
// HALLINTAPANEELI
mainmenu:
mouse1=MouseDown(1)
mouse1hit=MouseHit(1)
If KeyHit(cbkeyf1) Then menu+1
If menu=2 Then menu=0
If menu=1 Then
Text 50,50,"Q / A Increase / decrease amount of chaos ( "+originalchaos#+" )"
Text 50,80,"W / S Increase / decrease minium number of lightnings ( "+minpoints+" )"
Text 50,110,"E / D Increase / decrease maximum number of lightnings ( "+maxpoints+" )"
Text 50,140,"R / F Increase / decrease maximum lenght of lightning ( "+maxlenght+" )"
Text 50,170,"T / G Enable / disable ''scatter'' effect ( "+drawdots+" )"
End If
If KeyHit(cbkeyq) Then originalchaos#+0.2
If KeyHit(cbkeya) Then originalchaos#-0.2
If KeyHit(cbkeyw) Then minpoints+2
If KeyHit(cbkeys) Then minpoints-2
If KeyHit(cbkeye) Then maxpoints+2
If KeyHit(cbkeyd) Then maxpoints-2
If KeyDown(cbkeyr) Then maxlenght+2
If KeyDown(cbkeyf) Then maxlenght-2
If KeyHit(cbkeyt) Then drawdots=1
If KeyHit(cbkeyg) Then drawdots=0
Return
Tästä systeemistä on mahdollista tehdä tilemappia tukeva versio.
Lainaus koodista:
LUODAAN NÄKYMÄTÖN PISTE, SIJOITETAAN SE HIIREN KOHDALLE, JA
ALETAAN LIIKUTTAA SITÄ SATUNNAISEEN SUUNTAAN.
KUN TÖRMÄTÄÄN SEINÄÄN TALLENNETAAN SALAMAN PÄÄTEPISTEEN
KORDINAATIT. JOS HALUAISIT TEHDÄ TÄMÄN SAMAN SALAMASYSTEEMIN
TOIMIMAAN TILEMAPIN KANSSA, SINUN PITÄISI LAITTAA PISTEEN TILALLE
NÄKYMÄTÖN OBJEKTI, LIIKUTTAA SITÄ [pistex#=pistex#+Cos(angle#)*quality]
RIVIEN KOHDALLA JA KORVATA...
If pistex#=<40 Or pistex#=>760 Then törmäys=1
...RIVIT TAVALLISELLA COUNTCOLLISIONS KOMENNOLLA
Toivottavasti joku ymmärsi mitä tarkoitin.