Feliz Ano Novo 2012!
Snippet desenvolvido à data do Ano Novo de 2012.
Código
Recorre a um módulo (ou unidade) auxiliar, de modo a estruturar e simplificar o programa.
Programa principal
{$MODE DELPHI}
program HappyNewYear2012;
uses crt, LetrasBonitas;
var N2, N1, N0 : TLetra; // números
F, E, L, I, Z : TLetra; // letras
PontoExclamacao : TLetra; // "!"
begin
// Inicializa as letras, números e símbolos
PreencherLetra(N2, '2');
PreencherLetra(N1, '1');
PreencherLetra(N0, '0');
PreencherLetra(F, 'F');
PreencherLetra(E, 'E');
PreencherLetra(L, 'L');
PreencherLetra(I, 'I');
PreencherLetra(Z, 'Z');
PreencherLetra(PontoExclamacao, '!');
// Escreve texto de introdução
TextColor(7);
GotoXY(4, 3); Write('Para todos os utilizadores do P@P,');
GotoXY(4, 4); Write('e em especial para os frequentadores dos quadros de Pascal e Delphi,');
GotoXY(4, 5); Write('desejo um');
// Desenha "FELIZ 2012" através do output das letras, números e símbolos
TextColor(15);
DesenharLetra(F, 4, 9);
DesenharLetra(E, 10, 9);
DesenharLetra(L, 16, 9);
DesenharLetra(I, 22, 9);
DesenharLetra(Z, 28, 9);
TextColor(14);
DesenharLetra(N2, 40, 9);
DesenharLetra(N0, 46, 9);
DesenharLetra(N1, 52, 9);
DesenharLetra(N2, 58, 9);
TextColor(15);
DesenharLetra(PontoExclamacao, 66, 9);
readln; // pausa - termina com ENTER
end.
Módulo/unidade auxiliar
{$MODE DELPHI}
unit LetrasBonitas;
interface
uses crt;
type TLetraPreenchimento = (Cheio, Medio, Nada); // #219, #177, #32
TLetra = array [1..5, 1..7] of TLetraPreenchimento; // [x, y]
procedure DesenharLetra(const Letra : TLetra; const PosX, PosY : word);
procedure PreencherLetra(var Letra : TLetra; const Caracter : char);
implementation
procedure DesenharLetra(const Letra : TLetra; const PosX, PosY : word);
(* Realiza o output de uma 'TLetra' *)
function LetraPreench2Char(const Preenchimento : TLetraPreenchimento) : char;
(* Converte um 'TLetraPreenchimento' no seu respectivo 'Char' *)
begin
case Preenchimento of
Cheio : result := #219;
Medio : result := #177;
Nada : result := #32;
end;
end;
var x : 1..5; // TLetra[x, y]
y : 1..7;
begin
for y := 1 to 7 do begin
GotoXY(PosX, PosY + y - 1); // coloca na linha seguinte, mantendo o alinhamento
for x := 1 to 5 do write(LetraPreench2Char(Letra[x, y])); // Output auxiliado
end;
end;
procedure PreencherLetra(var Letra : TLetra; const Caracter : char);
(* Inicializa a letra - recebe por referência a 'TLetra' e recebe qual o 'Caracter' como deve ser carregado *)
var x : 1..5; // Letra[x, y]
y : 1..7;
Caract : char; // Fica com o Upper Case de 'Caracter'
begin
Caract := UpCase(Caracter);
for x := 1 to 5 do
for y := 1 to 7 do Letra[x, y] := Nada; // Faz reset à Letra
case Caract of
'0' : begin
for x := 1 to 5 do begin
Letra[x, 1] := Cheio;
Letra[x, 7] := Cheio;
end;
for y := 2 to 6 do begin
Letra[1, y] := Cheio;
Letra[5, y] := Cheio;
end;
end;
'1' : begin
for y := 1 to 7 do Letra[5, y] := Cheio;
Letra[4, 1] := Cheio;
end;
'2' : begin
for x := 1 to 5 do begin
Letra[x, 1] := Cheio;
Letra[x, 4] := Cheio;
Letra[x, 7] := Cheio;
end;
for y := 2 to 3 do Letra[5, y] := Cheio;
for y := 5 to 6 do Letra[1, y] := Cheio;
end;
'F' : begin
for y := 1 to 7 do Letra[1, y] := Cheio;
for x := 2 to 5 do Letra[x, 1] := Cheio;
for x := 2 to 3 do Letra[x, 4] := Cheio;
end;
'E' : begin
PreencherLetra(Letra, 'F');
for x := 2 to 5 do Letra[x, 7] := Cheio;
end;
'L' : begin
for y := 1 to 7 do Letra[1, y] := Cheio;
for x := 2 to 5 do Letra[x, 7] := Cheio;
end;
'I' : begin
for y := 2 to 6 do Letra[3, y] := Cheio;
for x := 2 to 4 do begin
Letra[x, 1] := Cheio;
Letra[x, 7] := Cheio;
end;
end;
'Z' : begin
for x := 1 to 5 do begin
Letra[x, 1] := Cheio;
Letra[x, 7] := Cheio;
end;
Letra[5, 2] := Cheio;
Letra[1, 6] := Cheio;
Letra[4, 3] := Cheio;
Letra[2, 5] := Cheio;
Letra[3, 4] := Cheio;
end;
'!' : begin
for y := 1 to 7 do Letra[3, y] := Cheio;
Letra[3, 6] := Nada;
end;
end;
end;
end.