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: Labyrinth von H.J. WINDT konvertiert auf die Open-Maxi Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 3.06.2022 16:47)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station


' ===========================================================================
' Demoprogramm: Labyrinth von H.J. WINDT konvertiert auf die Open-Maxi
' In OCBASIC 1.12a_e1 für Open-Maxi von Dietmar Harlos am 28. Mai 2022
' ===========================================================================

'***********************************************************************'
'*                         WINDT SYSTEMS                               *'
'*          MAZE GAME v1.0 for CC1M2.01 with CC1AB2.0                  *'
'*                           H.J. WINDT                                *'
'*                             2004                                    *'
'***********************************************************************'

' http://ccintern.dharlos.de/forum/lesen.php?eintrag=2885

'----------------------------------------------------------------------------
' FINDE DEINEN WEG AUS DEM LABYRINTH!
' Drücke im Terminalprogramm TERMINAL32.EXE Tasten, um Dich zu bewegen.
' Taste 8 = Hoch
' Taste 4 = Links
' Taste 6 = Rechts
' Taste 2 = Unten
' HAVE FUN!
'----------------------------------------------------------------------------

' Die Ausgaben erscheinen auf dem I²C-Text-LCD der Open-Maxi.

' Verwendet wird das 4-zeilige "LCD 204B LED" von Reichelt. Dort gibt es auch
' das Datenblatt DS_4X20.pdf zum LCD. Es können maximal 8 Zeichen selbst
' definiert werden.

' In der Bedienungsanleitung zur Open-Macro und Open-Maxi ist beschrieben,
' wie das LCD mittels Portexpander PCF8574 mit dem I²C-Bus der Open-Maxi
' zu verbinden ist:

' http://om.dharlos.de/doku_omax/index.html

' Dieses Beispielprogramm setzt einen I2C-Portexpander PCF8574A voraus, mit
' dessen Hilfe das LCD angesprochen wird. Bei einem PCF8574 muß das "&h70"
' in ein "&h40" geändert werden.

' Leider gibt es nur eine sehr begrenzte Ansicht von 4x2 Zeichen.

' Mit folgender Eingabe kann man aus dem Labyrinth herausfinden:

' 22222262222668666888886668862224442222666666222444444444442266662

' Das Programm zeigt dann an, daß 65 Schritte benötigt wurden.

' Das Originalprogramm in CCBASIC belegte 1655 Byte Programmspeicher. Diese
' in OCBASIC geschriebene Variante dagegen nur 978 Bytes.

' --- Definitionen für das System -------------------------------------------

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

' --- Definitionen des Anwenders --------------------------------------------

DIM area_build_data BYTE
DIM bottom_wall BIT[1] OF area_build_data
DIM right_wall  BIT[2] OF area_build_data
DIM top_wall    BIT[3] OF area_build_data
DIM left_wall   BIT[4] OF area_build_data

DIM adr BYTE
DIM dat BYTE
DIM player_position BYTE
DIM last_player_position BYTE
DIM in_key BYTE

DIM steps WORD

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

' Setup:

End2Host=ON

POKE i2clcdadr,&h70 'Für PCF8574A mit Adreßpins A2:A1:A0 gleich 0:0:0
'POKE i2clcdadr,&h40 'Für PCF8574 mit Adreßpins A2:A1:A0 gleich 0:0:0

' I²C-LCD ansprechen und initialisieren:

PAUSE 2             'Vorgeschriebene Verzögerung für das LCD
LcdLight=ON         'Die Hintergrundbeleuchtung könnte invertiert sein
LCDINIT             'Setzt LcdErr auf OFF bei ACK vom PCF8574,
IF LcdErr THEN      '  sonst auf ON
  PRINT "NoAck vom I2C-LCD"
  END
END IF
LCDCLS              'Löscht den Bildschirm
'LCDCMD &b00001111   '"Display on", "Cursor on" & "Blinking on"
LCDLOCATE 0,0       'Position im 4*20-LCD

GOSUB initialize_lcd
BEEP 4,2,4
BEEP 4,2,4
player_position = 0

' Program:

WHILE TRUE
  LOOKTABBYTE maze, player_position, area_build_data
  GOSUB print_maze_on_display
  IF player_position = 246 THEN GOTO is_out
  GOSUB get_player_direction
WEND

