Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


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 

 Demoprogramm: Wörterraten (Hangman, Galgenmännchen) Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 4.11.2020 14:08)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station
' ===========================================================================
' Demoprogramm: Wörterraten (Hangman, Galgenmännchen) auf der Open-Maxi
' In OCBASIC 1.11a für Open-Maxi von Dietmar Harlos am 18. Oktober 2020
' ===========================================================================

' Dieses Beispielprogramm demonstriert, wie mit Hilfe von PEEK und POKE
' Strings und Felder auf der Open-Maxi realisiert werden können.

' An dieser Stelle möchte ich mich bei Norbert Klein und bei Dirk von "das
' |_ Team" für ihre Unterstützung bedanken.

' --- Definitionen ----------------------------------------------------------

INCLUDE "omax.def"              'Definitionen für die Open-Maxi

DEFINE string &h2aa             'Buffer an 1. Adresse hinter dem USER-RAM
DEFINE buchstaben &h2ca         'Array/Feld/Buffer mit den vom Anwender eingegebenen Buchstaben

DIM bitarray BYTE               'ein Bitarray
DIM geloest  BIT[1] OF bitarray 'ist HIGH, wenn das Wort komplett gelöst 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 benötigten Versuche

DIM w WORD                      'temporäre Wordvariable

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

PRINT "Wörterraten auf der Open-Maxi"

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

RANDOMIZE 0    'Hier Zufallsgenerator initialisieren

WHILE TRUE
  gets (((RAND SHR 1)+16384)/251) '0..130 'gewünschtes Wort in Stringbuffer kopieren & Länge in "lens"
  anzb=0                          ' 32767/251.0 = 130.5458167
  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 Buchstabe ";
      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
        PRINT
        IF buchstabe>=ASC("a") AND buchstabe<=ASC("z") THEN
          buchstabe=buchstabe-32
        END IF
        IF buchstabe<ASC("A") OR buchstabe>ASC("Z") THEN
          PRINT "Das ist kein gültiger 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 Buchstaben hast Du schon einmal 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 "Glückwünsch! Du hast das Wort gelöst! Du hast";versuche;" Versuche benötigt."
WEND

END            'Zurück 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,w)
      ADD w,1
    WEND
    ADD w,1
    SUB c,1
  WEND

  lens=0
  WHILE LOOKTABBYTE(woerter,w)   'String Zeichen für Zeichen in Stringbuffer
    POKE string+lens,LOOKTABBYTE(woerter,w)
    ADD w,1
    ADD lens,1
  WEND

  RETURN
END PROCEDURE

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

' Die Wörterliste stammt von http://fx-850p.dharlos.de/GAMES.LST

