Thread Ausgabe auf Bildschirm: Wie Position des Cursors bestimmen (X/Y Koordinaten)
(9 answers)
Opened by bytebrain at 2008-10-09 17:35
Wenn es dir nur darum geht Zeichen/Strings an bestimmten Positionen auszugeben, und du keine speziellen Eingaben brauchst, kannst du natürlich auch selbst was mit print bauen:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 { my @screen; my @pos = ( 0, 0 ); my @size = ( 80, 24 ); sub size { @_ ? @size = @_ : @size } sub at { @_ ? @pos = @_ : @pos } sub set { my @str = split //, $_[0]; $screen[ $pos[1] ][ $pos[0] + $_ ] = $str[$_] for 0 .. $#str; } # set sub clear { @screen = (); $^O =~ /win/i ? system('cls') : system('clear') } # clear sub show { for my $y ( 1 .. $size[1] ) { for my $x ( 1 .. $size[0] ) { my $char = $screen[ $y-1 ][ $x-1 ]; $char = ' ' unless defined $char; print $char; } # for print "\n"; } # for } # show } Hier hast du den Array @screen, in dem die einzelnen Zeichen für die jeweilige Bildschirmposition gespeichert sind. Ein set() schreibt Zeichen in @screen ab der aktuellen Position @pos. @pos kannst du mit at() setzen/erfragen. show() gibt @screen auf dem Bildschirm aus, alle nicht definierten Werte in Screen werden als ' '(Leerschritt) interpretiert. Mit clear() löschst du @screen und den Terminalinhalt. Ob es ausreicht auf /win/i zu prüfen für das 'cls' und ansonsten von einem 'clear' auszugehen, weiß ich nicht. In @size steht die Anzahl der Reihen und die Anzahl der Spalten, mittels size() kannst du sie setzen/erfragen. MfG perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
|