Jonez wrote: -- huomaa, että cb:ssä tyypit ja taulukot ovat automaattisesti globaaleja --
Ei pidä ihan paikkaansa tyyppien osalta. Tyyppikokoelman määrittely sinänsä on tietysti globaali, mutta yksittäistä tyyppi-instanssia ei voi käsitellä funktiossa suoraan, sillä sen handle ei ole validi funktion sisällä, vaikka se välitettäisiin parametrinä. Toisinsanoen tyyppi-instanssit eivät ole globaaleja, eikä niitä voi sellaisiksi määritelläkään.
Käsitelläksesi yksittäistä tyyppi-instanssia funktiossa ilman For Each -silmukkaa tulee parametrinä välittää tyyppi-instanssin ID, jonka saa funktiolla ConvertToInteger(tyyppiInstanssi). Vastaavasti funktiossa pitää käskeä typpiInstanssi.TYYPPI = ConvertToType(ID).
CoolBasic henkilökuntaa Tech-kehittäjä CoolBasic Classic, Cool VES
If ObjectsOverlap(hiiri,heppap) And MouseHit(1) Then
PositionObject boxi,ObjectX(heppap)-36,ObjectY(heppap)-72
objoverlap(boxi)
Text 10,10,"lol"
If iiiiii=1 Then
ShowObject boxi,ON
If ObjectsOverlap(hiiri,boxi) Then
Text 10,10,"texti"
EndIf
EndIf
EndIf
EDIT:
keksin vastauksen
Last edited by jaahas on Fri Apr 09, 2010 11:18 pm, edited 1 time in total.
Voisiko joku neuvoa miten saisin tehtyä tekoälyn, joka ohjaisi objektia. Eli liikuttaisi sitä ja ampuisi.
Projektit:
Ships Income Liikenne Suomesta Beta 2: valmis. Lataa tästä Projekti keskeytetty. Tehdään loppuun uuden CoolBasicin tulon jälkeen.
Diktaattori Beta 2: valmis. Lataa Tästä Projekti keskeytetty. Tehdään loppuun uuden CoolBasicin tulon jälkeen.
Type Vastus//Vastustajien type
Field O//Vastustajan objectin fieldi
Field Amp//Vastustajan ampumiselle muuttuja
EndType
Type ammus//ammusten type
Field AO//Ammuksen objectin fieldi
EndType
Ukko=LoadObject("Media\Guy.bmp",36)
ShowObject Ukko,OFF
For i = 0 To 3
Vastus.Vastus=New(Vastus)//Tekee uuden vastuksen
Vastus\O=CloneObject(Ukko)//Kopioi vastukselle objectin
Vastus\Amp=0//Laittaa Amp nollaan
PositionObject Vastus\O,Rand(-100,100),Rand(-100,100)
Next i
Objecti=CloneObject(Ukko)
PositionObject Objecti,0,-75
Luoti=LoadObject("Media\bullet.bmp",16)
ShowObject Luoti,OFF
Repeat
TurnObject Objecti,2: MoveObject Objecti,3
For Vastus.Vastus=Each Vastus//Käy vastuksetläpi
PointObject Vastus\O,Objecti//Kääntää Vastuksen objectiin
MoveObject Vastus\O,1//Liikuttaa vastusta
For Vastus2.Vasuts=Each Vastus//Käy vastukset uudestaan läpi overlapintakia.
If Vastus2\O=Vastus\O=0 Then
If ObjectsOverlap(Vastus2\O,Vastus\O) Then
Kulmaoli=ObjectAngle(Vastus2\O)
PointObject Vastus2\O,Vastus\O
MoveObject Vastus2\O,-2
RotateObject Vastus2\O,KulmaOli
EndIf
EndIf
Next Vastus2
If Vastus\Amp<50 Then //Ampuminen
Vastus\Amp+1
Else
Ammus.Ammus=New(Ammus)
Ammus\Ao=CloneObject(Luoti)
CloneObjectPosition Ammus\Ao,Vastus\O
CloneObjectOrientation Ammus\Ao,Vastus\O
Vastus\Amp=0
EndIf
Next Vastus.vastus
For Ammus.Ammus=Each Ammus//En tee tätä ammus systeemiä kokonaan...
MoveObject Ammus\Ao,6
Next Ammus.Ammus
DrawScreen
Forever
Type Vastus//Vastustajien type
Field O//Vastustajan objectin fieldi
Field Amp//Vastustajan ampumiselle muuttuja
EndType
Type ammus//ammusten type
Field AO//Ammuksen objectin fieldi
EndType
Ukko=LoadObject("Media\Guy.bmp",36)
ShowObject Ukko,OFF
For i = 0 To 3
Vastus.Vastus=New(Vastus)//Tekee uuden vastuksen
Vastus\O=CloneObject(Ukko)//Kopioi vastukselle objectin
Vastus\Amp=0//Laittaa Amp nollaan
PositionObject Vastus\O,Rand(-100,100),Rand(-100,100)
Next i
Objecti=CloneObject(Ukko)
PositionObject Objecti,0,-75
Luoti=LoadObject("Media\bullet.bmp",16)
ShowObject Luoti,OFF
Repeat
TurnObject Objecti,2: MoveObject Objecti,3
For Vastus.Vastus=Each Vastus//Käy vastuksetläpi
PointObject Vastus\O,Objecti//Kääntää Vastuksen objectiin
MoveObject Vastus\O,1//Liikuttaa vastusta
For Vastus2.Vasuts=Each Vastus//Käy vastukset uudestaan läpi overlapintakia.
If Vastus2\O=Vastus\O=0 Then
If ObjectsOverlap(Vastus2\O,Vastus\O) Then
Kulmaoli=ObjectAngle(Vastus2\O)
PointObject Vastus2\O,Vastus\O
MoveObject Vastus2\O,-2
RotateObject Vastus2\O,KulmaOli
EndIf
EndIf
Next Vastus2
If Vastus\Amp<50 Then //Ampuminen
Vastus\Amp+1
Else
Ammus.Ammus=New(Ammus)
Ammus\Ao=CloneObject(Luoti)
CloneObjectPosition Ammus\Ao,Vastus\O
CloneObjectOrientation Ammus\Ao,Vastus\O
Vastus\Amp=0
EndIf
Next Vastus.vastus
For Ammus.Ammus=Each Ammus//En tee tätä ammus systeemiä kokonaan...
MoveObject Ammus\Ao,6
Next Ammus.Ammus
DrawScreen
Forever
Ei se mitään vaikka onkin simppeli. Koitan itse muokata tuota hieman, mutta se on ihan hyvä. Kiitti.
Projektit:
Ships Income Liikenne Suomesta Beta 2: valmis. Lataa tästä Projekti keskeytetty. Tehdään loppuun uuden CoolBasicin tulon jälkeen.
Diktaattori Beta 2: valmis. Lataa Tästä Projekti keskeytetty. Tehdään loppuun uuden CoolBasicin tulon jälkeen.
Äläpäs trollaa. Kyllä ihmiset vastaa kysymykseesi muutenkin.
Saat exestä scrnin kun laitat Ohjauspaneeli -> Kansion asetukset -> Näytä -> "Piilota tunnettujen tiedostotyyppien tunnisteet" pois päältä ja sitten vaan uudelleennimeät "lol.exe":n "lol.scr":ksi.
ei toiminu kun tuli ilmotus että tiedostonimen muuttaminen voi aiheuttaa että tiedostoa ei voi enää käyttää kun siinä paino ok niin sit ku klikkas sitä oikeella nappulalla nii ei tullu sitä "asenna" oli vaan avaa ja kun sitä klikkas nii tuli virheilmotus että windows ei voi avata tätä tiedostoa
Entinen timpe99... Demokisa 2013 demo valmis, Check it out!
Tällä hetkellä työn alla on tankkipeli. Siitä tulee joku Parallax Scroller vai mikäs se on. Miten saan tehtyä, että tankit eivät ilmesty toisesta laidasta toistensa päällä? Tämän hetken koodi:
SCREEN 350,200
Type VIHOLLISET
Field kuva
Field x
Field y
EndType
vpati=LoadImage("Data/VihuPati.png")
opati=LoadImage("Data/OmaPati.png")
vihut=LoadImage("Data/VihuTankki.png")
pelaaja=LoadImage("Data/OmaTankki.png")
x=0
y=0
taso=1
For vi=1 To 10*taso
v.VIHOLLISET = New(VIHOLLISET)
v\kuva = CloneImage(vihut)
v\x = Rand(400,1000)
v\y = Rand(0,160)
Next vi
Repeat
For v.VIHOLLISET = Each VIHOLLISET
v\x-1
DrawImage v\kuva,v\x,v\y
Next v
DrawImage pelaaja,x,y
DrawScreen
Forever
//Seuraava koodi olettaa että vihollsiet tulevat joko ylä- tai alalaidasta, jolloin y-koordinaatti on vakio
//ja meidän täytyy arpoa pelkkä x-koordinaatti.
//Kun vihollista ollaan luomassa, arvotaan x-kohta sille ja tarkastetaan onko se liian lähellä muita vihollisia.
//Jos on, arvotaan uusi kohta:
While True 'loputon silmukka
x = Rand( 0, ScreenWidth() ) 'arvotaan paikka viholliselle x-suunnassa
liianLähellä = False 'nollataan muuttuja liianLähellä
//Käydään kaikki viholliset läpi. Huomaa että se uusin vihollinen minkä paikkaa arvotaan ei ole vielä luotu.
//Jos se on luotu tässä vaiheessa, pitäisi silmukassa ottaa se huomioon ( if iVihu <> uusiVihu Then )
For iVihu.vihut = Each vihut
If Abs( iVihu\x - x ) < 50 Then 'jos uuden ja vanhan vihun etäisyys x-suunnassa < 50
liianLähellä = True 'tällöin ollaan liian lähellä. Poistutaan silmukasta ja aloitetaan koko juttu alusta.
Exit
EndIf
Next iVihu
//Jos oltiin liian lähellä, muuttuja liianLähellä = True. Jos yksikään vihollinen ei ollut liian lähellä,
//tämä muuttuja = False jolloin voimme huoletta luoda arvottuun kohtaan uuden vihollisen.
If liianLähellä = False Then Exit
Wend
//x-kohta on arvottu (ja y-kohta toivottavasti tiedetään), luodaan vihu.
LuoVihu( x, y )
Varoitan vielä, että tuo koodi saattaa päättyä ikuiseen silmukkaan jos luot monta vihollista kerralla. Esim. Jos minimietäisyys on tuo 50 pikseliä, ja viholliset luodaan x-akselin suuntaiselle janalle joka on 800 pikseliä pitkä, voit pikaisella laskutoimituksella pääteltynä luoda turvallisesti korkeintaan 8 vihollista.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
<- protestipelikilpailun voittaja. Space War
Mites saisin tehtyä semmosen juttun, että ohjelmmalla voi avata vaikka kuva tiedoston? Että kirjottas vaikka "kuva1.png" niin se hakhee sen konneeesta muokattavaksi
Repeat
If I=OFF Then
Text 0,0,"Paina enteriä ladataksesi kuva"
If KeyHit(CbKeyReturn) Then
I=ON
Locate 0,0
ClearKeys
EndIf
Else
Muuttuja$=Input ("LoadImage:" )
Text 0,15,"Paina enteriä ladataksesi kuva!"
If KeyHit(CbKeyReturn) Then
I=OFF
CloseInput
ClearKeys
Kuva=LoadImage(Muuttuja$)
EndIf
EndIf
DrawScreen
Forever