langs a-z
This commit is contained in:
parent
db842d013d
commit
d066446780
11389 changed files with 98361 additions and 1020 deletions
42
Task/Honeycombs/XPL0/honeycombs.xpl0
Normal file
42
Task/Honeycombs/XPL0/honeycombs.xpl0
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
include c:\cxpl\stdlib; \(color definitions, etc.)
|
||||
|
||||
proc DrawHexagon(X0, Y0, Side, Color); \Draw a filled hexagon centered at X0,Y0
|
||||
int X0, Y0, Side, Color;
|
||||
int X, Y;
|
||||
for Y:= -Side*19/22 to +Side*19/22 do \19/22 aprox = sqrt(3.0)/2.0
|
||||
for X:= -Side to +Side do
|
||||
if abs(X) + abs(Y)*23/38 <= Side then \23/38 aprox = 1.0/sqrt(3.0)
|
||||
Point(X+X0, Y+Y0, Color);
|
||||
|
||||
def Cols=5, Rows=4, X0=23, Y0=20; \matrix shape, offset on screen
|
||||
int C, R, X, Y, Letter, Counter, SaveX(26), SaveY(26);
|
||||
[SetVid($101); \set video to 640x480x8 graphics
|
||||
for Letter:= 0 to 26-1 do SaveX(Letter):= 0;
|
||||
Attrib(LMagenta<<8); \light magenta letter background
|
||||
for R:= 0 to Rows-1 do
|
||||
for C:= 0 to Cols-1 do
|
||||
[X:= C*35 + X0; Y:= R*40 + (C&1)*20 + Y0;
|
||||
DrawHexagon(X, Y, 22, LMagenta);
|
||||
repeat Letter:= Ran(26) until SaveX(Letter) = 0;
|
||||
Move(X-4, Y-7); ChOut(6, Letter+^A);
|
||||
SaveX(Letter):= X; SaveY(Letter):= Y; \save coordinates for letter
|
||||
];
|
||||
Counter:= 0;
|
||||
repeat Letter:= ChIn(1); \get letter from keyboard
|
||||
if Letter>=^a & Letter<=^z then Letter:= Letter-$20; \make uppercase
|
||||
if Letter>=^A & Letter<=^Z then
|
||||
if SaveX(Letter-^A) # 0 then \letter is available
|
||||
[X:= SaveX(Letter-^A); Y:= SaveY(Letter-^A);
|
||||
DrawHexagon(X, Y, 22, Yellow); \change color
|
||||
Move(X-4, Y-7);
|
||||
Attrib(Yellow<<8); ChOut(6, Letter);
|
||||
Move(Counter*8+8, Rows*40+30); \show record of chosen letters
|
||||
Attrib(Yellow); ChOut(6, Letter);
|
||||
Counter:= Counter+1;
|
||||
SaveX(Letter-^A):= 0; \letter is no longer available
|
||||
]
|
||||
else ChOut(0, Bel) \letter is not available
|
||||
else ChOut(0, Bel); \not a letter (A..Z)
|
||||
until Counter >= Cols*Rows;
|
||||
SetVid($03); \restore normal text display
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue