Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Demoprogramm: Wörterraten (Hangman, Galgenmännchen) Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von das |_ Team, Homepage - 8.11.2020 22:34)
 Als Antwort auf Demoprogramm: Wörterraten (Hangman, Galgenmännchen) von Dietmar - 4.11.2020 14:08
das |_ Team nutzt:  CC1-Unit V1.1, CC1-M-Unit V1.1, CC1-Station V1.1, Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini M-Unit, Open-Mini Station, C-Control 2
Hallo liebes Forum,

hier eine kleine Erweiterung zu Dietmar's Wörterraten-Programm.

Begriffe mit Binde-Strich sind hinzu gekommen, sowie Begriffe länger als 32 Zeichen. Zum Beispiel der allen geläufige Begriff:

 "~~R~~~EN~E~KE~~~-ZU~A~~~NG~-OR~~~NG"

Auch kann man jetzt das Programm mittels STRG+1 vorzeitig verlassen, und in den Hostmodus der Open-Maxi wechseln.

Viel Freude beim Lösen der neuen Begriffe ;-)


das |_ Team





' ===========================================================================
' Demoprogramm: Woerterraten (Hangman, Galgenmaennchen) auf der Open-Maxi
' In OCBASIC 1.11a fuer Open-Maxi von Dietmar Harlos am 18. Oktober 2020
' ===========================================================================
' '+: Tabellenverschleierung am 19. Oktober 2020, +: Begriffe mit Binde-
' 'strich am 21. Oktober 2020, von "das |_ Team" (Aenderungen markiert: '+,'-)
' --- Definitionen ----------------------------------------------------------

INCLUDE "omax.def"            'Definitionen fuer die Open-Maxi

DEFINE string &h2aa           'Buffer an 1. Adresse hinter dem USER-RAM
DEFINE buchstaben &h2ff       'Array/Feld/Buffer mit den vom Anwender eingegebenen Buchstaben
DEFINE OSVER 168              '+ Open-Maxi V1.0 (fuer nahtlosesn Upload mit 115200 baud

DIM bitarray  BYTE               'ein Bitarray
DIM geloest   BIT[1] OF bitarray 'ist HIGH, wenn das Wort komplett geloest wurde
DIM kommtvor  BIT[2] OF bitarray 'ist HIGH, wenn der vom Anwender eingegebene Buchstabe im Wort vorkommt
DIM gefunden  BIT[3] OF bitarray 'ist HIGH, wenn Zeichen im Buffer vorkommt

DIM a,b,c     BYTE               'temporäre Bytevariablen
DIM lens      BYTE               'Länge des Wortes im Stringbuffer
DIM anzb      BYTE               'Anzahl der im Buchstabenfeld gebufferten Buchstaben
DIM buchstabe BYTE               'vom Anwender eingegebener Buchstabe
DIM versuche  BYTE               'Anzahl der vom Anwender benoetigten Versuche
DIM rot13     BYTE               '+ Zwischenvariable fuer die rot13 Verschleierung der Suchwoertet
DIM w WORD                       'temporäre Wordvariable



' --- Hauptprogramm ---------------------------------------------------------

PRINT "Woerterraten auf der Open-Maxi"

PrintSpc=ON    'Bei PRINT dezimale Zahlen mit fuehrendem Leerzeichen ausgeben
End2Host=ON    'Bei Programmende (siehe END) gleich in den Host-Modus wechseln

RANDOMIZE 0    'Hier Zufallsgenerator initialisieren

