Kleine Würfelmaschine (Vorsicht Aprilscherz!)
Verfasst: 01.04.2005 14:43
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:

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:

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)