Skripteistä

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
Kuinka

Skripteistä

Post by Kuinka »

Eli olen ohjelmoinut peliini skriptimoottoria. Kuinka onnistuisi skriptin sisäisen loopin tekeminen?

Eli skriptissä olisi vaikka näin:

Code: Select all

DoLoop
//koodia
EndLoop
Luonnollisesti DoLoopin.. EndLoopin välissä oleva olisi silmukka. Koitin jo seekfileä, ja totesin sen olevan liian hidas.
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: Skripteistä

Post by Aavesoturi »

Oletkos ajatellut lukea koko skriptitiedostoa merkkijonotaulukkoon, jolloin voisit vaan hypellä alkioden välillä. Näin skripti olis myös nopeampi kun ei tarvi koko ajan lukea tiedostoa. Tietty muistia kuluu jos on tosi iso skripti, mutta muutenkin sitä voi optimoida, eli esim. kun skriptitiedostossa lukee DoLoop, ni siinä skriptin sisältävässä taulukossa, jota suoritetaan, lukeekin vaan vaikka 'D' joka tarkoittaa samaa -> muistiakaan ei mee paljo mitään (eli tavallaan kääntäisit skriptin eräänlaiselle tavukoodille).
Esimerkkiä kiitos?

Re: Skripteistä

Post by Esimerkkiä kiitos? »

Saisikos Aavesoturin esittämästä tavasta jonkinlaista esimerkkiä?
Tällä hetkellä Skriptin lataus ja suoritus on näin:

Code: Select all

Dim merkkijono(D) As String 

LataaSkripti("Skripti.txt")

Function LataaSkripti(file$)

    If FileExists(file$) And IsDirectory(file$)=0  
        f=OpenToEdit(file$)    
        While Not EOF(f)
            merkkijono(d)=ReadLine(f) 
            For j = 0 To 20
                com$=GetWord(merkkijono(d),j)
                Select com$
                    Case "DoLoop"
                        //
                    Case "Print"
                        k$=ReadLine(f)
                        Print k$
                    Case "KeyW"
                        WaitKey 
                    Case "LoopEnd"
                       //
                End Select  
            Next j 
        Wend 
    Else
        MakeError "Virhe"
        CloseFile f
    EndIf 
    
    CloseFile f
    
End Function 
Cérebro
Newcomer
Posts: 35
Joined: Wed Jul 16, 2008 8:56 pm

Re: Skripteistä

Post by Cérebro »

Tein pikaisesti tälläisen "tavukoodiksi" kääntävän ja suorittavan tulkin:

Tulkki:

Code: Select all

Dim merkkijono(999) As String

skripti("skripti.txt")

Function skripti(filu$)
    // lue tiedosto taulukkoon
    f = OpenToRead(filu$)
    i = 0
    While Not EOF(F)
        s$ = Trim(ReadLine(f)) + " "
        // käännetään "tavukoodiksi"
        com$ = GetWord(s$, 1) // komento
        s$ = Right(s$, Len(s$) - Len(com$) - 1) // loppulinja
        Select Lower(com$)
            Case "print"
                s2$ = "p"
            Case "keyw"
                s2$ = "k"
            Case "doloop"
                s2$ = "d"
            Case "loopend"
                s2$ = "l"
        EndSelect
        merkkijono(i) = s2$ + " " + s$ // komento + loppulinja
        i + 1
    Wend
    CloseFile f
    
    // suorita skripti
    For i = 0 To 999
        s$ = merkkijono(i)
        com$ = GetWord(s$, 1)
        par$ = GetWord(s$, 2)
        Select Lower(com$)
            Case "p" // print
                Print par$
            Case "k" // keyw
                WaitKey
            Case "d" // doloop
                If par$ = 0 Then // jos parametri on 0
                    // mennään eteenpäin kunnes kohdataan vastaava l (loopend)
                    j = 1
                    Repeat
                        i + 1
                        com$ = GetWord(merkkijono(i), 1)
                        If com$ = "l" Then j - 1
                        If com$ = "d" Then j + 1
                    Until j = 0
                EndIf
            Case "l" // loopend
                // mennään taaksepäin kunnes kohdataan vastaava d (doloop)
                j = 1
                Repeat
                    i - 1
                    com$ = GetWord(merkkijono(i), 1)
                    If com$ = "d" Then j - 1
                    If com$ = "l" Then j + 1
                Until j = 0
        EndSelect
    Next i
End Function
Skriptitiedosto:

Code: Select all

DoLoop 1
  Print Hello
  KeyW
LoopEnd
cbLib | XMap
In development: EasyBasic - Basic-tyylinen peliohjelmointikieli
Post Reply