#Include "flussdiagramm.bi" ' – 1 = COLONEL WOODLEY 2 = MR HOLMAN ' – 3 = MR POPE 4 = SIR RAYMOND Enum col_woodley = 1 mr_holman mr_pope sir_raymond End Enum Dim As Integer dx, dy, abstand Dim As Any Ptr puffer ReDim As tDiagramm fd(100) ScreenRes 1000,800,32 puffer = ImageCreate(1000, 2000,RGB(0,0,0), 32) tDiagramm.hintergrundfarbe = Point(0,0,puffer) 'vorgabewerte für flussdiagramm setzen For x As Integer = 0 To UBound(fd) fd(x).grafikpuffer = puffer fd(x).arrayptr = @fd(0) 'diese zeile auskommentieren, wenn keine indices angezeigt werden sollen fd(x).indexfarbe = RGBA(0,255,0,255) fd(x).breite = 200 fd(x).hoehe = 30 Next 'ScreenRes 1000,800,32 Dim Haarfarbe(4)As String Dim AeussereErscheinung(4)As String Dim Zimmernummer(4)As String Dim As Integer Moerder, Verdaechtiger Dim As ULong farbe2 = RGBA(255,0,255,255) '--------------------------- dx = 150 dy = 30 abstand = 70 With fd(1) If .flag = 0 Then 'element wurde noch nicht gezeichnet .muster = oval .xpos = dx .ypos = dy .hoehe = 20 .text = "START" .zeichnen EndIf End With '--------------------------- 'UNTERSTELLEN, DASS NICHTS BEKANNT IST Moerder = 0 For Verdaechtiger = 1 To 4 Haarfarbe(Verdaechtiger) = "UNBEKANNT" AeussereErscheinung(Verdaechtiger) = "UNBEKANNT" Zimmernummer(Verdaechtiger) = "UNBEKANNT" Next Verdaechtiger '--------------------------- With fd(2) If .flag = 0 Then dy += abstand - 20 .muster = rechteck .xpos = dx .ypos = dy .text = "Anfangswerte setzen" .zeichnen .pfeil(fd(1).unten, .oben) EndIf End With '--------------------------- 'BEKANNTE HINWEISE ANGEBEN Zimmernummer(sir_raymond) = "ZIMMER 10" AeussereErscheinung(mr_pope) = "GOLDUHR" AeussereErscheinung(mr_holman) = "RUBINRING" Zimmernummer(mr_holman) = "ZIMMER 12" Verdaechtiger = 1 '--------------------------- With fd(3) If .flag = 0 Then dy += abstand - 10 .muster = rechteck .xpos = dx .ypos = dy .text = "Bekannte Hinweise setzen" .zeichnen .pfeil(fd(2).unten, .oben) EndIf End With With fd(4) If .flag = 0 Then dy += abstand - 10 .muster = rechteck .xpos = dx .ypos = dy .text = "Verdaechtiger = 1" .zeichnen .pfeil(fd(3).unten, .oben) EndIf End With '--------------------------- 'VERBLEIBENDE HINWEISE WIEDERHOLT PRUEFEN Do 'Der Mann in Zimmer 14 hatte schwarze Haare. If Zimmernummer(Verdaechtiger) = "ZIMMER 14" Then Haarfarbe(Verdaechtiger) = "SCHWARZ" EndIf '--------------------------- With fd(5) If .flag = 0 Then dy += abstand .muster = raute .xpos = dx .ypos = dy .hoehe = 50 .text = "Zimmernr. = 14 ?" .zeichnen .pfeil(fd(4).unten, .oben) EndIf End With With fd(6) If .flag = 0 Then .muster = rechteck .xpos = fd(5).xpos + 300 .ypos = fd(5).ypos .text = "Haarfarbe = schwarz" .zeichnen .pfeil(fd(5).rechts, .links,"J") EndIf End With '--------------------------- 'Entweder Colonel Woodley oder Sir Raymond trugen einen Zwicker. If AeussereErscheinung(sir_raymond) <> "UNBEKANNT" And _ AeussereErscheinung(sir_raymond) <> "ZWICKER" Then AeussereErscheinung(col_woodley) = "ZWICKER" EndIf '--------------------------- With fd(7) If .flag = 0 Then dy += abstand + 20 .muster = raute .xpos = dx .ypos = dy .hoehe = 50 .text = "hat Sir Ray-\nmond ein aeusseres\nMerkmal?" .zeichnen .pfeil(fd(5).unten, .oben,"N") .pfeil(fd(6).unten, .oben + 20) EndIf End With With fd(8) If .flag = 0 Then dy += abstand + 10 .muster = raute .xpos = dx .ypos = dy .hoehe = 50 .text = "traegt\nSir Raymond einen\nZwicker?" .zeichnen .pfeil(fd(7).unten, .oben,"J") EndIf End With With fd(9) If .flag = 0 Then dy += abstand .muster = rechteck .xpos = dx .ypos = dy .text = "Col. Woodley = Zwicker" .zeichnen .pfeil(fd(8).unten, .oben,"N") EndIf End With '--------------------------- If AeussereErscheinung(col_woodley) <> "UNBEKANNT" And _ AeussereErscheinung(col_woodley) <> "ZWICKER" Then AeussereErscheinung(sir_raymond) = "ZWICKER" EndIf '--------------------------- With fd(10) If .flag = 0 Then .muster = raute .xpos = dx + 300 .ypos = fd(7).ypos .hoehe = 50 .text = "hat Col. Wood-\nley ein aeusseres\nMerkmal?" .zeichnen .pfeil(fd(7).rechts, .links,"N") EndIf End With With fd(11) If .flag = 0 Then .muster = raute .xpos = fd(10).xpos .ypos = fd(8).ypos .hoehe = 50 .text = "traegt\nCol. Woodley einen\nZwicker?" .zeichnen .pfeil(fd(10).unten, .oben,"J") .pfeil(fd(8).rechts, fd(10).links + 50,"J") EndIf End With With fd(12) If .flag = 0 Then .muster = rechteck .xpos = fd(10).xpos .ypos = fd(9).ypos .text = "Sir Raymond = Zwicker" .zeichnen .pfeil(fd(11).unten, .oben,"N") EndIf End With '--------------------------- 'Der Mann mit dem Zwicker hatte braune Haare. If AeussereErscheinung(Verdaechtiger) = "ZWICKER" Then Haarfarbe(Verdaechtiger) = "BRAUN" EndIf '--------------------------- With fd(13) If .flag = 0 Then dy += abstand + 20 .muster = raute .xpos = dx .ypos = dy .hoehe = 50 .text = "Traegt der\nVerdaechtige einen\nZwicker?" .zeichnen .pfeil(fd(9).unten, .oben) .pfeil(fd(10).rechts + 30, .oben + 20,"N") .pfeil(fd(11).rechts + 50, .oben,"J") .pfeil(fd(12).unten, .oben) EndIf End With With fd(14) If .flag = 0 Then .muster = rechteck .xpos = fd(13).xpos + 300 .ypos = fd(13).ypos .text = "Haarfarbe = braun" .zeichnen .pfeil(fd(13).rechts, .links,"J") EndIf End With '--------------------------- 'Der Mann mit zerfransten Ärmeln hatte rote Haare. If AeussereErscheinung(Verdaechtiger) = "AERMEL" Then Haarfarbe(Verdaechtiger) = "ROT" EndIf '--------------------------- With fd(15) If .flag = 0 Then dy += abstand + 20 .muster = raute .xpos = dx .ypos = dy .hoehe = 50 .text = "Hat der Ver-\ndaechtige zerfrans-\nte Aermel?" .zeichnen .pfeil(fd(13).unten, .oben,"N") .pfeil(fd(14).unten, .oben + 20) EndIf End With With fd(16) If .flag = 0 Then .muster = rechteck .xpos = fd(15).xpos + 300 .ypos = fd(15).ypos .text = "Haarfarbe = rot" .zeichnen .pfeil(fd(15).rechts, .links,"J") EndIf End With '--------------------------- 'Der Mann in Zimmer 16 hatte zerfranste Ärmel. If Zimmernummer(Verdaechtiger) = "ZIMMER 16" Then AeussereErscheinung(Verdaechtiger) = "AERMEL" EndIf '--------------------------- With fd(17) If .flag = 0 Then dy += abstand + 20 .muster = raute .xpos = dx .ypos = dy .hoehe = 50 .text = "Zimmernr. = 16 ?" .zeichnen .pfeil(fd(15).unten, .oben,"N") .pfeil(fd(16).unten, .oben + 20) EndIf End With With fd(18) If .flag = 0 Then .muster = rechteck .xpos = fd(17).xpos + 300 .ypos = fd(17).ypos .text = "Aeussere Erscheinung =\nzerfranste Aermel" .zeichnen .pfeil(fd(17).rechts, .links,"J") EndIf End With '--------------------------- 'Der Mann in Zimmer 12 hatte graue Haare. If Zimmernummer(Verdaechtiger) = "ZIMMER 12" Then Haarfarbe(Verdaechtiger) = "GRAU" EndIf '--------------------------- With fd(19) If .flag = 0 Then dy += abstand + 20 .muster = raute .xpos = dx .ypos = dy .hoehe = 50 .text = "Zimmernr. = 12 ?" .zeichnen .pfeil(fd(17).unten, .oben,"N") .pfeil(fd(18).unten, .oben + 20) EndIf End With With fd(20) If .flag = 0 Then 'dy += abstand .muster = rechteck .xpos = fd(19).xpos + 300 .ypos = fd(19).ypos .text = "Haarfarbe = grau" .pfeil(fd(19).rechts, .links,"J") .zeichnen EndIf End With '--------------------------- 'Der Mann mit der goldenen Uhr bewohnte Zimmer 14. If AeussereErscheinung(Verdaechtiger) = "GOLDUHR" Then Zimmernummer(Verdaechtiger) = "ZIMMER 14" EndIf '--------------------------- With fd(21) If .flag = 0 Then dy += abstand + 20 .muster = raute .xpos = dx .ypos = dy .hoehe = 50 .text = "Traegt der\nVerdaechtige eine\ngoldene Uhr?" .zeichnen .pfeil(fd(19).unten, .oben,"N") .pfeil(fd(20).unten, .oben + 20) EndIf End With With fd(22) If .flag = 0 Then .muster = rechteck .xpos = fd(21).xpos + 300 .ypos = fd(21).ypos .text = "Verdaechtiger =\nZimmernr. 14" .zeichnen .pfeil(fd(21).rechts, .links,"J") EndIf End With '--------------------------- 'Colonel Woodley bewohnte ein Eckzimmer. If Zimmernummer(Verdaechtiger) = "ZIMMER 10" And _ Verdaechtiger <> col_woodley Then Zimmernummer(col_woodley) = "ZIMMER 16" EndIf '--------------------------- With fd(23) If .flag = 0 Then dy += abstand + 20 .muster = raute .xpos = dx .ypos = dy .hoehe = 50 .text = "Zimmernr. = 10 ?" .zeichnen .pfeil(fd(21).unten, .oben,"N") .pfeil(fd(22).unten, .oben + 20) EndIf End With With fd(24) If .flag = 0 Then .muster = raute .xpos = dx + 300 .ypos = fd(23).ypos .hoehe = 50 .text = "Ist der Ver-\ndaechtige Col.\nWoodley ?" .zeichnen .pfeil(fd(23).rechts, .links,"J") EndIf End With With fd(25) If .flag = 0 Then dy += abstand .muster = rechteck .xpos = fd(24).xpos .ypos = dy .text = "Col. Woodley =\nZimmernr. 16" .zeichnen .pfeil(fd(24).unten, .oben,"N") EndIf End With With fd(26) If .flag = 0 Then dy += abstand + 20 .muster = raute .xpos = dx .ypos = dy .hoehe = 50 .text = "Zimmernummer = 16 ?" .zeichnen .pfeil(fd(23).unten, .oben,"N") .pfeil(fd(25).links, .oben) .pfeil(fd(24).rechts + 20, .oben + 20,"J") EndIf End With '--------------------------- If Zimmernummer(Verdaechtiger) = "ZIMMER 16" And _ Verdaechtiger <> col_woodley Then Zimmernummer(col_woodley) = "ZIMMER 10" EndIf '--------------------------- With fd(27) If .flag = 0 Then .muster = raute .xpos = dx + 300 .ypos = fd(26).ypos .hoehe = 50 .text = "Ist der Ver-\ndaechtige Col.\nWoodley ?" .zeichnen .pfeil(fd(26).rechts, .links,"J") EndIf End With With fd(28) If .flag = 0 Then dy += abstand .muster = rechteck .xpos = fd(27).xpos .ypos = dy .text = "Col. Woodley =\nZimmernr. 10" .zeichnen .pfeil(fd(27).unten, .oben,"N") EndIf End With '--------------------------- 'Der Mörder hatte braune Haare. If Haarfarbe(Verdaechtiger) = "BRAUN" Then Moerder = Verdaechtiger EndIf '--------------------------- With fd(29) If .flag = 0 Then dy += abstand + 20 .muster = raute .xpos = dx .ypos = dy .hoehe = 50 .text = "Haarfarbe = braun ?" .zeichnen .pfeil(fd(26).unten, .oben,"N") .pfeil(fd(28).links, .oben) .pfeil(fd(27).rechts + 20, .oben + 20,"J") EndIf End With With fd(30) If .flag = 0 Then dy += abstand .muster = rechteck .xpos = dx .ypos = dy .text = "Moerder = Verdaechtiger" .zeichnen .pfeil(fd(29).unten, .oben,"J") EndIf End With With fd(31) If .flag = 0 Then dy += abstand - 10 .muster = rhombus .xpos = dx .ypos = dy .text = "Namen des Moerders\nausgeben" .zeichnen .pfeil(fd(30).unten, .oben,"J") EndIf End With With fd(32) If .flag = 0 Then dy += 2 * abstand .muster = oval .xpos = dx .ypos = dy .hoehe = 20 .text = "ENDE" .zeichnen .pfeil(fd(31).unten, .oben) EndIf End With '--------------------------- 'NAECHSTEN VERDAECHTIGEN PRUEFEN If Verdaechtiger = 4 Then Verdaechtiger = 1 Else Verdaechtiger = Verdaechtiger + 1 EndIf Loop While Moerder = 0 '--------------------------- With fd(33) If .flag = 0 Then dy += abstand .muster = raute .xpos = dx + 300 .ypos = fd(30).ypos - 20 .breite = 200 .hoehe = 50 .text = "Verdaechtiger = 4 ?" .zeichnen .pfeil(fd(29).rechts, .oben,"N") EndIf End With With fd(34) If .flag = 0 Then .muster = rechteck .xpos = dx + 300 .ypos = fd(31).ypos .breite = 200 .hoehe = 30 .text = "Verdaechtiger = 1" .zeichnen .pfeil(fd(33).unten, .oben,"J") EndIf End With With fd(35) If .flag = 0 Then .muster = rechteck .xpos = dx + 300 .ypos = fd(34).ypos + abstand .breite = 200 .hoehe = 30 .text = "naechster Verdaechtiger" .zeichnen .pfeil(fd(33).links + 20, .links,"N") .pfeil(fd(35).rechts + 50, fd(5).oben + 20) .pfeil(fd(34).rechts + 50, fd(5).oben + 20) EndIf End With '--------------------------- 'ZEIGE NAMEN DES MOERDERS AN Select Case Moerder Case 1 Print "DER MOERDER IST COLONEL WOODLEY" Case 2 Print "DER MOERDER IST MR. HOLMAN" Case 3 Print "DER MOERDER IST MR. POPE" Case 4 Print "DER MOERDER IST SIR RAYMOND" End Select 'diagramm in datei speichern Dim As Integer breite, hoehe, farbtiefe, bpp Dim As Any Ptr puffer1, puffer2 ImageInfo puffer, breite, hoehe, bpp puffer1 = ImageCreate(breite, hoehe,, bpp * 8) 'grafikpuffer erzeugen puffer2 = ImageCreate(breite, hoehe,RGB(255,255,255), bpp * 8) 'grafikpuffer mit weissem hintergrund erzeugen Get puffer, (0,0)-(breite - 1, hoehe - 1), puffer1 'diagramm in puffer1 laden Put puffer1,(0,0),puffer2,Xor 'farben invertieren BSave("C:\flussdiagramm.bmp", puffer1, breite * hoehe * bpp) 'diagramm speichern ImageDestroy puffer1 ImageDestroy puffer2 'diagrammausschnitt auf grafikscreen anzeigen (scrollen mit mausrad) Dim As Integer y, schritt = 30 Dim As Integer sc_breite, sc_hoehe Dim As Integer mx, my, rad, tasten, tastenvor, radbasis, radmerken = rad + 1 'Open Cons For Output As #1 ScreenInfo sc_breite, sc_hoehe Do GetMouse mx, my, rad, tasten If tasten = -1 Then 'maus ist ausserhalb des fensters --> keine aktion tastenvor = tasten Else If tastenvor = -1 Then 'maus ist neu im fenster radbasis = rad + y / schritt 'radbasis neu setzen EndIf tastenvor = tasten y = (radbasis - rad) * schritt 'beginn des bildausschnitts 'Print #1, "basis ";radbasis,"rad ";rad,"y ";y,"merken ";radmerken If y < 0 Then 'diagramm ist am oberen ende --> weitere mausraddrehung nach vorne ignorieren If rad <= radmerken Then 'mausrad wurde nach vorne gedreht radbasis = radmerken 'basis anpassen EndIf ElseIf y > (hoehe - sc_hoehe) Then 'diagramm ist am unteren ende --> weitere mausraddrehung nach hinten ignorieren If rad >= radmerken Then 'mausrad wurde nach hinten gedreht radbasis = radmerken + (hoehe - sc_hoehe) / schritt 'basis anpassen EndIf ElseIf rad <> radmerken Then 'mausrad wurde bewegt ScreenLock Put (0,0),puffer,(0, y) - (sc_breite, y + sc_hoehe), PSet 'diagrammausschnitt auf grafikscreen ScreenUnLock EndIf radmerken = rad Sleep 1 EndIf Loop Until Len(InKey) Or (tasten = 1) ImageDestroy puffer