Eigene Skriptengine - Fragen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

peacemaker

Betreff: Eigene Skriptengine - Fragen

BeitragSa, Nov 25, 2006 9:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich bastele mir für mein Spiel tehadon (http://tehadon.gimyweb.de) eine kleine Skriptengine.

Die mache ich damit ich für die verschiedenen Objekte so etwas einprogrammiere wie z.B dass wenn man vor der Tür steht und mit der Maus klickt der Spieler sich nach vorne bewegt, also durch die Tür geht.

Nun habe ich aber ein Problem:

Code: [AUSKLAPPEN]

pkt_objekt$   = Mid (zeilen$(gang),10,Len(pkt_objekt$))


In dieser Variable speichert sich bei jedem Durchgang eben dieses Wort


Nur eben diese Objekte haben nicht alle den gleichlangen name, wie z.B
mod_tür1, mod_schloss.

Wie mache ich nun dass, es sieht wie lange der Name des jeweiligen Objektes ist?


MfG
 

Ava

Gast

BeitragSa, Nov 25, 2006 10:07
Antworten mit Zitat
Zitat:
Wie mache ich nun dass, es sieht wie lange der Name des jeweiligen Objektes ist?


Das machst Du, indem Du ein Trennzeichen nimmst und die Position dieses Trennzeichens im String mit InStr() ermittelst. Je nach Konzept Deiner Skriptsprache könnte dies ein einfaches Leerzeichen, ein Komma, ein Trennstrich oder was auch immer sein - oder eine Kombination aus verschiedenen Symbolen bzw. verschiedenen Möglichkeiten.

+ Ava +

peacemaker

BeitragSa, Nov 25, 2006 10:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Tut mir Leid ich komme nicht ganz draus, was du da sagst.

Embarassed Embarassed Embarassed

Hier ist mal der Code:

Code: [AUSKLAPPEN]

Dim zeilen$(200)
For durchgaenge = 1 To 199
zeilen$(durchgaenge) = ReadLine (scriptdatei$)
Next


Global gang = 0
Repeat
gang = gang + 1
If gang = 2 Then gang = 1

pkt_setzen$   = Mid (zeilen$(gang),1,8)
pkt_objekt$   = Mid (zeilen$(gang),10,Len(pkt_objekt$))

If pkt_setzen$ = "SetPoint" Then Print  pkt_objekt$ ; Nur zum schauen ;obs geht
   
   
If KeyHit(1) Then Exit
Flip
Forever


Hier ist noch das Skript:

Code: [AUSKLAPPEN]


PlayAni animation1

SetPoint mob_tür1
SetPoint mod_laby
SetPoint mod_schl
SetPoint wir_haus


PlayAni animation2

SetTrailer trailer1

SetPoint mod_boot
SetPoint mod_spiegel

SetMyst raetsel1

SetPoint pfeilgbogen
PlayAni animation2

SetPoint wir_door



MfG

Hagbard

BeitragSa, Nov 25, 2006 11:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, du kopierst jeden Buchstaben einer Zeile bis du auf ein Trennzeichen stößt.

BSP:
ichbackekuchen#undsoweiter

Mid(), Instr() helfen dir weiter...
Als Parameter von Mid() kannst du ja einstellen wieviele Zeichen das sein sollen.
Mit Instr() ermittelst du, an welcher Stelle das Trennzeichen steht und bis dahin sollte er dann alle Zeichen kopieren.

Artemis

BeitragSa, Nov 25, 2006 11:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mal einen kleinen Kommentierten Beispielcode geschrieben. Ich hoffe er ist hilfreich.

Code: [AUSKLAPPEN]
Dim Script$(3)

Script$(0) = "CharakterAktion(Pinkeln)"
Script$(1) = "ObjektBewegung(Tür, Schließen)"
Script$(2) = "KartenBewegung(Rotation, 45°, Uhrzeigersinn)"
Script$(3) = " Funktion ( 45  , 34 ) ; Hier zeigt sich, dass man auch leerzeichen lassen und kommentare setzen kann"

For i = 0 To 3
   
   ; Hier weisen wir der Variablen die aktuelle Zeile zu
   Zeile$ = Script$(i)
   
   ; Hier ermitteln wir, an welcher Position innerhalb der Zeile die öffnende Klammer steht
   PositionDerKlammer = Instr(Zeile$, "(")
   ; Dann nehmen wir mittels "Left" den ganzen Linken Teil bis zu Position der Klammer -1,
   ; da wir die Klammer selber nicht mehr haben wollen.
   ; Gleichzeitig entfernen wir vorne und hinten mittels "Trim" alle Leerzeichen
   ; damit auch so etwas " AktionMachen ( test ) " möglich ist und er den Befehl
   ; trotzdem als "AktionMachen" und nicht als " AktionMachen " erkennt.
   Befehl$            = Trim(Left(Zeile$, PositionDerKlammer-1))
   ; Hier kürzen wir die Zeile, da wir den ersten Teil nicht mehr brauchen:
   ; Vorher: "ObjektBewegung(Tür, Schließen)", Nachher: "Tür, Schließen)"
   Zeile$             = Mid(Zeile$, PositionDerKlammer+1)
   
   Print "Befehl: " + Befehl$
   
   ; Solange wir jetzt innerhalb der Zeile ein Komma entdecken, wiederholen wir die Schleife.
   ; Das ist wichtig für Befehle, die mehrere Parameter erwarten.
   ; Außerdem überprüfen wir, ob das Komma vor der schließenden Klammer steht, da wir sonst ein
   ; Komma in einem möglichen Kommentar mitnehmen
   While (Instr(Zeile$, ",") < Instr(Zeile$, ")")) And (Instr(Zeile$, ",") <> 0)
      
      ; Hier wird wieder eine Position ermittelt, diesmal die des Kommas.
      PositionDesKommas = Instr(Zeile$, ",")
      ; Wieder das selber wie oben bei dem Befehl. Wir nehmen alles von links bis zum Komma,
      ; ohne das Komma selber. Außerdem entfernen wir wieder alle Leerzeichen davor und dahinter.
      Parameter$        = Trim(Left(Zeile$, PositionDesKommas-1))
      ; Und wieder wird die Zeile gekürzt, damit wir damit weiterarbeiten können.
      ; Vorher: "Tür, Schließen)", Nachher: " Schließen)"
      Zeile$            = Mid(Zeile$, PositionDesKommas+1)
      
      Print "  Parameter: " + Parameter$
      
   Wend
   
   ; Hier ermitteln wir die Position der schließenden Klammer. Wir gehen extra nicht einfach
   ; bis zum Ende der Zeile, sondern bis zu Klammer, damit soetwas wie Kommentare möglich sind.
   ; Beispiel: "Aktion(Charakter, Gehen, Links) ;Das lässt den Charakter nach links gehen"
   PositionDerZweitenKlammer = Instr(Zeile$, ")")
   ; Und wieder nehmen wir den letzten Parameter, mittels der Position der Klammer aus der Zeile
   ; raus und entfernen alle Leerzeichen davor und dahinter.
   Parameter$                = Trim(Left(Zeile$, PositionDerZweitenKlammer-1))
   
   Print "  Parameter: " + Parameter$
   
Next

Input()

peacemaker

BeitragSa, Nov 25, 2006 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Mmh naja danke erst mal an beide.

Und wie sieht es dann bei dem Code aus den ich gemacht habe?


MfG
 

Ava

Gast

BeitragSa, Nov 25, 2006 12:11
Antworten mit Zitat
Dein Code schafft nichts. Confused

Schau Dir mal llieber ganz genau das schöne Beispiel von Artemis an. Der hat sich so viel Mühe gegeben. Smile

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group