Schrift
[thread]8602[/thread]

Perl: Mehr als nur "Hello World"?

Leser: 1


<< >> 7 Einträge, 1 Seite
Gast Gast
 2006-12-24 14:44
#72724 #72724
Hallo Perl-Community!

Ich beschäftige mich schon seit langer Zeit mit Perl, da ich eine Scriptsprache gesucht habe, mit der ich kleine, nützliche Scripte schreiben kann. Ich hab mir dazu bücher gekauft und mich im Netz erkundigt und es hat sich immer so angehört, als wäre es genau das richtige für mich.

Nach den Büchern weiß ich allerdings nur, wie solche sachen macht die mich absolut nicht weiter bringen. Mit "Hello World" ausgeben fängt es an... dann der umgang mit den einzelnen dingen wie Variablen, Arrays,...

Aber irgendwie hört es dann plötzlich auf. Es gibt keine weiteren Infos, wie man jetzt daraus nützliche Programme machen kann. Da fehlen jawohl große Teile, damit man auch wirklich etwas mit der Sprache anfangen kann. Es ist als hätte ich die Grammatik gelernt und finde keine Vokabeln.

Zum Beispiel hab ich schon gesehen, dass einige leute mit perl grafische Spiele programmiert haben. Ich hab noch nie irgendwo gelesen, wie man etwas außerhalb der Konsole ausgibt.

Ich hoffe, dass mich hier jemand aufklären kann, wonach ich suchen muss, damit ich etwas mit dem erlernten anfangen kann.


Gruß
Ronnie
 2006-12-24 15:41
#72725 #72725
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Na ja, was willst du denn programmieren? Spiele kenne ich eher wenige in Perl und das bekannteste ist wohl FrozenBubble. Generell findet man viele Module im CPAN http://search.cpan.org, wobei man dann auch eine Vorstellung erhält, was denn so machbar ist.
lichtkind
 2006-12-24 15:43
#72726 #72726
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
hier in der wiki haben wir anleitungen wie man mit Wx oder Tk umgehen kann. schlag unter tutorials in der wissensbasis nach. ich hab auch einen editor in perl geschrieben siehe link unter dieser nachricht und angefanegen ein sudoku zu schreiben, sieh baumhaus. wir haben hier auch eine recht lange linkliste zu vielen weiteren quellen.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
bloonix
 2006-12-24 16:32
#72727 #72727
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo,

[quote=Guest,24.12.2006, 13:44]Nach den Büchern weiß ich allerdings nur, wie man solche sachen
macht  die mich absolut nicht weiter bringen. Mit "Hello World"
ausgeben fängt es an... dann der umgang mit den einzelnen dingen wie
Variablen, Arrays,...[/quote]

nun, die Bücher werden dir sicherlich nicht verraten, was für Skripts du
schreiben kannst. Du musst schon selber wissen, welche Aufgaben du
bewältigen möchtest und die Bücher zeigen dir, wie du die Sprache
hierzu anwenden kannst.

Zum Beispiel möchtest du eine Datei von A nach B kopieren und den
Text gleichzeitig formatieren, oder du möchtest einen Daemon
schreiben, der dein System überwacht und bei bestimmten Ereignissen
eine Mail an dich schreibt. Wenn du erstmal weißt, was du machen
möchtest, dann wird dir dein Buch sehr nützlich vorkommen.

Das "Hello World" Beispiel ist mittlerweile zum Kult geworden. Es ist
in fast jedem Programmierbuch für Einsteiger wieder zu finden und soll
aufzeigen, wie einfach die Syntax der Sprache ist. Die weiteren
Beispiele zum Gebrauch von Arrays etc. sind sehr nützlich, denn wie
sollst du wissen, wie man die Sprache anwendet, wenn dort keine
Beispiele aufgezeigt werden?

Gruss,
opi\n\n

<!--EDIT|opi|1166970991-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
lichtkind
 2006-12-24 17:32
#72728 #72728
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
vielleicht helfen dir auch Kochbücher, dort findest du quellcode der praktische proble löst und so in programme übernommen werden kann.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
PerlProfi
 2006-12-24 18:45
#72729 #72729
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Wenn du Spiele programmieren möchtest, solltest du dir mal die SDL und OpenGL ansehen.
Aber um damit weiter zu kommen, müsstest du die Sprache schon erstmal vollständig verstanden haben.
Aber wenn du denkst, dass Variablen dich so gar nicht weiter bringen, wirst du damit wohl nicht sehr weit kommen.

Wenn du Spiele programmieren möchtest, würde ich dir allerdings zu C++ raten. Es gibt zwar viele Module, die es einfach machen Spiele in Perl zu programmieren, aber C++ ist einfach schneller.

Wenn du dir zum Beispiel ein SDL-Perl Programm und ein SDL-C++ Programm ansiehst, die den Bildschirm anhand der Zeit in einer bestimmten Farbe darstellen sollen, wirst du feststellen, dass es in Perl ewig dauert bis der Bildschirm die Farbe gewechselt hat, in C++ sieht es fließend aus.

MfG PerlProfi
Strat
 2006-12-24 20:14
#72730 #72730
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
hier ein kleines Space-Invaders, das ich mal vor einigen Jahren geschrieben habe; sowas ist halt schoen einfach.

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#! /usr/bin/perl
use warnings;
use strict;

use Tk;
use Tk::Dialog ();

my ($x,$y) = (320, 460); # start ship at that position
my @bulletRecycler = ();
my %monsters = ();
my @monsterRecycler = ();
my $monsterCount = 0;

my $mw = MainWindow->new();
$mw->protocol('WM_DELETE_WINDOW', \&ExitApplication);

