Colour pinstripe/Display: Difference between revisions
→Tcl: Added implementation |
→{{header|Tcl}}: Added PureBasic |
||
Line 5: | Line 5: | ||
After filling the top quarter of the, we switch to a wider 2 pixel wide pinstripe pattern. Halfway down the display we switch to 3 pixel wide pinstripe and then finally to a 4 pixels wide pinstripe for the last quarter of the display. |
After filling the top quarter of the, we switch to a wider 2 pixel wide pinstripe pattern. Halfway down the display we switch to 3 pixel wide pinstripe and then finally to a 4 pixels wide pinstripe for the last quarter of the display. |
||
=={{header|PureBasic}}== |
|||
<lang PureBasic>;Create a Pinstripe image with a pattern of vertical stripe colors |
|||
Procedure PinstripeDisplay(width, height, Array psColors(1), numColors = 0) |
|||
Protected x, imgID, psHeight = height / 4, psWidth = 1, psTop, horzBand, curColor |
|||
If numColors < 1: numColors = ArraySize(psColors()) + 1: EndIf |
|||
imgID = CreateImage(#PB_Any, width, height) |
|||
If imgID |
|||
StartDrawing(ImageOutput(imgID)) |
|||
Repeat |
|||
x = 0 |
|||
curColor = 0 |
|||
Repeat |
|||
Box(x, psTop, psWidth, psHeight, psColors(curColor)) |
|||
curColor = (curColor + 1) % numColors |
|||
x + 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) |
|||
Dim psColors(7) |
|||
psColors(0) = RGB($00, $00, $00) ;black |
|||
psColors(1) = RGB($FF, $00, $00) ;red |
|||
psColors(2) = RGB($00, $FF, $00) ;green |
|||
psColors(3) = RGB($00, $00, $FF) ;blue |
|||
psColors(4) = RGB($FF, $00, $FF) ;magenta |
|||
psColors(5) = RGB($00, $FF, $FF) ;cyan |
|||
psColors(6) = RGB($FF, $FF, $00) ;yellow |
|||
psColors(7) = RGB($FF, $FF, $FF) ;white |
|||
PicID = PinstripeDisplay(WindowWidth(0), WindowHeight(0), psColors()) |
|||
ImageGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), ImageID(PicID)) |
|||
While WaitWindowEvent() <> #PB_Event_CloseWindow |
|||
Wend |
|||
EndIf</lang> |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |
||
{{libheader|Tk}} |
{{libheader|Tk}} |
Revision as of 03:55, 8 June 2011
You are encouraged to solve this task according to the task description, using any language you may know.
The task is to create 1 pixel wide colour pinstripes across the width of the graphics display. A basic of colours should be using including black, white and each of the primary colours. The pinstripes should either use the system palette sequence or the sequence Black, Red, Green, Blue, Magenta, Cyan, Yellow, White.
After filling the top quarter of the, we switch to a wider 2 pixel wide pinstripe pattern. Halfway down the display we switch to 3 pixel wide pinstripe and then finally to a 4 pixels wide pinstripe for the last quarter of the display.
PureBasic
<lang PureBasic>;Create a Pinstripe image with a pattern of vertical stripe colors Procedure PinstripeDisplay(width, height, Array psColors(1), numColors = 0)
Protected x, imgID, psHeight = height / 4, psWidth = 1, psTop, horzBand, curColor
If numColors < 1: numColors = ArraySize(psColors()) + 1: EndIf imgID = CreateImage(#PB_Any, width, height) If imgID StartDrawing(ImageOutput(imgID)) Repeat x = 0 curColor = 0 Repeat Box(x, psTop, psWidth, psHeight, psColors(curColor)) curColor = (curColor + 1) % numColors x + 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)
Dim psColors(7) psColors(0) = RGB($00, $00, $00) ;black psColors(1) = RGB($FF, $00, $00) ;red psColors(2) = RGB($00, $FF, $00) ;green psColors(3) = RGB($00, $00, $FF) ;blue psColors(4) = RGB($FF, $00, $FF) ;magenta psColors(5) = RGB($00, $FF, $FF) ;cyan psColors(6) = RGB($FF, $FF, $00) ;yellow psColors(7) = RGB($FF, $FF, $FF) ;white
PicID = PinstripeDisplay(WindowWidth(0), WindowHeight(0), psColors()) ImageGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), ImageID(PicID)) While WaitWindowEvent() <> #PB_Event_CloseWindow Wend
EndIf</lang>
Tcl
<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 red green blue magenta cyan yellow 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>