Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4666[/thread]

Perl TK - Programm (Seite 2)

Leser: 1


<< |< 1 2 3 4 >| >> 35 Einträge, 4 Seiten
Crian
 2003-10-26 19:09
#44679 #44679
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Ich schreib es auch lieber mit Klammern, wahrscheinlich aus dem gleichen Grund.

Zu Tk-Snippets kannst Du auch mal auf meiner Perl-Seite vorbei schauen.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
BrownWolf
 2003-10-26 19:31
#44680 #44680
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Hi, hab mir jetzt mal nen Beispiel angeschaut. Und da ich gerade am lernen bin frage ich mich warum du es nicht so gemacht hast:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use Tk;
require Tk::LabEntry;
$mw = new MainWindow;

foreach (qw/Vorname Nachname Strasse PLZ Ort/) {
        $mw->LabEntry(
               
       -label => $_,
               
       -textvariable => \$results{$_}
        )->pack();
}
$mw->Button(-text => "Ok", -command => sub { print "$_ => $results{$_}
" for keys %results })->pack();
$mw->Button(-text => "Exit", -command => sub { exit } )->pack();

MainLoop;


Und warum du in deinen ganzen Beispielen keine Klammern bei MainLoop benutzt. Aber sagst das du es immer benutzt ;)

Edit: Ich nehms wieder zurück. Du hast doch Klammern in einigen Beispielen :-P\n\n

<!--EDIT|BrownWolf|1067189878-->
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
Crian
 2003-10-26 19:42
#44681 #44681
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Viele Snippets sind im alten Forum geposteteter Code, ich hab den nicht immer vollständig auf meine Art umgesetzt.

Auf welches Snippet beziehst Du Dich denn?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Dubu
 2003-10-27 01:31
#44682 #44682
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=BrownWolf,26.10.2003, 05:39]Und Uhren kann man damit auch basteln *G*[/quote]
Digitaluhr, wie langweilig. ;)
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
#!/usr/bin/perl
use strict;
use warnings;
use Tk;

use constant PI => 3.1415927;
my $Size = 100;

my @Weekdays = qw/Son Mon Die Mit Don Fre Sam/;
my ($HSec, $HMin, $HHour, $Date);
my $Mw = MainWindow->new;
my $HFace = $Mw->Canvas (-width => 2*$Size, -height => 2*$Size)->pack;
my $DText = $Mw->Label (-textvariable => \$Date)->pack;

$HFace->createLine (tc(0.9, $_), tc(1, $_)) for (0..11);

drawtime();
$Mw->repeat (1000, \&drawtime);
$Mw->MainLoop();

sub drawtime {
    my ($s, $m, $h, $dy, $mn, $yr, $wd) = (localtime())[0..6];
    $Date = sprintf("%s, %02d.%02d.%04d", $Weekdays[$wd], $dy, $mn+1, $yr+1900);
    $h+=$m/60;
    for ($HSec, $HMin, $HHour) {
        $HFace->delete($_) if $_;
    }
    $HSec  = $HFace->createLine ($Size, $Size, tc(0.88, $s/5));
    $HMin  = $HFace->createPolygon (tc(0.85, $m/5), tc(0.05, ($m/5+4)), tc(0.05, ($m/5-4)));
    $HHour = $HFace->createPolygon (tc(0.5, $h), tc(0.05, $h+4), tc(0.05, $h-4));
    $Mw->update;
}

sub tc {
    my ($scale, $time) = @_;
    return ($Size*$scale*sin($time*PI/6)+$Size,
           -$Size*$scale*cos($time*PI/6)+$Size);
}


Edit: Monat+1 gefixt.\n\n

<!--EDIT|Dubu|1067423409-->
BrownWolf
 2003-10-27 01:46
#44683 #44683
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Sieht gar nicht schlecht aus.
Hast du die gerade selbst gemacht ?
Bei Monat hast du nur +1 vergessen ;)
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
BrownWolf
 2003-10-27 03:05
#44684 #44684
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Und hier ist mein erstes einfaches Spiel.
Ich komme aber in Perl immer noch mit dem Rand() durcheinander ... ist das so korrekt wie ich das gemacht habe ?
Und kann mir noch jemand erklären warum einige in ihren Scripten "srand;" schreiben. Habs immer noch nicht begriffen.

