![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
' =========================================================================== ' 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 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 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 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 |