WHILE TRUE
  anzb=0
     'gets (((RAND SHR 1)+16384)/251) '0..130                             '-
     gets (((RAND SHR 1)+16384)/230)'0..142                               '+ gewünschtes Wort in Stringbuffer kopieren & Länge in "lens"
     'gets(139) '"STRASSENVERKEHRS-ZULASSUNGS-ORDNUNG"                    '+
     'gets(143) ' (ein ganz langer Begriff zum Testen)                    '+
  geloest=OFF
  buchstabe=0
  versuche=0
  PRINT

  WHILE geloest=OFF
    PRINT "Wort: ";                   'teilweise gelöstes Wort ausgeben
    geloest=ON
    kommtvor=OFF
    FOR a=0 TO lens-1
      b=PEEK(string+a)                'in Variable "b" ein Zeichen des Wortes
      IF b=ASC(" ") THEN
        PUT " "
      ELSE
        gefunden=OFF                  'stimmt "b" mit Buchstabe aus Buchstabenbuffer überein?
        IF anzb>0 THEN
          FOR c=0 TO anzb-1
            IF PEEK(buchstaben+c)=b THEN gefunden=ON
          NEXT c
        END IF
        IF gefunden THEN              'falls ja, ausgeben und Bitvariable "kommtvor" auf HIGH setzen
          PUT b
          IF b=buchstabe THEN kommtvor=ON
        ELSE
          PUT ASC("~")                'falls nein, Bindestrich an Position ausgeben und                                       '+~
          geloest=OFF                 ' Bitvariable "geloest" auf LOW setzen
        END IF
      END IF
    NEXT a
    PRINT

    IF buchstabe THEN                 'ausgeben, ob der Buchstabe im Wort vorkommt.
      PRINT "Der ";                                                        '+
      IF buchstabe=ASC("-") THEN                                           '+
      PRINT "Bindestrich ";                                                '+
      ELSE                                                                 '+
      PRINT "Buchstabe ";
      END IF                                                               '+
      PUT 34
      PUT buchstabe
      PUT 34
      PRINT " kommt im Wort ";
      IF kommtvor=OFF THEN PRINT "nicht ";
      PRINT "vor!"
    END IF

    IF geloest THEN GOTO abbruch      'Wort gelöst? Dann WHILE..WEND abbrechen.

    REPEAT
      REPEAT                          'einen gültigen Buchstaben vom Anwender eingeben lassen
        PRINT "Bitte Buchstabe eingeben: ";
        GET buchstabe
         IF buchstabe= 1       THEN                                        '+ oder jetzt neues
         PRINT "CCTRL-BASIC OM";                                           '+  Programm hoch laden,
         PUT OSVER                                                         '+  dazu ID-String
         END                                                               '+  der Open-Maxi ausgeben,
        END IF                                                             '+  fuer Upload mit 115200 baud
        PRINT
        IF buchstabe>=ASC("a") AND buchstabe<=ASC("z") THEN
          buchstabe=buchstabe-32
        END IF
        IF (buchstabe<ASC("A") OR buchstabe>ASC("Z")) AND buchstabe <> ASC("-") THEN '+
          PRINT "Das ist kein gueltiger Buchstabe!"
          buchstabe=0
        END IF
      UNTIL buchstabe<>0

      gefunden=OFF                    'wurde der Buchstabe schon einmal probiert?
      IF anzb>0 THEN
        FOR c=0 TO anzb-1
          IF PEEK(buchstaben+c)=buchstabe THEN gefunden=ON
        NEXT c
      END IF
      IF gefunden THEN
      PRINT "Den ";                                                        '+
      IF buchstabe=ASC("-") THEN                                           '+
      PRINT "Bindestrich";                                                 '+
      ELSE                                                                 '+
      PRINT "Buchstaben";
      END IF                                                               '+
        PRINT " hast Du schon probiert!"
      END IF
    UNTIL gefunden=OFF

    POKE buchstaben+anzb,buchstabe  'Buchstabe in den Buchstabenbuffer einfügen
    ADD anzb,1                      'Anzahl der Buchstaben um eins erhöhen
    ADD versuche,1                  'Anzahl der Versuche um eins erhöhen


    #abbruch
  WEND
  PRINT "Glueckwuensch! Du hast das Wort geloest! Du hast";versuche;" Versuche benoetigt."
WEND

END            'Zurueck in den Hostmodus. Neustart mit RETURN-Taste.

' --- Subroutinen und Funktionen --------------------------------------------

