Thread Ausgabe auf Bildschirm: Wie Position des Cursors bestimmen (X/Y Koordinaten) (9 answers)
Opened by bytebrain at 2008-10-09 17:35

MatthiasW
 2008-10-09 19:10
#115336 #115336
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
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"'

View full thread Ausgabe auf Bildschirm: Wie Position des Cursors bestimmen (X/Y Koordinaten)