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 

 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)