TABLE woerter BYTE
"BRUTTOSOZIALPRODUKT",0,"BART SIMPSON",0,"WOERTER RATEN",0
"LUCKY LUKE",0,"DAGOBERT DUCK",0,"ASTERIX UND OBELIX",0
"TASTATUR",0,"TASCHENLAMPE",0,"WOERTERBUCH",0,"MIKROAMPERE",0,"PHASENVERSCHIEBUNG",0
"BEDIENUNGSANLEITUNG",0,"FREQUENZAENDERUNG",0,"VOGELGEZWITSCHER",0,"DISKETTE",0
"RECHTSCHREIBREFORM",0,"ERNEST HEMINGWAY",0,"DEMONSTRATION",0,"CHAMPAGNER",0
"CHARLIE CHAPLIN",0,"BEVOELKERUNGSENTWICKLUNG",0,"BEWAEHRUNGSHELFER",0
"BIBERRATTE",0,"BEUTELSPRINGMAUS",0,"ERDOELRAFFINERIE",0,"ARBEITNEHMER",0
"NEANDERTHALER",0,"AMAZONAS",0,"SUEDWESTAFRIKA",0,"ATLANTISCHER OZEAN",0,"YOKOHAMA",0
"NEUSCHOTTLAND",0,"EL SALVADOR",0,"TROPISCHER REGENWALD",0,"BERNSTEINZIMMER",0
"ARGLISTIGE TAEUSCHUNG",0,"LOUIS ARMSTRONG",0,"ARSENVERGIFTUNG",0,"ARTIKULATION",0
"ARTISCHOCKE",0,"ATOMSPERRVERTRAG",0,"ATMOSPHAERE",0,"BAHNHOFSMISSION",0,"BANKBEAMTER",0
"BANANENSTECKER",0,"BARCELONA",0,"BAROMETER",0,"BAUGENOSSENSCHAFT",0,"RADIO HERFORD",0
"BELAGERUNGSZUSTAND",0,"BENGALISCHES FEUER",0,"BERATUNGSSTELLE",0,"BENELUXSTAATEN",0
"BERMUDADREIECK",0,"KURFUERSTENDAMM",0,"KONGRESSHALLE",0,"BIBLIOGRAPHIE",0,"BLUFF",0
"BLINDENSCHRIFT",0,"SCHMETTERLINGE",0,"BLUTEGEL",0,"KREDITINSTITUT",0,"BOOGIE WOOGIE",0
"DEUTSCHE PRESSEAGENTUR",0,"DEZENTRALISATION",0,"DIAETENERHOEHUNG",0
"DIFFERENTIALRECHNUNG",0,"INTEGRALRECHNUNG",0,"DINOSAURIER",0,"DOPPLEREFFEKT",0
"DRAISINE",0,"DREISSIGJAEHRIGER KRIEG",0,"DRESCHMASCHINE",0,"DRUCKBUCHSTABE",0
"GLEICHSEITIGES DREIECK",0,"DUDELSACKPFEIFER",0,"DUALSYSTEM",0,"DUMPING",0
"BERGKRISTALL",0,"PYRIT",0,"SCHWEFELSAEURE",0,"QUINTETT",0,"KNOLLENBLAETTERPILZ",0
"PFIFFERLING",0,"CHAMPIGNON",0,"TAGPFAUENAUGE",0,"SCHWALBENSCHWANZ",0,"ADMIRAL",0
"STEINBUTT",0,"ROTBARSCH",0,"ROTKEHLCHEN",0,"WEISSE BACHSTELZE",0,"BUCHFINK",0
"SCHWARZER LEOPARD",0,"NASENBAER",0,"ZIBETKATZE",0,"WASCHBAER",0,"OBERKIEFERHOEHLE",0
"MICKY MAUS",0,"GOOFY",0,"LUFTROEHRE",0,"HIRNANHANGDRUESE",0,"RENAISSANCE",0,"ROM",0
"PABLO PICASSO",0,"ALICE IM WUNDERLAND",0,"VORDERRADFEDERUNG",0,"KUPPLUNGSPEDAL",0
"BRUTTOREGISTERTONNEN",0,"KOMMANDOBRUECKE",0,"MASCHINENRAUM",0,"OBERVOLTA",0
"VEREINTE NATIONEN",0,"ELFENBEINKUESTE",0,"SIERRA LEONE",0,"MAURITIUS",0,"STALINGRAD",0
"STREPTOKOKKEN",0,"SCHAUFELRADDAMPFER",0,"ZIGARETTE",0,"STEINKOHLENFOERDERUNG",0
"STINKMORCHEL",0,"FINANZVERWALTUNG",0,"STIEFMUETTERCHEN",0,"STILLEBEN",0,"STIMMGABEL",0
"ALBERT EINSTEIN",0,"STYX",0,"SUBSTITUTION",0,"SUEDAFRIKA",0,"STUDENT",0
0
END TABLE

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


Passender Link: Infosite zu den OM-Mikrocontrollern

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten:

Re: Demoprogramm: Wörterraten (Hangman, Galgenmännchen) (von das |_ Team - 8.11.2020 22:34)
    Hilfsprogramm zur ROT13-Verschleierung der Suchbegriffe (von das |_ Team - 8.11.2020 22:55)
        Vielen Dank! (von Dietmar - 9.11.2020 6:37)
Re: Demoprogramm: Wörterraten (Hangman, Galgenmännchen) (von Joachim - 4.11.2020 15:02)