' PROCEDURE gets(c)              ; 0 <= c <= 130
'
' Diese Subroutine/Prozedur sucht den gewünschten String in der Tabelle
' namens "woerter" und übernimmt ihn in den Stringbuffer. Die Länge des
' Strings wird in der Variable "lens" zurückgeliefert.
PROCEDURE gets(c)
  w=0
  WHILE c       'String in Tabelle suchen
    WHILE LOOKTABBYTE(woerter_rot13,w)
      ADD w,1
    WEND
    ADD w,1
    SUB c,1
  WEND

  lens=0
  WHILE LOOKTABBYTE(woerter_rot13,w)   'String Zeichen fuer Zeichen in Stringbuffer
  ' POKE string+lens,LOOKTABBYTE(woerter,w)                                    '-
    buchstabe=LOOKTABBYTE(woerter_rot13,w)                                     '+
    IF buchstabe < 65 OR buchstabe > 90 THEN                                   '+ Suchwort aus der Tabelle
     POKE string+lens,buchstabe                                                '+
    ELSE                                                                       '+
    rot13=LOOKTABBYTE(woerter_rot13,w)                                         '+ durch erneute Anwendung der
    rot13=rot13-64  '"A","B",..,"Z" codiert wie Alphabetposition:(1,2,..,26)   '+ rot13-Funktion entschleiern
    rot13=rot13+13:IF rot13>26 THEN rot13=rot13 MOD 26                         '+
    rot13=rot13+64  '"A","B",..,"Z" codiert gem. ASCII-Code: (65,66,..,90)     '+
    POKE string+lens,rot13                                                     '+
    END IF                                                                     '+

    ADD w,1
    ADD lens,1
  WEND

  RETURN
END PROCEDURE

' --- Tabellen --------------------------------------------------------------

' Die Woerterliste stammt von http://fx-850p.dharlos.de/GAMES.LST. Sie ist mit '+
' dem OCBASIC-Hilfsprogramm OMJROT13.BAS verschleiert worden, um niemandem den '+
' Spass am Erraten der in der Tabelle enthaltenen Woerter zu verderben... :-)  '+
                                                                               '+