my $canvas = $mw->Canvas(-background => '#000000',
-height => 480, -width => 640,
-cursor => 'crosshair')
->pack(-side => 'top', -fill => 'both', -expand => 1);

my $ship = &GetNewShip($canvas);

for (my $i=100;$i<600;$i+=30) {
for (my $j=40;$j<170;$j+=30) {
&GetNewMonster($canvas, $i, $j);
} # for
} # for

$canvas->Tk::bind("<Motion>", [\&MoveShip, Ev('x'), Ev('y'), $ship]);
$canvas->Tk::bind("<Button-1>", [\&Fire, Ev('x'), Ev('y'), $ship]);

&Tk::MainLoop;

# ------------------------------------------------------------
sub ExitApplication {
my $dialog = $mw->Dialog(-text => 'Programm wirklich beenden?',
-bitmap => 'question',
-title => 'Programm beenden',
-default_button => 'Yes',
-buttons => [qw/Ja Nein/],
);

my $answer = $dialog->Show(); # and display dialog
if (lc($answer) eq 'ja'){ exit; }

} # ExitApplication
# ------------------------------------------------------------
sub GetNewShip {
my $canvas = shift;

my $ship = $canvas->createPolygon($x-10,$y, $x-10,$y-10,

$x-2,$y-14, $x,$y-10,

$x+2,$y-14,$x,$y-15,

$x+10,$y-10, $x+10,$y,

-outline => '#ffffff',

-fill => '#ff0000');
return $ship;
} # GetNewShip
# ------------------------------------------------------------
sub GetBullet {
my ($canv, $x, $y) = @_;

my $bullet;
if (scalar @bulletRecycler) {
$bullet = shift(@bulletRecycler);
$canvas->coords($bullet, $x-2, $y-18, $x+2,$y-28);
} # if
else { # if not possible, create new bullet
$bullet = $canv->createRectangle($x-2,$y-18, $x+2,$y-28,

-fill => 'white');
} # else

return $bullet;
} # GetBullet
# ------------------------------------------------------------
sub GetNewMonster {
my ($canvas, $x, $y) = @_;

my $monster = $canvas->createOval($x-10,$y-10, $x+10,$y+20,

-fill => '#ffff00',

-outline => '#ffffff');
$monsters{$monster} = 1;
$monsterCount++;
$canvas->after(50, [ \&MoveMonster, $canvas, $monster, $x, $y, 10 ]);

return $monster;
} # GetNewMonster
# ------------------------------------------------------------
sub MoveShip {
my ($canv, $x1, $y1, $ship) = @_;
$x1 = $canv->canvasx($x1);

# move ship to left or to right
$canv->move($ship, $x1-$x, 0);
$x = $x1;
} # MoveShip
# ------------------------------------------------------------
sub Fire {
my ($canv, $x1, $y1, $ship) = @_;
$x1 = $canv->canvasx($x1);

# start firing bullet
my $bullet = &GetBullet($canvas, $x, $y);
$canv->after(10, [ \&FireUp, $bullet, $x1, $y-18 ]);

# print "BOOOMMMM $bullet at ($x1)\n";
} # Fire
# ------------------------------------------------------------
sub FireUp {
my ($tag, $x2, $y2) = @_;
$canvas->move($tag, 0, -8);

my @items = $canvas->find("overlapping", $x2-2,$y2, $x2+2,$y2-10);
local $" = "|";
print "Found: @items\n" if scalar @items > 1;
foreach (@items) {
if (exists $monsters{$_}) {
# print "Hit Monster $_\n";
$monsterCount--;

# add monster to recycler
push (@monsterRecycler, $_);
$canvas->coords($_, 1,1001, 21,1021);
} # if
} # foreach

if ($monsterCount <= 0) {
&RestartDialog();
} # if

if ($y2 < 10) { # if bullet out of screen

# move bullet to recycler
push (@bulletRecycler, $tag);
$canvas->coords($tag, 1,1, 5,11); # dirty, I know
} # if

else { # continue moving bullet up
$canvas->after(10, [\&FireUp, $tag, $x2, $y2-8]);
} # else
} # FireUp
# ------------------------------------------------------------
sub MoveMonster {
my ($canvas, $monster, $x, $y, $direction) = @_;
my $down = 0;

if ($direction < 0 and $x < 20) {
$direction = -$direction; $down = 10; $y+= 10;
} # if
elsif ($direction > 0 and $x > 620) {
$direction = -$direction; $down = 10; $y+= 10;
} # elsif
else {
$x += $direction;
} # else
$canvas->move($monster, $direction, $down);

$canvas->after(50, [ \&MoveMonster, $canvas, $monster,
$x, $y, $direction ]);
} # MoveMonster
# ------------------------------------------------------------
sub RestartDialog {
my $dialog = $mw->Dialog(-text => "Gewonnen\nNoch mal?",
-bitmap => 'question',
-title => 'Programm beenden',
-default_button => 'Yes',
-buttons => [qw/Ja Nein/],
);

my $answer = $dialog->Show(); # and display dialog
if (lc($answer) eq 'ja'){
exec($0); # dirty, i know
} # if
else {
exit;
} # else

} # RestartDialog
# ------------------------------------------------------------


Auf meiner HP gibt's unter Downloads noch zwei weitere Spiele, die in Perl/Tk geschrieben sind.

Aber wie schon PerlProfi schrieb: Perl ist fuer einfache Spiele schnell genug, aber wenn's komplexer (oder 3D) werden soll, dann wird's arg langsam => besser C++ verwenden
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 7 Einträge, 1 Seite



View all threads created 2006-12-24 14:44.