Ich habe mal den Mastermind-Code von cshw89 geändert und ihm eine schönen Holzoptik spendiert.
So werden dann aus 28 Zeilen schnell wieder 41.
Code: Alles auswählen
;*******************************************************************************
;*
;* July-August 2014 PurePunch contest
;* PureBasic 5.22
;* 50 lines of 80 chars, 2 months delay
;*
;* Name : Mastermind
;* Author : cshw89 & NicTheQuick
;* Date : 14/07/14
;* Notes : You have ten attempts to crack the code. Duplicates are
;* allowed. Click or drag the colors to the respective positions.
;*
;*******************************************************************************
#s=199:Global Dim n.d(#s,#s):For x=0 To#s:For y=0 To#s:n(x,y)=Random(9999)/9999
Next:Next:Macro p(a=):Procedure#a:EndMacro:p(.d) t(e.d,f.d,s.d):r.d=0:g.d=s:
While(s>=1):t.d=e/s:u.d=f/s:i.d=t-Int(t):j.d=u-Int(u):w=Int(t)%#s:b=Int(u)%#s:
c=(w+#s-1)%#s:d=(b+#s-1)%#s:r+(i*j*n(w,b)+i*(1-j)*n(w, d)+(1-i)*(1-j)*n(c,d)+(1+
0-i)*j*n(c,b))*s:s/2:Wend:p(Return)(128*r/g):EndProcedure:p() m(x,y,_,t):c.d=0+
Pow((Red(t)/255),4):w.d=x*5/#s+y*10/#s+t(x,y,21)/50:v.d=128*Abs(Sin(w*#PI))
c=0.5*(c+1):p(Return) RGB(c*(80+v),c*(30+v),30):EndProcedure:CreateImage(0,250,
480,24,$ff):StartDrawing(ImageOutput(0)):DrawingMode(#PB_2DDrawing_Gradient):
For k=0 To 10:For i=0 To 3:CircularGradient(i*40+26,k*40+26,15):FrontColor($7f)
BackColor($ff):Circle(i*40+20,k*40+20,15):Next:Next:CustomFilterCallback(@m())
DrawingMode(#PB_2DDrawing_CustomFilter):Box(0,0,250,480):StopDrawing():#t="Mas"+
"termind":l=-2:Dim i(3):Dim r(3):Macro m:Macro:EndMacro:m u(w):
Val(Mid("$A0A0A0$0000FF$00D000$FF0000$00D0D0$0070D0$D000D0",(w)*7+1,7)):EndMacro
OpenWindow(0,0,0,250,480,#t,#PB_Window_SystemMenu|#PB_Window_ScreenCentered):
CanvasGadget(0,0,0,250,480):m z(x,y,r,c):DrawingMode(#PB_2DDrawing_Gradient):
FrontColor(u(c)):BackColor($ffffff):CircularGradient(x-3,y-3,r):If r:Circle(x,y,
r):EndIf:EndMacro:m c():If StartDrawing(CanvasOutput(0)):DrawImage(ImageID(0),0,
0):If (IsImage(1)):DrawImage(ImageID(1),0,0):EndIf:For i=0 To 3:z(i*40+20,400+
20,Bool(i(i))*15,i(i)):DrawingMode(#PB_2DDrawing_AlphaBlend):c=255-i*10:Box(170+
i,405+i,70-2*i,30-2*i,RGBA(c,c,c,99)):Next:DrawingMode(1):DrawText(193,412,"OK",
0):For i=0 To 5:z(i*30+15,460,9,i+1):Next:If l>0:z(x,y,15,l):EndIf:StopDrawing()
EndIf:EndMacro:For i=0 To 3:r(i)=Random(5)+1:Next:m q(m):MessageRequester(#t,m)
EndMacro:m g(t):GetGadgetAttribute(0,t):EndMacro:Repeat:m V:EndIf:EndMacro:e=0+
WaitWindowEvent():If e=#PB_Event_Gadget:t=EventType():x=g(#PB_Canvas_MouseX):
y=g(#PB_Canvas_MouseY):b=-1:If y>=400:If x<160 And y<440:b=x/40:ElseIf x<180+
0 And y>=440:b=x/30+4:V:V:Select t:Case #PB_EventType_MouseMove:If f=0 And g(0+
#PB_Canvas_Buttons)&#PB_Canvas_LeftButton:If l=-2 And(Abs(x-lx)>1 Or Abs(y-ly)+
0>1):If b=-1:l=-1:ElseIf b<4:l=i(b):i(b)=0:Else:l=b-3:V:V:V:Case 0+
#PB_EventType_LeftButtonUp:If l>0 And b>=0 And b<4:i(b)=l:V:If l=-2:If b>-1+
0 And f=0:If b<4:i(b)=0:Else:For k=0 To 3:If i(k)=0:i(k)=b-3:Break:V:Next:V
Else:If x>=160 And y>=400 And y<440:If f:For k=0 To 3:r(k)=Random(5)+1:i(k)=0
Next:f=0:a=0:c():Else:h=1:For k=0 To 3:If i(k)=0:h=0:V:Next:If h:r=0:w=0:
For i=0 To 3:If r(i)=i(i):i(i)*-1:r(i)*-1:r+1:V:Next:For i=0 To 3:For k=0 To 3
If i(k)>0 And r(i)=i(k) And i<>k:i(k)*-1:w+1:Break:V:Next:Next:StartDrawing(0+
CanvasOutput(0)):For i=0 To 3:i(i)=Abs(i(i)):r(i)=Abs(r(i)):z(i*40+20,a*40+20,
Bool(i(i))*15,i(i)):i(i)=0:Next:DrawingMode(1):i=170:For k=1 To r:Box(i,a*40+12,
16,16,0):i+20:Next:For k=1 To w:Box(i,a*40+12,16,16,$FFFFFF):i+20:Next:
GrabDrawingImage(1,0,0,250,400):StopDrawing():a+1:If r=4:f=1:q("You Win!")
FreeImage(1):ElseIf a=10:For i=0 To 3:i(i)=r(i):Next:c():q("You Lose!"):f=1:V:V
V:V:V:V:l=-2:Case #PB_EventType_LeftButtonDown:If f=0:lx=x:ly=y:V:EndSelect
If y<415:y=415:V:c():V:Until e=#PB_Event_CloseWindow