FileRead Script Problem

  • FileRead Script Problem

    Folgendes:
    Ich habe ein Script programmiert, welches aus einer .txt Datei zufällig 5 aufeinander folgende Zeilen ausliest (nennen wir diese 5 Zeilen jeweils einen Einsatz).

    Beispiel einer .txt Datei:

    Quellcode

    1. 2 // Anzahl der Einsätze in der Datei (2 Stück à 5 Zeilen)
    2. Zeile eins // Erster Einsatz
    3. Zeile zwei
    4. Zeile drei
    5. Zeile vier
    6. Zeile fünf
    7. Zeile1 // Zweiter Einsatz
    8. Zeile2
    9. Zeile3
    10. Zeile4
    11. Zeile5
    Alles anzeigen


    Hier das Script:

    GML-Quellcode

    1. global.datei="datei.txt"
    2. if (file_exists(global.datei))
    3. {
    4. file = file_text_open_read(global.datei);
    5. global.anzahl=file_text_read_real(file) // Anzahl der Einsätze wird eingelesen
    6. b=0
    7. file_text_readln(file);
    8. c=round(random(global.anzahl-1))*5 // Zufallszahl mit 5 multiplizieren
    9. // da jeder Einsatz 5 Zeilen hat
    10. while(c>0) // bis zu dem 5er Zeilenblock lesen, wo der Einsatz beginnt
    11. {
    12. file_text_readln(file);
    13. c -= 1
    14. }
    15. while(b<5) // die 5 Zeilen einlesen: global.einsatz
    16. {
    17. str = file_text_read_string(file);
    18. file_text_readln(file);
    19. global.einsatz += "#" + str
    20. b+=1
    21. }
    22. file_text_close(file)
    23. }
    Alles anzeigen


    Das ganze funktioniert auch wunderbar, die .txt Datei kann beliebig viele Einsätze haben und wird zufällig ausgelesen.
    Und jetzt kommt das Problem: Wie kann ich es machen, dass ein bereits drangewesener Einsatz nicht nochmals ausgelesen wird?
    Ich hab keine Idee wie man das anstellen könnte, hab schon alles mögliche ausprobiert. Vielleicht kann mit jemand bei diesem Problem helfen, falls es jemand verstanden hat..^^
  • Speichere doch einfach in ein Array die Zufallswerte die schonmal da waren. Und lass das so oft "Zufallen" bis die Zufalls Zahl keiner in dem Array gleicht.
    Oder: Was wahrscheinlich sinnvoller ist: Lies die Textdatei aus, erstell damit eine Zweite. Nun kannst du löschen was du nicht brauchst.
    PULSE

    Zweispieler [||||||||||]
    Einspieler [||||||||||]

    [Die Entgrater ist auf Eis gelegt]
  • Trompadon schrieb:

    Speichere doch einfach in ein Array die Zufallswerte die schonmal da waren. Und lass das so oft "Zufallen" bis die Zufalls Zahl keiner in dem Array gleicht.
    Oder: Was wahrscheinlich sinnvoller ist: Lies die Textdatei aus, erstell damit eine Zweite. Nun kannst du löschen was du nicht brauchst.
    Das mit dem Array klingt gut, könntest du mir vielleicht ein kleines Beispiel dazu schreiben? Kriegs irgendwie nicht so ganz hin :(
  • Mal schaun, also:
    vorher values=-1 setzen

    GML-Quellcode

    1. do
    2. {
    3. c=floor(random(x))
    4. same=false
    5. for (i=0;i<=values;i+=1)
    6. {
    7. if value[i]=c
    8. {
    9. break; same=true;
    10. }
    11. }
    12. if same=false
    13. {
    14. values+=1;value[values]=c;break;
    15. }
    16. }
    17. until (0=1)
    Alles anzeigen


    Ich weiß das erzeugt einen Endlosloop, der wird aber eh mit break unterbrochen...
    PULSE

    Zweispieler [||||||||||]
    Einspieler [||||||||||]

    [Die Entgrater ist auf Eis gelegt]
  • Ich habs... Lade es grade hoch... in ein paar Minuten verfügbar!!
    trompadon.bplaced.net/filemanager/game.rar
    verdammt, habe falsche Textdatei hochgeladen. Nimm einfach wieder deine!!
    PULSE

    Zweispieler [||||||||||]
    Einspieler [||||||||||]

    [Die Entgrater ist auf Eis gelegt]

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Trompadon ()