Haluaisin tietää että onko mitään mahdollisuuksia laittaa taulukko TYPEn Fieldiksi?
Luulen olevani aika varma, että ei, mutta kysynpä nyt kumminkin...
Taulukko ja type
Re: Taulukko ja type
Ei suoraan, mutta kikkailulla voi tehdä suunnilleen vastaavan asian.
Luo taulukko normaalisti, mutta laita siihen yksi ylimääräinen ulottuvuus. Aseta ulottuvuudelle kooksi typen jäsenien maksimimäärä. Eli jos oletat, että tyyppiisi tulee korkeintaan 50 jäsentä, niin sitten ulottuvuuden kooksi laitat 50. Jos olet täysin epävarma, miten paljon tyyppiin tulee jäseniä, muuta taulukon kokoa tarvittaessa myöhemmin ReDimillä.
Seuraavaksi tarvitset tyyppiin kentän, jossa on jokaiselle jäsenelle yksilöllinen indeksi (juokseva luku 1,2,3... jne). Tällä indeksillä kukin jäsen voi hakea taulukosta omia tietojaan ilman sotkeutumista muiden jäsenten tietoihin.
Vaikeutena tässä on taulukon indeksien riitävyys. Kun tyypin jäsen poistetaan, sillä oleva indeksi pitäisi samalla vapauttaa seuraavaksi luotavien jäsenten käyttöön. Käytännössä saatat tarvita jonkinlaisen listan vapaana olevista indekseistä.
Luo taulukko normaalisti, mutta laita siihen yksi ylimääräinen ulottuvuus. Aseta ulottuvuudelle kooksi typen jäsenien maksimimäärä. Eli jos oletat, että tyyppiisi tulee korkeintaan 50 jäsentä, niin sitten ulottuvuuden kooksi laitat 50. Jos olet täysin epävarma, miten paljon tyyppiin tulee jäseniä, muuta taulukon kokoa tarvittaessa myöhemmin ReDimillä.
Seuraavaksi tarvitset tyyppiin kentän, jossa on jokaiselle jäsenelle yksilöllinen indeksi (juokseva luku 1,2,3... jne). Tällä indeksillä kukin jäsen voi hakea taulukosta omia tietojaan ilman sotkeutumista muiden jäsenten tietoihin.
Vaikeutena tässä on taulukon indeksien riitävyys. Kun tyypin jäsen poistetaan, sillä oleva indeksi pitäisi samalla vapauttaa seuraavaksi luotavien jäsenten käyttöön. Käytännössä saatat tarvita jonkinlaisen listan vapaana olevista indekseistä.
Re: Taulukko ja type
Okei, kiitos.
Tuo ei kyllä helpota juuri yhtään sitä mihin olisin tuota tarvinnut, mutta kiitos kuitenkin.
Tuo ei kyllä helpota juuri yhtään sitä mihin olisin tuota tarvinnut, mutta kiitos kuitenkin.
- Sami The Great
- Advanced Member
- Posts: 485
- Joined: Tue Aug 28, 2007 4:15 pm
- Contact:
Re: Taulukko ja type
Itselläni tuli sama ongelma vastaan, kun tein scripti moottoria strategia peliimme. Minun täytyi saada yksi Field sisältämään monta eri tietokenttää ja taulukko olisi ollut tähän ratkaisu. No tein oman taulukointi systeemin merkkijonoilla eli typen field kohtaan laitetaan vain tavallinen merkkijono, joka sisältää eri tunnisteita, mistä saadaan tieto, että mistä taulukon solu alkaa ja loppuu jne. Kannattaa myös tehdä jonkinlaiset funktiot helpottamaan asiaa.Sly_Jack0 wrote:Haluaisin tietää että onko mitään mahdollisuuksia laittaa taulukko TYPEn Fieldiksi?
Luulen olevani aika varma, että ei, mutta kysynpä nyt kumminkin...
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
CoolBasickin käyttäjä vuodesta 2004.
Re: Taulukko ja type
Merkkijonojen käyttö on hidasta, jos joudut parsimaan niitä jatkuvasti ohjelmassa, joten suosittelen muistipalojen käyttöä.Sami The Great wrote:Itselläni tuli sama ongelma vastaan, kun tein scripti moottoria strategia peliimme. Minun täytyi saada yksi Field sisältämään monta eri tietokenttää ja taulukko olisi ollut tähän ratkaisu. No tein oman taulukointi systeemin merkkijonoilla eli typen field kohtaan laitetaan vain tavallinen merkkijono, joka sisältää eri tunnisteita, mistä saadaan tieto, että mistä taulukon solu alkaa ja loppuu jne. Kannattaa myös tehdä jonkinlaiset funktiot helpottamaan asiaa.Sly_Jack0 wrote:Haluaisin tietää että onko mitään mahdollisuuksia laittaa taulukko TYPEn Fieldiksi?
Luulen olevani aika varma, että ei, mutta kysynpä nyt kumminkin...
Tässä 10 minutissa tehty esimerkki..
Code: Select all
Type TEST
Field tiedot
EndType
AddTieto("dodo",200,10)
AddTieto("test",0,0)
AddTieto("asdasd",2230,13)
AddTieto("Mo",21324,234)
Repeat
y=0
Text 20,10,"Player Scores Level"
For aa.TEST = Each TEST
Text 20,30 + y * 15, GetName(aa\tiedot)
Text 120,30 + y * 15, GetScores(aa\tiedot)
Text 220,30 + y * 15, GetLevel(aa\tiedot)
y+1
Next aa
DrawScreen
Forever
Function Addtieto(name$,scores,lvl)
aa.TEST = New( TEST )
aa\tiedot = MakeMEMBlock( Len(name$) + 10 )
// kirjotetaan tulevan merkkijonon pituus
PokeByte aa\tiedot, 0, Len(name$)
// merkataan jokainen kirjain asii merkeillä muistiin
For a=1 To Len(name$)
PokeByte aa\tiedot, a, Asc( Mid( name$,a,1 ) )
Next a
// merkataan lvl ja scores merkkijonon jälkeen
PokeInt aa\tiedot, Len(name$) + 1, scores
PokeInt aa\tiedot, Len(name$) + 5, lvl
EndFunction
Function GetScores( mem )
Return PeekInt( mem, PeekByte(mem,0) + 1 )
EndFunction
Function GetLevel( mem )
Return PeekInt( mem, PeekByte(mem,0) + 5 )
EndFunction
Function GetName( mem )
For a=1 To PeekByte(mem, 0)
txt$ = txt$ + Chr( PeekByte( mem, a ) )
Next a
Return txt$
EndFunction
Tässä vielä muistipalahommeleille toteutettu paikka väreille.. Tästä kun voi olla monellekkin hyötyä.
Tein itse nopeusvertailun nyt merkkijonojen ja muistipalojen siirto nopeudesta, niin muistipalat olivat ~75% nopeampia.
Code: Select all
Type TEST
Field vari
EndType
AddColor(cbred)
AddColor(cbmagenta)
AddColor(cbgreen)
AddColor(cbblue)
AddColor(cblightblue)
AddColor(cbdarkblue)
AddColor(100,200,100)
Repeat
Color cbwhite
Text 20,10,"Red Green BLUE"
y=0
For aa.TEST = Each TEST
Color GetRed(aa\vari), GetGreen(aa\vari),GetBlue(aa\vari)
Text 20, 30 + y * 15, GetRed(aa\vari)
Text 120,30 + y * 15, GetGreen(aa\vari)
Text 220,30 + y * 15, GetBlue(aa\vari)
y+1
Next aa
If KeyHit(28) Then
For bb.TEST = Each TEST
SwitchColor(bb\vari,Rand(255),Rand(255),Rand(255))
Next bb
EndIf
DrawScreen
Forever
Function AddColor(r,g,b)
aa.TEST = New( TEST )
aa\vari = MakeMEMBlock( 3 ) // 3 * 1
// merkataan varit muistiin
PokeByte aa\vari, 0, r
PokeByte aa\vari, 1, g
PokeByte aa\vari, 2, b
EndFunction
Function SwitchColor(mem,r,g,b)
If mem = 0 Then MakeError "Muistipalaa ei ole olemassa"
PokeByte mem, 0, r
PokeByte mem, 1, g
PokeByte mem, 2, b
EndFunction
Function GetRed( mem )
Return PeekByte( mem, 0)
EndFunction
Function GetGreen( mem )
Return PeekByte( mem, 1)
EndFunction
Function GetBlue( mem )
Return PeekByte( mem, 2)
EndFunction
Tekeillä pikkupelejä ja ohjelmia