TABLE woerter_rot13 BYTE 'erzeugt mittels OCBASIC-Programm 'OMJROT13.BAS'      '+
"OEHGGBFBMVNYCEBQHXG",0,"ONEG FVZCFBA",0,"JBREGRE ENGRA",0
"YHPXL YHXR",0,"QNTBOREG QHPX",0,"NFGREVK HAQ BORYVK",0
"GNFGNGHE",0,"GNFPURAYNZCR",0,"JBREGREOHPU",0,"ZVXEBNZCRER",0
"CUNFRAIREFPUVROHAT",0,"ORQVRAHATFNAYRVGHAT",0,"SERDHRAMNRAQREHAT",0
"IBTRYTRMJVGFPURE",0,"QVFXRGGR",0,"ERPUGFPUERVOERSBEZ",0
"REARFG URZVATJNL",0,"QRZBAFGENGVBA",0,"PUNZCNTARE",0,"PUNEYVR PUNCYVA",0
"ORIBRYXREHATFRAGJVPXYHAT",0,"ORJNRUEHATFURYSRE",0
"OVOREENGGR",0,"ORHGRYFCEVATZNHF",0,"REQBRYENSSVAREVR",0
"NEORVGARUZRE",0,"ARNAQREGUNYRE",0,"NZNMBANF",0,"FHRQJRFGNSEVXN",0
"NGYNAGVFPURE BMRNA",0,"LBXBUNZN",0,"ARHFPUBGGYNAQ",0,"RY FNYINQBE",0
"GEBCVFPURE ERTRAJNYQ",0,"OREAFGRVAMVZZRE",0,"NETYVFGVTR GNRHFPUHAT",0
"YBHVF NEZFGEBAT",0,"NEFRAIRETVSGHAT",0,"NEGVXHYNGVBA",0
"NEGVFPUBPXR",0,"NGBZFCREEIREGENT",0,"NGZBFCUNRER",0,"ONUAUBSFZVFFVBA",0
"ONAXORNZGRE",0,"ONANARAFGRPXRE",0,"ONEPRYBAN",0,"ONEBZRGRE",0
"ONHTRABFFRAFPUNSG",0,"ENQVB URESBEQ",0,"ORYNTREHATFMHFGNAQ",0
"ORATNYVFPURF SRHRE",0,"ORENGHATFFGRYYR",0,"ORARYHKFGNNGRA",0
"OREZHQNQERVRPX",0,"XHESHREFGRAQNZZ",0,"XBATERFFUNYYR",0
"OVOYVBTENCUVR",0,"OYHSS",0,"OYVAQRAFPUEVSG",0,"FPUZRGGREYVATR",0
"OYHGRTRY",0,"XERQVGVAFGVGHG",0,"OBBTVR JBBTVR",0,"QRHGFPUR CERFFRNTRAGHE",0
"QRMRAGENYVFNGVBA",0,"QVNRGRAREUBRUHAT",0,"QVSSRERAGVNYERPUAHAT",0
"VAGRTENYERPUAHAT",0,"QVABFNHEVRE",0,"QBCCYRERSSRXG",0,"QENVFVAR",0
"QERVFFVTWNRUEVTRE XEVRT",0,"QERFPUZNFPUVAR",0,"QEHPXOHPUFGNOR",0
"TYRVPUFRVGVTRF QERVRPX",0,"QHQRYFNPXCSRVSRE",0,"QHNYFLFGRZ",0
"QHZCVAT",0,"ORETXEVFGNYY",0,"CLEVG",0,"FPUJRSRYFNRHER",0,"DHVAGRGG",0
"XABYYRAOYNRGGRECVYM",0,"CSVSSREYVAT",0,"PUNZCVTABA",0,"GNTCSNHRANHTR",0
"FPUJNYORAFPUJNAM",0,"NQZVENY",0,"FGRVAOHGG",0,"EBGONEFPU",0
"EBGXRUYPURA",0,"JRVFFR ONPUFGRYMR",0,"OHPUSVAX",0,"FPUJNEMRE YRBCNEQ",0
"ANFRAONRE",0,"MVORGXNGMR",0,"JNFPUONRE",0,"BOREXVRSREUBRUYR",0
"ZVPXL ZNHF",0,"TBBSL",0,"YHSGEBRUER",0,"UVEANAUNATQEHRFR",0
"ERANVFFNAPR",0,"EBZ",0,"CNOYB CVPNFFB",0,"NYVPR VZ JHAQREYNAQ",0
"IBEQREENQSRQREHAT",0,"XHCCYHATFCRQNY",0,"OEHGGBERTVFGREGBAARA",0
"XBZZNAQBOEHRPXR",0,"ZNFPUVARAENHZ",0,"BOREIBYGN",0,"IRERVAGR ANGVBARA",0
"RYSRAORVAXHRFGR",0,"FVREEN YRBAR",0,"ZNHEVGVHF",0,"FGNYVATENQ",0
"FGERCGBXBXXRA",0,"FPUNHSRYENQQNZCSRE",0,"MVTNERGGR",0,"FGRVAXBUYRASBREQREHAT",0
"FGVAXZBEPURY",0,"SVANAMIREJNYGHAT",0,"FGVRSZHRGGREPURA",0
"FGVYYRORA",0,"FGVZZTNORY",0,"NYOREG RVAFGRVA",0,"FGLK",0,"FHOFGVGHGVBA",0
"FHRQNSEVXN",0,"FGHQRAG",0,"BCRA-ZVPEB",0,"BCRA-ZVAV",0,"BCRA-ZNPEB",0
"BCRA-ZNKV",0,"BCRA-PBAGEBY",0,"QBANH-QNZCSFPUVSSSNUEGFTRFRYYFPUNSG",0
"ERANGHEVREHATFZNFFANUZR",0,"XENSGSNUEMRHT-UNSGCSYVPUGIREFVPUREHAT",0
"FGENFFRAIREXRUEF-MHYNFFHATF-BEQAHAT",0,"YNOBEARGMTRENRG",0
"OEBGXNFGRA",0,"PBZZBQBER",0,"SVANAMQVRAFGYRVFGHATFHAGREARUZRAFOEBFPUHRERAIBEFGRYYHATFSNPUXENRSGRIREFNZZYHAT",0
0
END TABLE

' --- Programmende ----------------------------------------------------------


Passender Link: Hilfsprogamm zur ROT13 Verschleierung der Suchbegriffe

Meine Homepage: http://visit.ghn-sensorik.de/L-Team/Lvm/

 Antwort schreiben

Bisherige Antworten:

Hilfsprogramm zur ROT13-Verschleierung der Suchbegriffe (von das |_ Team - 8.11.2020 22:55)
    Vielen Dank! (von Dietmar - 9.11.2020 6:37)