Pinstripe/Display: Difference between revisions

From Rosetta Code
Content added Content deleted
(vertical pinstripes)
(→‎{{header|PureBasic}}: changed direction of stripes)
Line 5: Line 5:


=={{header|PureBasic}}==
=={{header|PureBasic}}==
<lang PureBasic>; Create a Pinstripe image
<lang PureBasic>#White = $FFFFFF ;color

Procedure PinstripeDisplay(Width, Height)
;Create a Pinstripe image
Protected x, l=1, imgID
Procedure PinstripeDisplay(width, height)
imgID=CreateImage(#PB_Any, Width, Height)
Protected x, imgID, psHeight = height / 4, psWidth = 1, psTop, horzBand
imgID = CreateImage(#PB_Any, width, height)
If imgID
If imgID
StartDrawing(ImageOutput(imgID))
StartDrawing(ImageOutput(imgID))
Repeat
Repeat
Box(x, 0, l, Height, #White)
x = 0
Repeat
If x>3*Width/4 And l<4 : l=4: x-1
Box(x, psTop, psWidth, psHeight, #White)
ElseIf x>Width/2 And l<3 : l=3: x-1
ElseIf x>Width/4 And l<2 : l=2: x-1
x + 2 * psWidth
EndIf
Until x >= width
x+2*l
psWidth + 1
Until x >= Width
horzBand + 1
psTop = horzBand * height / 4 ;move to the top of next horizontal band of image
Until psTop >= height
StopDrawing()
StopDrawing()
EndIf
EndIf
Line 24: Line 28:
EndProcedure
EndProcedure


; Open a window and display the pinstripe
;Open a window and display the pinstripe
If OpenWindow(0,0,0,1,1,"PureBasic Pinstripe",#PB_Window_Maximize|#PB_Window_SystemMenu)
If OpenWindow(0, 0, 0, 1, 1,"PureBasic Pinstripe", #PB_Window_Maximize | #PB_Window_SystemMenu)
PicID = PinstripeDisplay(WindowWidth(0), WindowHeight(0))
PicID = PinstripeDisplay(WindowWidth(0), WindowHeight(0))
ImageGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), ImageID(PicID))
ImageGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), ImageID(PicID))
While WaitWindowEvent() <> #PB_Event_CloseWindow
While WaitWindowEvent() <> #PB_Event_CloseWindow
Wend
Wend
EndIf
EndIf</lang>
</lang>


=={{header|Tcl}}==
=={{header|Tcl}}==

Revision as of 19:29, 4 June 2011

Task
Pinstripe/Display
You are encouraged to solve this task according to the task description, using any language you may know.

The task is to demonstrate the creation of 1 pixel wide vertical pinstripes across the entire width of the display. The pinstripes should alternate one pixel white, one pixel black.

Quarter of the way down the display, we can switch to a wider 2 pixel wide vertical pinstripe pattern, alternating two pixels white, two pixels black. Half way down the display, we switch to 3 pixels wide, and for the lower quarter of the display we use 4 pixels.

PureBasic

<lang PureBasic>#White = $FFFFFF ;color

Create a Pinstripe image

Procedure PinstripeDisplay(width, height)

 Protected x, imgID, psHeight = height / 4, psWidth = 1, psTop, horzBand
 imgID = CreateImage(#PB_Any, width, height)
 If imgID
   StartDrawing(ImageOutput(imgID))
     Repeat 
       x = 0
       Repeat
         Box(x, psTop, psWidth, psHeight, #White)
         x + 2 * psWidth
       Until x >= width
       psWidth + 1
       horzBand + 1
       psTop = horzBand * height / 4  ;move to the top of next horizontal band of image
     Until psTop >= height 
   StopDrawing()
 EndIf
 ProcedureReturn imgID

EndProcedure

Open a window and display the pinstripe

If OpenWindow(0, 0, 0, 1, 1,"PureBasic Pinstripe", #PB_Window_Maximize | #PB_Window_SystemMenu)

 PicID = PinstripeDisplay(WindowWidth(0), WindowHeight(0))
 ImageGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), ImageID(PicID))
 While WaitWindowEvent() <> #PB_Event_CloseWindow
 Wend  

EndIf</lang>

Tcl

Library: Tk

<lang tcl>package require Tcl 8.5 package require Tk 8.5

wm attributes . -fullscreen 1 pack [canvas .c -highlightthick 0] -fill both -expand 1 set colors {black white}

set dy [expr {[winfo screenheight .c]/4}] set y 0 foreach dx {1 2 3 4} {

   for {set x 0} {$x < [winfo screenwidth .c]} {incr x $dx} {

.c create rectangle $x $y [expr {$x+$dx}] [expr {$y+$dy}] \

           -fill [lindex $colors 0] -outline {}

set colors [list {*}[lrange $colors 1 end] [lindex $colors 0]]

   }
   incr y $dy

}</lang>