Buchstarben umwandeln. aus a wird b (z.B)

  • Buchstarben umwandeln. aus a wird b (z.B)

    hay,
    ich habe eine frage und zwar: so ne art "geheim sprache editor" machen für nen kumpel und mir. und zwar soll ein a durch nen u oder so ersetzt werden. Am ende soll dann ein ganzer satzt umcodiert werden.
    Und ich möchte auch noch hin bekommen das man dann um codierten satzt wieder um coden kann!

    ich habe mir gedacht, ich starte bei dem Create Event mit:
    vr_a=get_string("Text:","");

    im draw event:
    draw_text(x,y,string(ding));

    Soweit so gut :D
    Nur jetzt weiß ich nicht weiter ich habe es einfach mal mit einen buchstarben versucht (im step event doch irgendwie will es net):
    versuchtes step event:
    if vr_a=string(a) {vr_a=string(b)};

    wie geht es? was habe ich falsch gemacht? wie macht man es später dann mit einen zusammen hängenden text?

    mfg mav
  • Hi, ich hab da mal was geschrieben:

    GML-Quellcode

    1. //create event
    2. str="ab" //der text der übersetzt werden soll
    3. str2="" //der text der später rauskommt
    4. s=1 //eine zählervariable
    5. //draw event
    6. repeat(string_length(str)) //das folgende wird sooft wiederholt, wie es zeichen im string gibt
    7. {
    8. switch(string_char_at(str,s)) //hier wird abgefragt welches zeichen an der stelle "s" ist
    9. {
    10. case "a": // wenn an stelle "s" ein "a" ist
    11. str2+=string("b") // wird dem string ein "b" hinzugefügt (bei b muss das zeichen stehen welches du für a haben willst
    12. break;
    13. case "b": //das gleiche wie oben nur mit anderen buchstaben
    14. str2+=string("c")
    15. break;
    16. //hier können dann weitere buchstaben stehen
    17. }
    18. s+=1 //s wird erhöht, damit das nächste zeichen drankommt
    19. }
    20. draw_text(x,y,str2) //der dabei raukommende text wird gedrawt
    Alles anzeigen
  • Wenn du ne simple Caesar-Verschlüsselung haben willst, dann musst du lediglich alle Buchstaben in ihren ASCII-Code umwandeln, eine bestimmte Zahl dazu addieren oder subtrahieren, und darauf achten, dass sie innerhalb des Buchstabenbereiches sind, wenn du sie wieder in Buchstaben umwandeln willst. Wenn du dabei auf Groß- und Kleinschreibung achten willst, so musste du erst prüfen, um was für einen Buchstaben es sich handelt, um dann den entsprechenden Algorithmus anzuwenden. Ich empfehle dir aber, nur Großbuchstaben zu benutzen. Dann sähe ein Skript, das einen String verschlüsselt so aus:

    GML-Quellcode

    1. //argument0 ist der Text
    2. //argument1 ist der Schlüssel; sollte zwischen 0 und 25 sein
    3. var i, char, eingabe, ausgabe;
    4. eingabe:= string_upper(argument0);
    5. ausgabe:= '';
    6. for (i:=1; i<=string_length(eingabe), i+=1)
    7. {
    8. char:= string_char_at(eingabe,i);
    9. if ((ord(char)>=65) && (ord(char)<=90))
    10. {
    11. char:=chr( ((ord(char)-39+argument1) mod 26)+65);
    12. }
    13. ausgabe:=ausgabe+char;
    14. }
    15. return ausgabe;
    Alles anzeigen


    Und um das wieder zu entschlüsseln muss man nur das Operationszeichen mit dem Schlüssel umkehren:

    GML-Quellcode

    1. //argument0 ist der Text
    2. //argument1 ist der Schlüssel; sollte zwischen 0 und 25 sein
    3. var i, char, eingabe, ausgabe;
    4. eingabe:= string_upper(argument0);
    5. ausgabe:= '';
    6. for (i:=1; i<=string_length(eingabe), i+=1)
    7. {
    8. char:= string_char_at(eingabe,i);
    9. if ((ord(char)>=65) && (ord(char)<=90))
    10. {
    11. char:=chr( ((ord(char)-39-argument1) mod 26)+65);
    12. }
    13. ausgabe:=ausgabe+char;
    14. }
    15. return ausgabe;
    Alles anzeigen


    Solltest du allerdings eine etwas aufwändigere Substitution haben wollen, so müsstest du an der stelle des If-Statements ein Switch-Statement einbaun, das jeden einzelnen Buchstaben abfragt, und dann den entsprechenden Buchstaben, durch den dieser ausgetauscht werden soll, zurückgibt.