Code: (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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/perl
use strict;
use Tk;
require Tk::Dialog;

my $msg = <<"EOT";
Herzlich Willkommen !
Der Computer wird nun eine Zahl zwischen 1 und 10000 wählen.
Danach müssen Sie diese Zahl erraten. Geben Sie dazu die Zahl
in die Textbox und klicken Sie auf Submit.
EOT

my $num;
my $counter;
my $random = int(rand(10000))+1;
my $mw = MainWindow->new(-background => "#000059",-foreground => "#FFFFFF");
$mw->title("Zahlenspiel");
my $text = $mw->Label(
                     -text => $msg,
                     -background => "#000059",
                     -foreground => "#FFFFFF",
                     -font => "Helvetica",
                    )->pack();
$mw->Entry(-width => 50, -textvariable => \$num)->pack();
$mw->Button(-text => "Zahl prüfen", -command => \&numhandle)->pack();
MainLoop;

sub numhandle {
   if($num =~ /\D/ or $num < 1 or $num > 10000) {
       showinfo("Dies ist keine gültige Zahl.");
   } elsif($num < $random) {
       $counter++;
       showinfo("Deine Zahl ist zu niedrig.");
   } elsif($num > $random) {
       $counter++;
       showinfo("Deine Zahl ist zu hoch.");
   } elsif($num == $random) {
       $counter++;
       my $win = $mw->Dialog(
                             -title => "Gewonnen !",
                             -text => "Herzlichen Glückwunsch !\nDie gesuchte Zahl war: $random\nVersuche: $counter",
                             -buttons => ["Neues Spiel","Spiel verlassen"]
                            )->Show();
       if($win eq "Spiel verlassen") {
           exit(0);
       } else {
           undef $num;
undef $counter;
           $random = int(rand(10000))+1;
       }
   }
}

sub showinfo {
   my $info = shift;
   my $box = $mw->Dialog(
                         -title => "Fehler!",
                         -text => $info,
                         -bitmap => "error"
                        )->Show();
}
\n\n

<!--EDIT|BrownWolf|1067269698-->
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
BrownWolf
 2003-10-27 04:41
#44685 #44685
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Und ich hab vergessen den Counter auf 0 zu setzen nach dem ein neues Spiel angefangen wird.
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
Crian
 2003-10-27 15:31
#44686 #44686
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
srand initialisiert den Zufallsgenerator. Du kannst srand(42) aufrufen, wenn Du immer wieder die gleichen Zufallszahlen generieren willst (für Vergleichbarkeit während der Entwicklung etwa) oder halt srand(time) (um den Zufallsgenerator mit der aktuellen Uhrzeit zu initialisieren), dann gibt es jedesmal eine andere Folge von Zufallszahlen.

Oder (wie in perldoc -f srand steht) man nimmt srand (time ^ $$ ^ unpack "%L*", `ps axww | gzip`);

Mit rand holst Du Dir dann eine "Zufallszahl" aus der folge der generierten Zahlen ab (--> perldoc -f rand) ...

Entweder mit rand -> Zufallszahl im Intervall [0,1[
Oder mit rand(42) -> Zufallszahl im Intervall [0,42[
Oder mit 13+rand(29) -> Zufallszahl im Intervall [13,42[

Dies alles sind "reelle" Zufallszahlen - also Gleitkommazahlen.

Mit 1 + int rand 42 bekommst Du zufällig eine der Zahlen aus der Menge { 1, 2, ..., 41, 42 } geliefert.

Alles klar?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
betterworld
 2003-10-27 16:02
#44687 #44687
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=BrownWolf,26.10.2003, 16:22]Mir gefällt das MainLoop ohne Klammern besser ;)[/quote]
MainLoop() und MainLoop sind solange aequivalent, wie der Aufruf _unter_ der Definition der Funktion stattfindet. Andernfalls ist MainLoop ein String (der von strict allerdings nicht gemocht wird). In diesem Fall ist es in der Tat nicht schlimm, da man ja erst use Tk und dann MainLoop schreibt. Im Sinne eines einheitlichen Programmierstils und damit man sich das Weglassen von () nicht angewoehnt, sollte man trotzdem MainLoop() schreiben. Und wenn Du Dich vertippst und z.B. Mainloop schreibst, und zudem aus irgend einem Grunde kein strict verwendest, wird das Programm einfach nichts tun, da die Anweisung "Mainloop"; einfach nichts tut.
BrownWolf
 2003-10-27 17:44
#44688 #44688
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
@Crian Alles klar ;)
@betterworld Ich benutze aber immer use strict; :p
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
<< |< 1 2 3 4 >| >> 35 Einträge, 4 Seiten



View all threads created 2003-10-26 00:14.