#is_out
PAUSE 50
LCDCLS              'Löscht den Bildschirm
LCDPRINT" YOU ARE OUT!!!";
LCDLOCATE 1,1
LCDPRINT"IN ";
LCDPRINT steps;
LCDPRINT" STEPS";
BEEP 1,10,4:BEEP 2,9,4:BEEP 3,8,4:BEEP 4,7,4:BEEP 5,6,4:BEEP 6,5,4:BEEP 7,4,4:BEEP 8,3,4:BEEP 9,2,4:BEEP 10,1,4
END

' --- Subroutines -----------------------------------------------------------

PROCEDURE get_player_direction
  GET in_key           'Tastendruck aus dem Terminalprogramm TERMINAL32.EXE
  IF top_wall = 0    THEN IF in_key=ASC("8") THEN SUB player_position,16
  IF left_wall = 0   THEN IF in_key=ASC("4") THEN SUB player_position,1
  IF right_wall = 0  THEN IF in_key=ASC("6") THEN ADD player_position,1
  IF bottom_wall = 0 THEN IF in_key=ASC("2") THEN ADD player_position,16
  IF last_player_position <> player_position THEN BEEP 4,2,4
  IF last_player_position <> player_position THEN ADD steps,1
  last_player_position = player_position
  RETURN
END PROCEDURE

PROCEDURE print_maze_on_display
  LCDLOCATE 0,0
  IF left_wall   THEN LCDPUT &h0b ELSE LCDPUT &h0e
  IF top_wall    THEN LCDPUT &h0a ELSE LCDPUT &h0f
  IF top_wall    THEN LCDPUT &h0a ELSE LCDPUT &h0e
  IF right_wall  THEN LCDPUT &h09 ELSE LCDPUT &h0f
  LCDPRINT" Steps Taken:"
  LCDLOCATE 1,0
  IF left_wall   THEN LCDPUT &h0b ELSE LCDPUT &h0c
  IF bottom_wall THEN LCDPUT &h08 ELSE LCDPUT &h0d
  IF bottom_wall THEN LCDPUT &h08 ELSE LCDPUT &h0c
  IF right_wall  THEN LCDPUT &h09 ELSE LCDPUT &h0d
  LCDPRINT "   ";
  LCDPRINT steps;
  RETURN
END PROCEDURE

PROCEDURE initialize_lcd
  LCDCMD &b01000000   '"Set CG-RAM address"
  FOR adr = 0 TO 63
    LOOKTABBYTE characterbuild, adr, dat
    LCDPUT dat
  NEXT
  RETURN
END PROCEDURE

' --- Data ------------------------------------------------------------------

TABLE characterbuild BYTE
  &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00011111 &b00011111
  &b00011000 &b00011000 &b00011000 &b00011000 &b00011000 &b00011000 &b00011000 &b00011000
  &b00011111 &b00011111 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000
  &b00000011 &b00000011 &b00000011 &b00000011 &b00000011 &b00000011 &b00000011 &b00000011
  &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000011 &b00000011
  &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00011000 &b00011000
  &b00000011 &b00000011 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000
  &b00011000 &b00011000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000
TABEND

TABLE maze BYTE
  12  5  5  4  5  5  6 12  5  5  5  5  5  5  5  6
  10 13  6 10 12  5  3 10 13  5  5  5  4  5  5  3
  10 14 10 10 10 12  5  0  5  4  4  5  0  4  4  6
  8  1  3 10 10 10 13  3 15 10  8  7 10  9  3 10
  10 13  5  3 10 10 12  5  5  3  8  6  8  5  5  2
  10 14 12  5  3 10 10 12  5  5  3 10 10 13  6 10
  9  0  1  5  5  3 10 10 12  6 15 10  9  6 10 11
  14 10 12  4  5  6 10 10 10  8  5  3 12  3 10 14
  10 10 10 10 13  3 10 10  9  1  5  5  1  7 10 10
  10 10 11  8  5  5  3  9  5  5  5  5  5  6 10 10
  8  1  5  2 12  4  5  5  7  13 4  5  5  2  8  2
  10 12  7 11 11 10 13  5  5  5  1  5  7 10 10 10
  10  8  4  5  5  1  5  5  4  5  5  5  5  0  3 10
  10 10  8  5  5  5  5  5  2 14 12  5  5  1  7 11
  10 10  9  5  5  5  4  7 10  9  1  5  5  5  5  6
  11  9  5  5  5  7  0 13  1  5  5  5  5  5  5  3
TABEND

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


Passender Link: Infosite zu den OM-Mikrocontrollern

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

 Antwort schreiben

Bisherige Antworten:

Re: Demoprogramm: Labyrinth von H.J. WINDT konvertiert auf die Open-Maxi (von Christian - 6.06.2022 22:17)