ich schrieb in meinen letzten Posts ja schon, daß ich es jetz einigermaßen am Laufen habe.
Ich bin zwar nach wie vor ein wenig Verwundert über die Art und Weise der Tastatursteuerung,
aber dazu bin ja hier, um das zu Lernen.
anbei jetzt eine lauffähige Version des Spieles.
Ist zwar noch nicht ganz fertig und auch noch nicht so schön wie unter DarkBasic, aber dafür,
dass ich PureBasic letzten Mittwoch zum ersten Mal gesehen habe, finde ich das schon gut.
Als Hintergrundbild, welches geladen wird, kannst Du irgendein schönes jpg mit 1024 *768 nehmen
Da Du ja in PureBasic gut zuhause zu sein scheinst, kannst Du -wenn Du willst-, ja 'mal drüberschauen
was Du besser oder anders machen wuerdest.
Nein, ich will immer nur genau einen Tastendruck auslesen und auswerten.
z.B. shift links, das habe ich ja jetzt geschafft
shift alt ctrl pause ist zwar abgefahren, muss auch nicht sein, aber auslesen müsste man das doch können
Durch Deinen Post habe ich auch jetzt das erste Mal gesehen wie diese komischen PB-key-konstanten
benutzt werden. Wieder was gelernt
Code: Alles auswählen
; -------------------------------------------------------------
AA-INIT:
;zusätzliche Bibliothek laden
UseJPEGImageDecoder()
;UseJPEGImageEncoder()
; -------------------------------------------------------------
;Prozeduren anmelden
Declare MELDAUTOR()
Declare MELDUNTEN(meldu$)
Declare MELDULOESCH()
Declare ZE_HIGRU()
Declare WAITKEY()
Declare WAITSTRING()
Declare INFO_0()
Declare INFO_1(infotafel,infomax)
Declare MEZU(ric,shift)
Declare COZU()
Declare FARBDEF()
Declare BAUSPIEL()
Declare MACHBLOCK()
Declare ZE_ROHBILD()
Declare ZE_BILD()
Declare ZE_ZUGNUM()
Declare ZE_CURSOR()
Declare MAUSWAHL()
Declare ZE_LOESCHCURSOR()
; -------------------------------------------------------------
;testen ob das Fenster ordnungsgemaess geöffnet werden kann
;wird nur bei screen benötigt; screen benutzt man wenn man sprites nutzt
;If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
; MessageRequester("Error", "Can't open the sprite system", 0)
; End
;EndIf
; -------------------------------------------------------------
;Variablendeklarationen
Enumeration ; Fenster
#cv001
EndEnumeration
Enumeration ; bilder
#bld01
#bld02
#bld03
#bld10 ;higrublock
#bld11 ;weissblock
#bld12 ;grünblock
#bld13 ;braunblock
#bld15 ;cursor
EndEnumeration
Enumeration 100; Tasten
#kb000
;#kb001
;#kb002
;#kb003
;#kb004
EndEnumeration
Global autor$,titel$
TITEL$="SpaceJump"
;HBILD$="test-pb.jpg"
#xadd =12
#yadd = 2
#klotz=50
Global sp$ ; Pfadstring
Global Dim bb(18,12) ; Spielbildarray
Global Dim cc(18,12) ; Startbildarray
Global Dim gg(40) ; globale Variablen
Global Dim fa(40) ; Farbdefinitionen
FARBDEF()
;gg(1) Endeschalter 0= im Spiel 9= Abbruch durch Escape
;gg(2) Siegstatus
;gg(3) Turnus
;ab gg(11) spielspezisfisch
;gg(11) Schwierigkeitsgrad
;gg(12) Maxzug
;gg(13) startx
;gg(14) starty
;gg(15) cursorx
;gg(16) cursory
; -------------------------------------------------------------
;hier wird das Hauptfenster geöffnet
OpenWindow(0,300,100,1024,768,titel$,#PB_Window_SystemMenu |#PB_Window_MinimizeGadget)
CanvasGadget(#cv001,0,0,1024,768,#PB_Canvas_ClipMouse|#PB_Canvas_Keyboard)
AddKeyboardShortcut(0,#PB_Shortcut_All, #kb000)
SetActiveGadget(#cv001) ;wichtig: Tastatur funktioniert sonst nicht
; -------------------------------------------------------------
;hier werden die Schriften vorgeladen, damit sie im Programm zur Verfügung stehen
LoadFont(1,"Arial",32)
LoadFont(2,"Bookman Old Style",18,#PB_Font_Bold )
LoadFont(3,"Arial",12,#PB_Font_Bold )
; -------------------------------------------------------------
;jetzt soll das Hintergrundbild geladen werden
;hier wird das Bild aus der EXE ausgelesen, in die es integriert ist
CatchImage(#bld01,?zz_Higru)
;hier wird das Bild von der HDD geladen
;#bld01=LoadImage(#PB_Any,HBILD$)
;bilder erstellen für meldunten und meldtast
If IsImage(#bld01)
GrabImage(#bld01,#bld02, 0, 704, 1024, 32)
GrabImage(#bld01,#bld03, 0, 672, 1024, 32)
EndIf
; -------------------------------------------------------------
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Vorbereiten des Spieles und des Spielfeldes
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AF_VORSPIEL:
MACHBLOCK() ; Spielblöcke erstellen
ZE_HIGRU()
MELDAUTOR()
MELDUNTEN("Information gewuenscht ? <j> / <n>")
tas=WAITSTRING()
If tas= 74:INFO_0():EndIf
If tas=106:INFO_0():EndIf
MELDULOESCH()
; -------------------------------------------------------------
AG_ANFANG:
ZE_HIGRU()
MELDAUTOR()
MELDUNTEN("Gib den Schwierigkeitsgrad ein 1 bis 9")
tas=0:gg(1)=0:wert=0
tas=Waitstring()
If tas>48 And tas<58:wert=tas-48:EndIf
gg(11)=wert
If gg(11)=0 :gg(11)=4:EndIf
MELDULOESCH()
MELDUNTEN("Schwierigkeitsgrad "+Str(gg(11))+"; Spiel wird erstellt ")
Delay(1200)
MELDULOESCH()
BAUSPIEL()
; --------------------------
AF_WIEDERHOLUNG:
; --------------------------
ZE_ROHBILD()
ZE_BILD()
ZE_ZUGNUM()
ZE_CURSOR()
dipend=0:gg(8)=0
MELDUNTEN("Jetzt geht's los <Taste druecken>")
WAITKEY()
MELDULOESCH()
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; hier beginnt die eigentliche Spielschleife
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AH_HAUPTSPIEL:
; InitKeyboard():InitMouse()
gg(10)=0
DIPEND=0
Repeat
taste=0:shift=0:alt=0:ctrl=0:ric=0
taste=WAITstring()
If taste >1000
If taste >1000: shift=1:alt=0:ctrl=0:EndIf
If taste >4000: shift=0:alt=0:ctrl=1:EndIf
If taste >5000: shift=1:alt=0:ctrl=1:EndIf
If taste >6000: shift=0:alt=1:ctrl=1:EndIf
If taste >7000: shift=1:alt=1:ctrl=1:EndIf
If taste >7000: taste=taste-7000 :EndIf
If taste >6000: taste=taste-6000 :EndIf
If taste >5000: taste=taste-5000 :EndIf
If taste >4000: taste=taste-4000 :EndIf
If taste >1000: taste=taste-1000 :EndIf
EndIf
; cursor
If taste=38:ric=1:EndIf
If taste=39:ric=2:EndIf
If taste=40:ric=3:EndIf
If taste=37:ric=4:EndIf
If shift=1 :shift=10:EndIf
; Nummernblock
; ijkl
If ric>0:MEZU(ric,shift):EndIf
If taste=27:gg(1)=9:EndIf
Until gg(1)>0
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Nachspiel = Beendigung des Spieles
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AI_NACHSPIEL:
dipend=gg(1)
Select dipend
Case 2
dummy=1
Case 3
MELDUNTEN("Geschafft - Glueckwunsch <Taste druecken>")
Case 4
MELDUNTEN("Du hast gewonnen - Glueckwunsch <Taste druecken>")
Case 5
MELDUNTEN("Ich habe gewonnen <Taste druecken>")
Case 9
MELDUNTEN("Abbruch - <Taste druecken>")
Case 10
dummy=1
EndSelect
If dipend<10
WAITKEY()
MELDUNTEN("Neustart ? (J/N)")
tas=WAITSTRING()
gg(1)=0
If tas= 74 : gg(1)=8 : EndIf
If tas=106 : gg(1)=8 : EndIf
MELDULOESCH()
If gg(1)=8 : Goto AF_VORSPIEL : EndIf
EndIf
ZE_HIGRU()
Delay(1000)
End
; ============================================================
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
BA_Procedures:
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure MELDAUTOR()
autor$="Diogenes"
StartDrawing(CanvasOutput(#cv001))
;StartDrawing(WindowOutput(0))
fa1=RGB(0,0,0):fa2=RGB(90,100,10):fa3=RGB(255,255,0)
FrontColor(fa1):Box (0,736,1024,32)
FrontColor(fa2):Box (1,737,1023,30)
DrawingFont(FontID(2)):DrawingMode(1)
DrawText(11,739,titel$,fa1):DrawText(809,739,autor$,fa1)
DrawText(10,738,titel$,fa3):DrawText(808,738,autor$,fa3)
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure MELDUNTEN(meldu$)
fa1=RGB( 0, 0, 0)
fa2=RGB(185,015, 0)
fa3=RGB(255,255, 0)
If StartDrawing(CanvasOutput(#cv001))
;StartDrawing(WindowOutput(0))
FrontColor(fa1):Box (0,704,1024, 32)
FrontColor(fa2):Box (1,705,1022, 30)
DrawingFont(FontID(2)):DrawingMode(1)
DrawText(101,707,meldu$,fa1)
DrawText(100,706,meldu$,fa3)
StopDrawing()
EndIf
EndProcedure
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure MELDULOESCH()
StartDrawing(CanvasOutput(#cv001))
;StartDrawing(WindowOutput(0))
DrawImage(ImageID(#bld02),0,704)
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure ZE_HIGRU()
StartDrawing(CanvasOutput(#cv001))
;StartDrawing(WindowOutput(0))
DrawImage(ImageID(#bld01),0,0)
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure WAITKEY()
quit=0:event=0
Repeat
Event = WaitWindowEvent()
If event=#PB_Event_Gadget
If EventGadget()=#cv001
;Debug "Es ist das Canvas"
If EventType()=#PB_EventType_Input
;Debug "Es war das EventType_Input"
;Debug "Es war das Zeichen Ascii Code (" + Str(GetGadgetAttribute(#cv001, #PB_Canvas_Input)) + ")"
quit=1
EndIf
EndIf
EndIf
If event=#PB_Event_CloseWindow
quit=1:gg(1)=9
EndIf
Until quit=1
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure WAITSTRING()
quit=0:taste=0
Repeat
taste=0
Event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
If EventGadget()=#cv001
If EventType() = #PB_EventType_KeyUp
taste=((GetGadgetAttribute(#cv001,#PB_Canvas_Key)))
modif=((GetGadgetAttribute(#cv001,#PB_Canvas_Modifiers)))
EndIf
modif=modif*1000
taste=taste+modif
; Debug Str(taste)
EndIf
; Case #WM_KEYUP
; taste=EventwParam()& $FFFF
Case #PB_Event_CloseWindow
quit=1:gg(1)=9
EndSelect
If Taste>0 : quit=1 : EndIf
Until quit=1
ProcedureReturn taste
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure INFO_0()
infoende=0
infotafel=1
infomax=1
ZE_HIGRU()
MELDAUTOR()
Repeat
INFO_1(infotafel,infomax)
tas=WAITSTRING()
Select tas
Case 27
infoende=1
Case 37
infotafel=infotafel-1
Case 39
infotafel=infotafel+1
EndSelect
If infotafel=0 : infotafel=infomax : EndIf
If infotafel>infomax : infotafel=1 : EndIf
Until infoende=1
ZE_HIGRU()
MELDAUTOR()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure INFO_1(infotafel,infomax)
If infotafel=1
Restore ZZ_INFO_01
EndIf
If infotafel=2
Restore ZZ_INFO_02
EndIf
StartDrawing(CanvasOutput(#cv001))
FrontColor(RGB(80,80,80))
Box (0,0,1023,736)
StopDrawing()
If infomax=1
MELDUNTEN("Zum Beenden: <esc> druecken")
EndIf
If infomax>1
MELDUNTEN("Beenden <esc> ; Blaettern <re> <li>")
EndIf
StartDrawing(CanvasOutput(#cv001))
DrawingFont(FontID(3))
DrawingMode(1)
FrontColor(RGB(255,255,200)):
For q =1 To 26
Read.s info$
dx=25:dy=q*20+40
DrawText(dx,dy,info$)
Next q
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure MAUSWAHL()
gg(10)=0
gg(11)=0
gg(12)=0
gg(13)=0
gg(14)=0
Repeat
event=WaitWindowEvent()
If Event=#PB_Event_Gadget And EventGadget() = #cv001
If EventType() = #PB_EventType_LeftButtonDown
gg(13)=1:gg(10)=1
gg(11)=GetGadgetAttribute(#cv001,#PB_Canvas_MouseX)
gg(12)=GetGadgetAttribute(#cv001,#PB_Canvas_MouseY)
EndIf
If EventType() = #PB_EventType_RightButtonDown
gg(13)=2:gg(10)=1
gg(11)=GetGadgetAttribute(#cv001,#PB_Canvas_MouseX)
gg(12)=GetGadgetAttribute(#cv001,#PB_Canvas_MouseY)
EndIf
If EventType() = #PB_EventType_KeyDown
gg(14)=((GetGadgetAttribute(#cv001,#PB_Canvas_Key)))
gg(10)=1
EndIf
EndIf
If event=#PB_Event_CloseWindow
gg(1)=9:gg(10)=1
EndIf
If gg(14)=27
gg( 1)=9
gg(10)=1
EndIf
Delay(50)
Until gg(10)>0
Meldunten("Hier ist Mezu:"+Str(gg(11))+"."+Str(gg(12))+"."+Str(gg(13))+"."+Str(gg(14)))
;waitkey()
Delay(1200)
MELDULOESCH()
; -------------------------------------------------------------
;Beispiele für das Asulesen der Tastatur; auch Addkeyboardshortcut
; -------------------------------------------------------------
; von Bisonte
; If EventType() = #PB_EventType_KeyUp
; PressedKey = GetGadgetAttribute(#cv001, #PB_Canvas_Key)
; Select PressedKey
; Case #PB_Shortcut_F1
; ; Mach was bei F1
; Case #PB_Shortcut_Escape
; ; Mach was bei Escape usw...
; EndSelect
; EndIf
; -------------------------------------------------------------
; #PB_EventType_input liefret nur die druckabern Ascii-Codes
; aber keine Sonderzeichen
; If EventType() = #PB_EventType_Input
; gg(14)=((GetGadgetAttribute(#cv001,#PB_Canvas_Input)))
; gg(10)=1
; EndIf
; -------------------------------------------------------------
; eventwparam funktioniert prima, soll aber abgeschafft werden
; If event=#WM_KEYUP
; gg(14)=EventwParam()& $FFFF
; gg(10)=1
; EndIf
; -------------------------------------------------------------
; If GetAsyncKeyState_(#VK_RETURN)<>0 And GetFocus_()=GadgetID(#gadnum)
; ; Do whatever...
; EndIf
; -------------------------------------------------------------
; If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
;
; AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_A, 123)
;
; Repeat
; Event = WaitWindowEvent()
; If Event = #PB_Event_Menu
; Select EventMenu()
; Case 123
; Debug "Deine Funktion"
; EndSelect
; EndIf
; If Event = #PB_Event_CloseWindow
; End
; EndIf
; ForEver
; EndIf
; -------------------------------------------------------------
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure COZU()
Meldunten("Hier ist Cozu")
waitkey()
MELDULOESCH()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure FARBDEF()
fa( 1)= RGB(185,015,000) ; rot für meldunten
fa( 2)= RGB(090,100,010) ; olivgruen f. meldautor
fa( 3)= RGB(030,030,180) ; mittelblau als Hintergrund f. Meldtast
fa( 4)= RGB(000,000,000) ; schwarz
fa( 5)= RGB(255,255,255) ; hellweiss
fa( 6)= RGB(255,255,000) ; gelb
fa( 7)= RGB(255,000,000) ; rot
fa( 8)= RGB(080,080,080) ; grau
fa( 9)= RGB(140,140,140) ; heller grau
fa(10)= RGB(080,080,080) ;
fa(11)= RGB(055,010,055) ; MENU: Hintergrund normal
fa(12)= RGB(077,015,077) ; MENU: Hintergrund ausgegraut wenn nicht anwählbar
fa(13)= RGB(165,030,165) ; MENU: Hintergrund highlighted weil gerade aktiv
fa(14)= RGB(080,080,080) ; MENU: Rahmenfarbe
fa(15)= RGB(160,160,160) ; MENU: Schriftfarbe normal
fa(16)= RGB(180,110,020) ; MENU: Schriftfarbe ausgegraut, wenn nicht anwählbar
fa(17)= RGB(060,120,060) ; MENU: Schriftfarbe highlighted
fa(18)= RGB(200,200,200) ;
fa(19)= RGB(000,000,240) ;
fa(20)= RGB(000,000,240) ;
; ab hier frei programmierbare Farben für spezifisches Prog
fa(21)= RGB(000,050,000) ; Hintergrund Spielfeld
fa(22)= RGB(160,160,160) ; Plaettchen 1
fa(23)= RGB(095,095,095) ; Plaettchen 1
fa(24)= RGB(000,160,040) ; Plaettchen 2
fa(25)= RGB(000,095,025) ; Plaettchen 2
fa(26)= RGB(140,100,000) ; Plaettchen 3
fa(27)= RGB(085,060,000) ; Plaettchen 3
fa(28)= RGB(100,020,020) ; Cursor
fa(29)= RGB(000,220,120) ;
fa(30)= RGB(255,255,000) ;
fa(31)= RGB(255,255,000) ;
fa(32)= RGB(190,190,000) ;
fa(33)= RGB(220,220,000) ;
fa(34)= RGB(250,250,000) ;
fa(35)= RGB(250,250,000) ;
fa(36)= RGB(250,250,000) ;
fa(37)= RGB(250,250,000) ;
fa(38)= RGB(250,250,000) ;
fa(39)= RGB(250,250,000) ;
fa(40)= RGB(250,250,000) ;
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure BAUSPIEL()
; Spielelemente einlesen
; Array ausnullen
For qx=0 To 18
For qy=0 To 12
bb(qx,qy)=0
cc(qx,qy)=0
Next qy
Next qx
; Pfadstring auf Null setzen
sp$=""
; startpunkt festlegen
sx=Random(6)+8
sy=Random(6)+2
sx$=Chr(48+sx)
sy$=Chr(48+sy)
sp$=sx$+sy$
; Anzahl der Zuege festlegen
aa=gg(11)*8
maxzug=aa
If gg(11)<3 : maxzug=aa+3 : EndIf
If gg(11)>7 : maxzug=aa-4 : EndIf
gg(12)=maxzug
; pfad auswürfeln
zug=0
gg(13)=sx ; start x
gg(14)=sy ; start y
gg(15)=sx ; cursor x
gg(16)=sy ; cursor y
bb(sx,sy)=1
bb(0,0)=1
quit=0
Repeat
cux=sx:cuy=sy
ric=Random(3)+1
dipfehl=0
If ric=1 : cuy=cuy-1 : EndIf
If ric=2 : cux=cux+1 : EndIf
If ric=3 : cuy=cuy+1 : EndIf
If ric=4 : cux=cux-1 : EndIf
sp=0
zuf=Random(99)
If gg(11)<3 And zuf<80 : sp=1 : EndIf
If gg(11)>3 And zuf<75 : sp=1 : EndIf
If gg(11)>6 And zuf<70 : sp=1 : EndIf
If ric=1 And sp=1 : cuy=cuy-1 : EndIf
If ric=2 And sp=1 : cux=cux+1 : EndIf
If ric=3 And sp=1 : cuy=cuy+1 : EndIf
If ric=4 And sp=1 : cux=cux-1 : EndIf
If cux< 1 : dipfehl=1 : EndIf
If cux>18 : dipfehl=1 : EndIf
If cuy< 1 : dipfehl=1 : EndIf
If cuy>12 : dipfehl=1 : EndIf
If dipfehl=0 And bb(cux,cuy)=3 : dipfehl=1 : EndIf
If dipfehl=0
zug=zug+1
sx=cux:sy=cuy
bb(sx,sy)=bb(sx,sy)+1
bb(0,0)=bb(0,0)+1
If ric=1 And sp=0 : z$="u" : EndIf
If ric=1 And sp=1 : z$="U" : EndIf
If ric=2 And sp=0 : z$="r" : EndIf
If ric=2 And sp=1 : z$="R" : EndIf
If ric=3 And sp=0 : z$="d" : EndIf
If ric=3 And sp=1 : z$="D" : EndIf
If ric=4 And sp=0 : z$="l" : EndIf
If ric=4 And sp=1 : z$="L" : EndIf
sp$=sp$+z$
EndIf
If zug=maxzug : quit=1: EndIf
Until quit=1
sp$=sp$+"z"
; startbild für wiederholung abspeichern
For qx=1 To 18
For qy=1 To 12
cc(qx,qy)=bb(qx,qy)
Next qy
Next qx
cc(0,0)=bb(0,0)
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure MACHBLOCK()
;StartDrawing(CanvasOutput(#cv001))
; higrublock
CreateImage(#bld10,44,44)
StartDrawing(ImageOutput(#bld10))
FrontColor(fa(21))
Box(0,0,44,44)
StopDrawing()
; weissblock
CreateImage(#bld11,44,44)
StartDrawing(ImageOutput(#bld11))
FrontColor(fa(23))
Box(0,0,44,44)
StopDrawing()
; gruenblock
CreateImage(#bld12,44,44)
StartDrawing(ImageOutput(#bld12))
FrontColor(fa(25))
Box(0,0,44,44)
StopDrawing()
;braunblock
CreateImage(#bld13,44,44)
StartDrawing(ImageOutput(#bld13))
FrontColor(fa(27))
Box(0,0,44,44)
StopDrawing()
;cursor
CreateImage(#bld15,22,22)
StartDrawing(ImageOutput(#bld15))
FrontColor(fa(28))
Box(0,0,22,22)
StopDrawing()
;StopDrawing()
; cls
; ; higru-block
; box 10,10,31,31,fa(21),fa(21),fa(21),fa(21)
; box 31,10,53,31,fa(21),fa(21),fa(21),fa(21)
; box 10,31,31,53,fa(21),fa(21),fa(21),fa(21)
; box 31,31,53,53,fa(21),fa(21),fa(21),fa(21)
; get image 10 ,10,10,53,53
; ; cls
; ; weiss-block
; box 10,10,31,31,fa(22),fa(23),fa(23),fa(22)
; box 31,10,53,31,fa(23),fa(22),fa(22),fa(23)
; box 10,31,31,53,fa(23),fa(22),fa(22),fa(23)
; box 31,31,53,53,fa(22),fa(23),fa(23),fa(22)
; get image 11 ,10,10,53,53
; ; cls
; ; gruen-block
; box 10,10,31,31,fa(24),fa(25),fa(25),fa(24)
; box 31,10,53,31,fa(25),fa(24),fa(24),fa(25)
; box 10,31,31,53,fa(25),fa(24),fa(24),fa(25)
; box 31,31,53,53,fa(24),fa(25),fa(25),fa(24)
; get image 12 ,10,10,53,53
; ; cls
; ; braun-block
; box 10,10,31,31,fa(26),fa(27),fa(27),fa(26)
; box 31,10,53,31,fa(27),fa(26),fa(26),fa(27)
; box 10,31,31,53,fa(27),fa(26),fa(26),fa(27)
; box 31,31,53,53,fa(26),fa(27),fa(27),fa(26)
; get image 13 ,10,10,53,53
; ; cls
; ; cursor-block
; box 10,10,31,31,fa(28),fa(28),fa(28),fa(28)
; get image 15,10,10,31,31
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure ZE_ROHBILD()
ZE_HIGRU()
MELDAUTOR()
StartDrawing(CanvasOutput(#cv001))
FrontColor(fa( 5)):Box(60,50,910,610)
FrontColor(fa(21)):Box(63,53,904,604)
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure ZE_BILD()
StartDrawing(CanvasOutput(#cv001))
For qx=1 To 18
For qy=1 To 12
bild=0
If bb(qx,qy)=1 : bild=#bld11 : EndIf
If bb(qx,qy)=2 : bild=#bld12 : EndIf
If bb(qx,qy)=3 : bild=#bld13 : EndIf
li=#xadd+qx*#klotz+6
ob=#yadd+qy*#klotz+6
If bild>0
DrawImage(ImageID(bild),li,ob)
EndIf
Next qy
Next qx
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure ZE_ZUGNUM()
StartDrawing(CanvasOutput(#cv001))
FrontColor(fa( 3)):Box (480,736,64,32)
zz$=Str(bb(0,0))
DrawingFont(FontID(2)):DrawingMode(1)
FrontColor(fa(4)):DrawText(490,739,zz$)
FrontColor(fa(6)):DrawText(489,738,zz$)
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure ZE_Cursor()
li=#xadd+gg(15)*#klotz+6
ob=#yadd+gg(16)*#klotz+6
StartDrawing(CanvasOutput(#cv001))
DrawImage(ImageID(#bld15),li+11,ob+11)
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure MEZU(ric,shift)
weg=shift+ric
ax=gg(15)
ay=gg(16)
If weg= 1 : nx=ax :ny=ay-1:EndIf
If weg=11 : nx=ax :ny=ay-2:EndIf
If weg= 2 : nx=ax+1:ny=ay :EndIf
If weg=12 : nx=ax+2:ny=ay :EndIf
If weg= 3 : nx=ax :ny=ay+1:EndIf
If weg=13 : nx=ax :ny=ay+2:EndIf
If weg= 4 : nx=ax-1:ny=ay :EndIf
If weg=14 : nx=ax-2:ny=ay :EndIf
; Pruefung auf zugmöglichkeit
prf=0
If nx>18 : prf=1:EndIf
If nx< 1 : prf=1:EndIf
If ny>12 : prf=1:EndIf
If ny< 1 : prf=1:EndIf
If prf=0
If bb(nx,ny)=0
prf=1
EndIf
EndIf
If prf=0
bb(ax,ay)=bb(ax,ay)-1
bb(0,0)=bb(0,0)-1
ZE_LOESCHCURSOR()
gg(15)=nx
gg(16)=ny
ax=nx:ay=ny
ZE_CURSOR()
ZE_ZUGNUM()
EndIf
; pruefung auf Sieg
If bb(0,0)=1 :gg(1)=3:EndIf
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure ZE_LOESCHCURSOR()
li=#xadd+gg(15)*#klotz+6
ob=#yadd+gg(16)*#klotz+6
If bb(gg(15),gg(16))=0: bild=#bld10 : EndIf
If bb(gg(15),gg(16))=1: bild=#bld11 : EndIf
If bb(gg(15),gg(16))=2: bild=#bld12 : EndIf
If bb(gg(15),gg(16))=3: bild=#bld13 : EndIf
StartDrawing(CanvasOutput(#cv001))
DrawImage(ImageID(bild),li,ob)
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; -------------------------------------------------------------
ZZ_SONSTIGES:
; -------------------------------------------------------------
;das Hintergrundbild wird in die exe integriert
DataSection
zz_HIGRU:
IncludeBinary "ek-Space.jpg"
EndDataSection
; -------------------------------------------------------------
; -------------------------------------------------------------
DataSection
ZZ_INFO_01:
Data.s "Ziel des Spieles ist es, die auf dem Bildschirm sichtbaren Plaettchen "
Data.s "verschwinden zu lassen. Ein weisses Plaettchen verschwindet bei einmaligem "
Data.s "ueberlaufen; ein gruenes muss man zweimal und ein braunes dreimal ueberlaufen."
Data.s "Die Steuerung erfolgt je nach Tastatur und Vorliebe:"
Data.s "Abbruch => <ESC>"
Data.s "auf dem Ziffernblock der Tastatur"
Data.s "nach oben => ein Feld = <8> zwei Felder = <shift><8> "
Data.s "nach rechts => ein Feld = <6> zwei Felder = <shift><6> "
Data.s "nach unten => ein Feld = <2> zwei Felder = <shift><2> "
Data.s "nach links => ein Feld = <4> zwei Felder = <shift><4> "
Data.s "."
Data.s "mit den Cursortasten, ebenfalls in Verbindung mit der Shift-Taste"
Data.s "."
Data.s "Im Buchstabenfeld der Tastatur:"
Data.s "nach oben => ein Feld = <I> zwei Felder = <shift><I> "
Data.s "nach rechts => ein Feld = <L> zwei Felder = <shift><L> "
Data.s "nach unten => ein Feld = <K> zwei Felder = <shift><K> "
Data.s "nach links => ein Feld = <J> zwei Felder = <shift><J> "
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
EndDataSection
; -------------------------------------------------------------
; -------------------------------------------------------------
DataSection
ZZ_INFO_02:
Data.s "Seite 2."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
Data.s "."
EndDataSection
; -------------------------------------------------------------
End
;==============================================================