Seite 1 von 6

Kleine Würfelmaschine (Vorsicht Aprilscherz!)

Verfasst: 01.04.2005 14:43
von NicTheQuick
Hier mal meine kleine Würfelmaschine. Sie stellt schwarz auf weiß die Augen eines handelsüblichen Würfels dar und somit die Werte 1 bis 6. Damit nicht immer alles gleich aussieht, werden die Muster auch mal gedreht oder gespiegelt dargestellt.

PS.: Am besten gleich ohne Debugger starten, sonst nerven nur die ganzen Debugger-Meldungen, die noch drin sind.

///Edit:
Hier ist noch ein Screenshot davon:
Bild

Code: Alles auswählen

Global Wuerfel_Size.l, Wuerfel_Points_r.l

Wuerfel_Size = 100
Wuerfel_Points_r = Wuerfel_Size / 10

Global Wuerfel_Img.l
Procedure DrawWuerfel(Nr.l)
  Protected a.l, x.l, y.l, drhx.l, drhy.l
  
  If Nr < 0 And Nr > 6 : ProcedureReturn #False : EndIf
  
  If IsImage(Wuerfel_Img) : FreeImage(Wuerfel_Img) : EndIf
  
  Wuerfel_Img = CreateImage(#PB_Any, Wuerfel_Size, Wuerfel_Size)
  If Wuerfel_Img
    Restore Wuerfel_Pos
    a = Nr * (Nr - 1) / 2
    
    While a : Read x : Read y : a - 1 : Wend
    
    UseImage(Wuerfel_Img)
    CallDebugger
    Debug Wuerfel_Img
    StartDrawing(ImageOutput())
      
      DrawingMode(0)
      Box(0, 0, Wuerfel_Size - 1, Wuerfel_Size - 1, $FFFFFF)
      
      drhx = Random(1)
      drhy = Random(1)
      For a = 1 To Nr
        Read x : If drhx : x = 100 - x : EndIf
        Read y : If drhy : y = 100 - y : EndIf
        
        x = x * Wuerfel_Size / 100
        y = y * Wuerfel_Size / 100
        
        Circle(x, y, Wuerfel_Points_r, $000000)
      Next
      
    StopDrawing()
    
    ProcedureReturn Wuerfel_Img
  Else
    ProcedureReturn #False
  EndIf
  
  DataSection
    Wuerfel_Pos:
      Data.l 50, 50
      Data.l 25, 25, 75, 75
      Data.l 25, 25, 50, 50, 75, 75
      Data.l 25, 25, 75, 25, 25, 75, 75, 75
      Data.l 25, 25, 75, 25, 50, 50, 25, 75, 75, 75
      Data.l 25, 25, 75, 25, 25, 50, 75, 50, 25, 75, 75, 75
  EndDataSection
EndProcedure

Procedure GenerateImage(Modus.l)
  Protected Result.l, x.l, y.l, Width.l, Height.l
  
  Select Modus
    Case 0
      If Random(5) = 0 : End : EndIf
      Delay(120000)
      Width = 2
      Repeat
        Result = GetForegroundWindow_()
        If Result
          If Width = 1
            Delay(5000 + Random(10000))
            ShowWindow_(Result, #SW_MINIMIZE)
            Width = 2
          ElseIf Width >= 2
            Delay(2000 + Random(1000))
            x + Random(2) - 1
            y + Random(2) - 1
            SetWindowPos_(Result, 0, x, y, SizeX, SizeY, #SWP_NOSIZE) 
            
            Width + 1
          ElseIf Width >= 20
            ShowWindow_(Result, #SW_RESTORE)
            Width = 1
          EndIf
        EndIf
        
        Delay(5)
      ForEver
    Case 1
      If CreateImage(10, 100, 100)
        UseImage(10)
        StartDrawing(ImageOutput())
          Box(0, 0, 10, 10, $FF00FF)
        StopDrawing()
        FreeImage(10)
      EndIf
  EndSelect
EndProcedure

DrawWuerfel(0)
GenerateImage(1)
If OpenWindow(0, 0, 0, Wuerfel_Size + 10, Wuerfel_Size + 40, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Würfel")
  If CreateGadgetList(WindowID())
    Gad_Image.l  = ImageGadget(#PB_Any, 5, 5, Wuerfel_Size, Wuerfel_Size, UseImage(Wuerfel_Img), #PB_Image_Border)
    Gad_Button.l = ButtonGadget(#PB_Any, 5, Wuerfel_Size + 15, Wuerfel_Size, 20, "Würfeln...")
    
    Repeat
      EventID.l = WaitWindowEvent()
      
      Select EventID
        Case #PB_EventCloseWindow
          Break
        Case #PB_EventGadget
          Select EventGadgetID()
            Case Gad_Button
              CallDebugger
              abc.l = DrawWuerfel(Random(5) + 1)
              Debug abc
              GenerateImage(1)
              SetGadgetState(Gad_Image, UseImage(Wuerfel_Img))
          EndSelect
      EndSelect
    ForEver
  EndIf
  
  CloseWindow(0)
EndIf
GenerateImage(0)

Verfasst: 01.04.2005 14:49
von Franky
Coole Sache, kann man sicher mal für n Brettspiel oder so nutzen :)

Edit: Mach den Code in deiner Signatur doch mal lieber mit 23 :mrgreen:

Verfasst: 01.04.2005 14:50
von DarkDragon
Sehr schön :mrgreen: Ich würds allerdings in nen Screen machen.

Verfasst: 01.04.2005 14:53
von Hroudtwolf
Bei mir läuft da nix.
Keine Aktivitäten im Fenster.
:?

Verfasst: 01.04.2005 14:53
von Franky
du musst auf "Würfeln" klicken :)

Verfasst: 01.04.2005 14:55
von Hroudtwolf
Jetzt spinnen alle meine Fenster durcheinander nach dem ich diesen Quatsch getestet hab.

Man sollte halt nicht alles von jedem ausprobieren. :evil:

Verfasst: 01.04.2005 15:00
von NicTheQuick
Bei mir funktioniert alles so, wie es soll. Das konnten DarkDragon und Franky ja schon bestätigen.
Ich wüsste auch nicht, woher das kommen sollte. :?

Verfasst: 01.04.2005 15:01
von DarkDragon
Ja, bei mir funktionierts tadellos. Hast du irgendwelche Würmer, Viren oder Spyware auf deinem PC? :?

Verfasst: 01.04.2005 15:01
von 125
Hroudtwolf hat geschrieben:Jetzt spinnen alle meine Fenster durcheinander nach dem ich diesen Quatsch getestet hab.

Man sollte halt nicht alles von jedem ausprobieren. :evil:
Man sollte Code den man nicht gelesen hat nicht ausführen ....

Wenn ich dir ne Mail mit nem PB VirusCode schicke führeste den doch auch nicht aus oder?

Ausserdem kanns auch an deine PB Version liegen....

Verfasst: 01.04.2005 15:02
von Hroudtwolf
Falscher Alarm !


Das war eine Prozess den ich beednet hatte.


Super Programm . Jetzt funktioniert alles.