Leser: 23
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
#/usr/bin/perl use strict; print "What's your name Player1?: "; my $player1 = <STDIN>; chomp $player1; print "\nWhat's your name Player2?: "; my $player2 = <STDIN>; chomp $player2; if ($player1 eq $player2) { $player2 = $player2."2"; } my @field = ("_", "_", "_", "_", "_", "_", "_", "_", "_", "_"); my %valids = (1, 2, 3, 4, 5, 6, 7, 8, 9); my $name = $player1; my $roundcount = 1; my $choose; my $stone = 'x'; my $win = 0; my $othername = $player2; my $tmpname; my $stone2 = 'o'; my $tmpstone; my $valid; system("clear"); while ($roundcount <= 9 ) { print "|$field[7]|$field[8]|$field[9]|\n"; print "|$field[4]|$field[5]|$field[6]|\n"; print "|$field[1]|$field[2]|$field[3]|\n"; print "\n$name your turn\n"; print "In which field do you want to set? "; $choose = <STDIN>; chomp $choose; if (exists $valids{$choose} ) { $valid = 1; } else { $valid = 0; } if ($field[$choose] ne '_') { if ($field[$choose] eq $stone) { print "you had set here before\n"; } else { print "$othername had set here before\n"; } $valid = 0; } else { $field[$choose] = $stone; } if ($field[1] eq $stone and $field[2] eq $stone and $field[3] eq $stone) { $win = 1; } elsif ($field[4] eq $stone and $field[5] eq $stone and $field[6] eq $stone) { $win = 1; } elsif ($field[7] eq $stone and $field[8] eq $stone and $field[9] eq $stone) { $win = 1; } elsif ($field[1] eq $stone and $field[4] eq $stone and $field[7] eq $stone) { $win = 1; } elsif ($field[2] eq $stone and $field[5] eq $stone and $field[8] eq $stone) { $win = 1; } elsif ($field[3] eq $stone and $field[6] eq $stone and $field[9] eq $stone) { $win = 1; } elsif ($field[1] eq $stone and $field[5] eq $stone and $field[9] eq $stone) { $win = 1; } elsif ($field[3] eq $stone and $field[5] eq $stone and $field[7] eq $stone) { $win = 1; } if ($win eq 1) { last; } $roundcount++; print "$win\n$stone\n$name\n$roundcount\n"; if ( $valid eq 1) { $tmpname = $name; $name = $othername; $othername = $tmpname; $tmpstone = $stone; $stone = $stone2; $stone2 = $tmpstone; system("clear"); } else { $roundcount--; } } print "|$field[7]|$field[8]|$field[9]|\n"; print "|$field[4]|$field[5]|$field[6]|\n"; print "|$field[1]|$field[2]|$field[3]|\n"; if ($win eq 1) { print "Congratulations $name you win"; } else { print "--->DRAW<---"; }
my %valids = (1, 2, 3, 4, 5, 6, 7, 8, 9);
my %valids = ( 1 => 2, 3 => 4, 5 => 6, 7 => 8, 9 );
1
2
3
4
5
6
7
my %valids = map { $_ => $_ } 1 .. 9;
# oder
my %valids;
@valids{1..9} = (1 .. 9);
# oder
my %valids;
@valids{1..9} = ();
if(grep $_ eq $choose, @valids)
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
#!/usr/bin/perl use 5.010; use strict; use warnings; # spielernamen: print "Player 1: "; chomp( my $player1 = <STDIN> ); $player1 =~ s/^\s*$/Player1/; print "Player 2: "; chomp( my $player2 = <STDIN> ); $player2 =~ s/^\s*$/Player2/; $player2 .= '2' if $player2 eq $player1; my @board; # spielfeld my $winner; # gewinner my $color = 1; # 1 = X, 0 = O # hauptschleife: while ( not defined $winner and scalar( grep defined, @board ) != 9 ) { draw_board(); handle_input(); check_winner(); } # while # ausgabe des gewinners: if ( defined $winner ) { draw_board(); say "\nCongratulations ". ($winner eq 'X' ? $player1 : $player2) ."!"; say "You are the winner!"; } # if else { draw_board(); say "\nDraw."; } # else # spielfeld zeichnen: sub draw_board { print "\n" x 24; # bildschirm "loeschen" (edit) say " A | B | C\n -----------"; printf( "%s: %s | %s | %s\n". ($_ == 2 ? '' : " ---+---+---\n"), $_ + 1, $board[3*$_ ] // ' ',#/ $board[3*$_+1] // ' ',#/ $board[3*$_+2] // ' ',#/ ) for 0 .. 2; } # draw_board # eingabe entgegennehmen und behandeln: sub handle_input { my( $name, $sym ) = $color ? ($player1, 'X') : ($player2, 'O'); print "\nIt's your turn, $name ($sym): "; chomp( my $cell = <STDIN> ); if ( $cell =~ /([abcABC])([123])/ ) { my( $x, $y ) = ( $1, $2 - 1 ); $x = { 'a' => 0, 'b' => 1, 'c' => 2 }->{ lc $x }; if ( defined $board[3*$y+$x] ) { say "This cell is already taken."; <STDIN>; } # if else { $board[3*$y+$x] = $sym; $color = !$color; # naechster spieler } # else } # if else { say "I'd appreciate something like A1 or b3."; <STDIN>; } # else } # handle_input # ueberpruefen ob jemand gewonnen hat: sub check_winner { my $eq = sub { # edit: diese routine stände wohl besser in einem my $cmp = my $r = $board[shift]; # scope neben check_winner $r &&= $cmp eq $board[$_] for @_; return $r; }; # $eq # horizontal, vertikal, diagonal: for ( 0, 3, 6 ) { return $winner = $board[$_] if $eq->($_, $_+1, $_+2) } for ( 0, 1, 2 ) { return $winner = $board[$_] if $eq->($_, $_+3, $_+6) } $winner = $board[4] if $eq->(0, 4, 8) or $eq->(6, 4, 2); } # check_winner __END__
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
#/usr/bin/perl use strict; print "What's your name Player1?: "; my $player1 = <STDIN>; chomp $player1; print "\nWhat's your name Player2?: "; my $player2 = <STDIN>; chomp $player2; if ($player1 eq $player2) { $player2 = $player2."2"; } my @field = ("_", "_", "_", "_", "_", "_", "_", "_", "_", "_"); my @valids = (1, 2, 3, 4, 5, 6, 7, 8, 9); my $name = $player1; my $roundcount = 1; my $choose; my $stone = 'x'; my $win = 0; my $othername = $player2; my $tmpname; my $stone2 = 'o'; my $tmpstone; my $valid; system("cls"); while ($roundcount <= 9 ) { print "|$field[7]|$field[8]|$field[9]| |7|8|9|\n"; print "|$field[4]|$field[5]|$field[6]| |4|5|6|\n"; print "|$field[1]|$field[2]|$field[3]| |1|2|3|\n"; print "\n$name your turn\n"; print "In which field do you want to set? "; $choose = <STDIN>; chomp $choose; if(grep $_ eq $choose, @valids) { $valid = 1; } else { $valid = 0; } if ($field[$choose] ne '_') { if ($field[$choose] eq $stone) { print "you had set here before\n"; } else { print "$othername had set here before\n"; } $valid = 0; } else { $field[$choose] = $stone; } if ($field[1] eq $stone and $field[2] eq $stone and $field[3] eq $stone) { $win = 1; } elsif ($field[4] eq $stone and $field[5] eq $stone and $field[6] eq $stone) { $win = 1; } elsif ($field[7] eq $stone and $field[8] eq $stone and $field[9] eq $stone) { $win = 1; } elsif ($field[1] eq $stone and $field[4] eq $stone and $field[7] eq $stone) { $win = 1; } elsif ($field[2] eq $stone and $field[5] eq $stone and $field[8] eq $stone) { $win = 1; } elsif ($field[3] eq $stone and $field[6] eq $stone and $field[9] eq $stone) { $win = 1; } elsif ($field[1] eq $stone and $field[5] eq $stone and $field[9] eq $stone) { $win = 1; } elsif ($field[3] eq $stone and $field[5] eq $stone and $field[7] eq $stone) { $win = 1; } if ($win eq 1) { last; } $roundcount++; print "$win\n$stone\n$name\n$roundcount\n"; if ( $valid eq 1) { $tmpname = $name; $name = $othername; $othername = $tmpname; $tmpstone = $stone; $stone = $stone2; $stone2 = $tmpstone; system("cls"); } else { $roundcount--; } } print "|$field[7]|$field[8]|$field[9]| |7|8|9|\n"; print "|$field[4]|$field[5]|$field[6]| |4|5|6|\n"; print "|$field[1]|$field[2]|$field[3]| |1|2|3|\n"; if ($win eq 1) { print "Congratulations $name you win"; } else { print "--->DRAW<---"; } __END__
2010-04-22T22:56:13 conrayder code ist auch schön aber ich versteh den nicht so ganz :D ( wie erwähnt newbie :D )
was für eine lib ist denn 5.010?