• Publicidad

Ayuda para proyecto 4 en raya

¿Estás desarrollando un proyecto, o piensas hacerlo? Pon aquí tu propuesta, lo más seguro es que alguien esté interesado en ayudarte.

Ayuda para proyecto 4 en raya

Notapor Progra_GC » 2012-03-26 11:09 @506

Hola..!
Soy nuevo en esto del foro, además un novato en Perl.

Mi pregunta es si me pueden ayudar un poco en mi proyecto que se trata de hacer un 4 en raya, obviamente en Perl.

He empezado a buscar ejemplos para ir aprendiendo. Igual cualquier ayuda se les agradece.
Avatar de Usuario
Progra_GC
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-03-26 10:50 @493
Ubicación: Costa Rica

Publicidad

Re: Ayuda para proyecto 4 en raya

Notapor explorer » 2012-03-26 15:23 @682

Bienvenido a los foros de Perl en Español, Progra_GC.

Claro que te ayudaremos.

Cuando te bloquees con algún código, publícalo por aquí y te daremos pistas de cómo solventarlo.

Lo primero que deberías aclarar es qué ámbito vas a desarrollar el programa: sistema operativo, versión de Perl, el programa se ejecutará solo en consola, o será gráfico, etc...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ayuda para proyecto 4 en raya

Notapor Progra_GC » 2012-03-27 19:49 @868

He estado investigando pero aún me cuesta un poco este lenguaje.
Agradecería su ayuda, hasta el momento tengo este poco de código.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. print "\n  ---Cuatro  En  Línea--- \n \n";
  4.  
  5. my @matriz6= ( '6-',' ',' ',' ',' ',' ',' ',' ','F');
  6. my @matriz5= ( '5-',' ',' ',' ',' ',' ',' ',' ','I');
  7. my @matriz4= ( '4-',' ',' ',' ',' ',' ',' ',' ','L');
  8. my @matriz3= ( '3-',' ',' ',' ',' ',' ',' ',' ','A');
  9. my @matriz2= ( '2-',' ',' ',' ',' ',' ',' ',' ','S');
  10. my @matriz=  ( '1-',' ',' ',' ',' ',' ',' ',' ',' ');
  11.  
  12. my @arr =    ("----------------------- ");
  13.  
  14. #////////////////////////////////////////////////////////////
  15.  
  16. my $string = join('][',@matriz);
  17. my $string2= join('][',@matriz2);
  18. my $string3= join('][',@matriz3);
  19. my $string4= join('][',@matriz4);
  20. my $string5= join('][',@matriz5);
  21. my $string6= join('][',@matriz6);
  22.  
  23. #////////////////////////////////////////////////////////////
  24.  
  25. print "$string6 \n";
  26. print "@arr \n";
  27. print "$string5 \n";
  28. print "@arr \n";
  29. print "$string4 \n";
  30. print "@arr \n";
  31. print "$string3 \n";
  32. print "@arr \n";
  33. print "$string2 \n";
  34. print "@arr \n";
  35. print "$string \n";
  36. print "  --1--2--3--4--5--6--7-- \n";
  37.    print "\n";
  38.  
  39. print " Bienvenido al juego Cuatro en Línea \n";
  40.  
  41. print " Digite la posición que desea jugar \n";
  42.  
  43. $x = <STDIN>;
  44.  
  45.  
  46.  
  47.   if ( $x <= 7) {
  48.              @matriz[$x]='X';
  49.              
  50.          }
  51.  
  52. print"\n";
  53. #print @matriz2;
  54. my $string= join('][',@matriz,);
  55.  
  56. print "$string6 \n";
  57. print "@arr \n";
  58. print "$string5 \n";
  59. print "@arr \n";
  60. print "$string4 \n";
  61. print "@arr \n";
  62. print "$string3 \n";
  63. print "@arr \n";
  64. print "$string2 \n";
  65. print "@arr \n";
  66. print "$string \n";
  67. print "  --1--2--3--4--5--6--7-- \n";
  68. print"\n";
  69.  
Coloreado en 0.007 segundos, usando GeSHi 1.0.8.4


Tal vez el código sea muy simple para lo que tengo que hacer, pero aún está en progreso. ;)
Avatar de Usuario
Progra_GC
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-03-26 10:50 @493
Ubicación: Costa Rica

Re: Ayuda para proyecto 4 en raya

Notapor explorer » 2012-03-28 03:51 @202

Hay un "error" en la línea 48:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.              @matriz[$x]='X';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Es mejor escribirlo como
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.              $matriz[$x] = 'X';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

La razón es esta: el carácter que va delante del nombre de la variable (el sigilo) indica el tipo de dato que queremos obtener de ella o el que le vamos a asignar. Así, cuando ponemos una '@' quiere decir que estamos hablando de una lista de valores, mientras que si ponemos un '$', estamos hablando de un solo valor.

Es el mismo caso de @arr; solo contiene un valor: '----------------------- ', así que quizás sea mejor declarar y usarla así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $arr = '----------------------- ';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Piensa también que, cuando algo estás repitiendo muchas veces, es que seguro que se puede escribir de una forma más abreviada.

En este caso, si usaras una matriz bidimensional, te ahorrarías mucho código...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @matriz = (
  2.     [ '6-',' ',' ',' ',' ',' ',' ',' ','F'],
  3.     [ '5-',' ',' ',' ',' ',' ',' ',' ','I'],
  4.     [ '4-',' ',' ',' ',' ',' ',' ',' ','L'],
  5.     [ '3-',' ',' ',' ',' ',' ',' ',' ','A'],
  6.     [ '2-',' ',' ',' ',' ',' ',' ',' ','S'],
  7.     [ '1-',' ',' ',' ',' ',' ',' ',' ',' '],
  8. );
  9.  
  10. # Acceso a la línea 2, columna 4:
  11. $matriz[6-2][4] = '*';              # Hay que hacer la resta porque numeras las líneas al revés
  12.  
  13. # Impresión de toda la tabla
  14. for my $linea (@matriz) {
  15.     print join('][', @{$linea}), "\n";    # Cada $linea es una referencia a un array, por lo que lo desreferenciamos
  16.                                           # para tomar los valores de ese array
  17. }
  18.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ayuda para proyecto 4 en raya

Notapor Progra_GC » 2012-03-28 12:30 @563

Excelente, muchas gracias, por la diferencia entre '$' y '@'.

He cambiado el código, quedará de la siguiente manera.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3.      my @matriz = (
  4.     [ '6-',' ',' ',' ',' ',' ',' ',' ','F'],
  5.     [ '5-',' ',' ',' ',' ',' ',' ',' ','I'],
  6.     [ '4-',' ',' ',' ',' ',' ',' ',' ','L'],
  7.     [ '3-',' ',' ',' ',' ',' ',' ',' ','A'],
  8.     [ '2-',' ',' ',' ',' ',' ',' ',' ','S'],
  9.     [ '1-',' ',' ',' ',' ',' ',' ',' ',' '],
  10. );
  11.  
  12.  my $arr =    ("----------------------- ");
  13.  
  14. #////////////////////////////////////////////////////////////
  15.  
  16. print " Bienvenido al juego \n Cuatro en Linea \n";
  17. for my $linea (@matriz) {
  18.     print join('][', @{$linea}), "\n";
  19.     print "$arr \n";
  20.     }
  21. print "  --1--2--3--4--5--6--7-- \n";
  22.    print "\n";
  23. #//////////////////////////////////////////////////////////////////////////////
  24.  
  25. print " Jugador 1 \n";
  26. print " Digite la posición que desea jugar \n";
  27.  
  28. $x = <STDIN>;
  29.  if ($x >=1 && $x <= 7) {  #verifica la posición
  30.              $matriz[6-1][$x]='0';   }  # asigna la  'X'
  31.  else {
  32.     print "Digite Otra vez \n";
  33.     print " Digite la posición que desea jugar \n";
  34.     $x = <STDIN>;
  35.  if ($x >=1 && $x <= 7) {
  36.              $matriz[6-1][$x]='0';   }
  37.                                        }
  38.  print "\n";
  39.  for my $linea (@matriz) {
  40.     print join('][', @{$linea}), "\n";
  41.     print "$arr \n";              #imprime línea cada salto de línea
  42.     }
  43. print "  --1--2--3--4--5--6--7-- \n";
  44.    print "\n";
  45.  
  46. #///////////////////////////////////////////////////////////////////////////////
  47. print "Jugador 2 \n";
  48. print " Digite la posición que desea jugar \n";
  49.  
  50. $x = <STDIN>;
  51.  if ($x >=1 && $x <= 7) {
  52.              $matriz[6-1][$x]='*';   }
  53.  else {
  54.     print "Digite Otra vez \n";
  55.     print " Digite la posición que desea jugar \n";
  56.     $x = <STDIN>;
  57.  if ($x >=1 && $x <= 7) {
  58.              $matriz[6-1][$x]='*';   }
  59.                                        }
  60. print "\n";
  61.  for my $linea (@matriz) {
  62.     print join('][', @{$linea}), "\n";
  63.     print "$arr \n";              #imprime línea cada salto de línea
  64.     }
  65. print "  --1--2--3--4--5--6--7-- \n";
  66.    print "\n";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Pues bien, sé que esto no es todo; ahora trataré en que la matriz si la primera línea está llena ponga el símbolo en la línea 2, o en que el jugador2 ó jugadorPC no pueda sobreponer en la posición que ya está utilizada.
Avatar de Usuario
Progra_GC
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-03-26 10:50 @493
Ubicación: Costa Rica

Re: Ayuda para proyecto 4 en raya

Notapor explorer » 2012-03-28 19:52 @869

En CPAN hay una distribución llamada Games::ConnectFour, que es este mismo juego.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ayuda para proyecto 4 en raya

Notapor Progra_GC » 2012-04-04 14:19 @638

El que me has recomendado, parece que está hecho con otro editor que genera varios archivos, pues bien he encontrado este para compartirlo con la comunidad...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. package Games::ConnectFour;
  3. our $VERSION = 0.012;
  4. use strict;
  5. use warnings;
  6. if ( $^O eq "MSWin32" ) {
  7.     system "color 07";
  8.     require Win32::Console::ANSI;
  9. }
  10. use IO::Socket;
  11.  
  12. our %c = (
  13.     d  => "\e[0;37;40m",
  14.     b  => "\e[1;34;40m",
  15.     0  => "\e[1;31;40m",
  16.     1  => "\e[1;33;40m",
  17.     w0 => "\e[0;30;41m",
  18.     w1 => "\e[0;30;43m",
  19.  
  20.     save    => "\e[s",
  21.     restore => "\e[u",
  22.     clear   => "\e[0J",
  23. );
  24.  
  25. sub input {
  26.     my ( $message, $default, @accepted ) = @_;
  27.     print $message;
  28.     while (1) {
  29.         ( my $in = <STDIN> ) =~ s/^\s+|\s+$//g;
  30.         return $in if grep $in eq $_, @accepted or @accepted == 0;
  31.         return $default if $in eq "" and defined $default;
  32.         print "$c{d}Por favor introduce uno de los siguientes: ", join( ", ", @accepted ), ". ";
  33.     }
  34. }
  35.  
  36. init();
  37.  
  38. sub init {
  39.     print "\n$c{d}Bienvenido al 4 en Linea!\n";
  40.     print "Control-C para salir.\n\n";
  41.     while (1) {
  42.         my $play = input(
  43.             "[1]: Jugar en la PC
  44. 2 : Internet play
  45. 3 : localhost (127.0.0.1) play
  46. 4 : Local play
  47. ", 1, 1 .. 4
  48.         );
  49.         my $c_number;
  50.         my $g_number;
  51.         my $server;
  52.         my $player;
  53.         my ( $connect, $w, $h );
  54.         if ( $play > 1 ) {
  55.             my $host = "nitrogen.mine.nu";
  56.             my $port = 1262;
  57.             $host = "localhost" if $play == 3;
  58.             if ( $play == 4 ) {
  59.                 $host = input("Enter host address: ");
  60.             }
  61.  
  62.             $server->autoflush(1);     # so output gets there right away
  63.             chomp( $c_number = <$server> );
  64.             print "Connected to $host on $port as client number $c_number.\n";
  65.             chomp( $player = <$server> );
  66.             $player++;
  67.             chomp( $g_number = <$server> );
  68.             print "Joined game number $g_number.\n";
  69.             if ( $player == 1 ) {
  70.                 print "Awaiting another player...\n";
  71.                 <$server>;
  72.             }
  73.             else {
  74.                 print "Waiting for player 1 to set game settings...\n";
  75.                 ( $connect, $w, $h ) = split " ", <$server>;
  76.                 print "Settings are: connect:$connect; width:$w; height:$h.\n";
  77.             }
  78.         }
  79.         if ( !$server or $player == 1 ) {
  80.             $connect = input( "How many do you want to connect (3, [4], 5, 6)? ", 4, 3 .. 6 );
  81.             ( $w, $h )
  82.                 = @{ ( [ 7, 6 ], [ 8, 7 ], [ 9, 7 ] )
  83.                     [ input( "What size board do you want ([1], 2, 3, 4)? ", 1, 1 .. 4 ) - 1 ] };
  84.             print $server join( " ", $connect, $w, $h ), "\n" if $server;
  85.         }
  86.         my $turn = 0;
  87.         my @board = ( map [ (" ") x $w ], 1 .. $h );
  88.         print "\n$c{b}";
  89.         print "|", join( "|", @$_ ), "|\n" for @board;
  90.         print "-" x ( $w * 2 + 1 ), "\n";
  91.         print " ", join( " ", 1 .. $w ), "\n\n\n\e[1A";
  92.         while (1) {
  93.             my $in;
  94.             if ( !fork ) {
  95.                 print "$c{$turn}Jugador " . ( $turn + 1 ) . ", Elija columna: ";
  96.                 exit;
  97.             }
  98.             else {
  99.                 wait;
  100.                 print $c{save};
  101.                 while (1) {
  102.                     if ( !$server or $player - 1 == $turn ) {
  103.                         ( $in = <STDIN> ) =~ s/^\s+|\s+$//g;
  104.                         print "$c{restore}$c{clear}";
  105.                         if ( grep $in eq $_, 1 .. $w and $board[0][ --$in ] eq " " ) {
  106.                             print $server $in, "\n" if $server;
  107.                             last;
  108.                         }
  109.                         else {
  110.  
  111.                             #play error sound
  112.                         }
  113.                     }
  114.                     else {
  115.                         chomp( $in = scalar <$server> );
  116.                         last;
  117.                     }
  118.                 }
  119.             }
  120.             my $up    = $h + 4 . "A";
  121.             my $right = 1 + $in * 2 . "C";
  122.             print "\r\e[$up\e[$right";
  123.             my $row = -1;
  124.             do {
  125.                 if (fork) {
  126.                     $row++;
  127.                     select undef, undef, undef, 0.04;
  128.                     wait;
  129.                 }
  130.                 else {
  131.                     print " \b";
  132.                     print "\e[1B";
  133.                     print "o\b";
  134.                     exit;
  135.                 }
  136.             } while $row + 1 < $h and $board[ $row + 1 ][$in] eq " ";
  137.             $board[$row][$in] = $turn;
  138.             print "$c{restore}\r";
  139.             my @all;
  140.             for ( [ 1, 0 ], [ 0, 1 ], [ 1, 1 ], [ -1, 1 ] ) {
  141.                 my ( $xdir, $ydir ) = @$_;
  142.                 my @mine = [ $in, $row ];
  143.                 for ( 1, -1 ) {
  144.                     my ( $x, $y ) = ( $in, $row );
  145.                     while ( ( $x -= $xdir * $_ ) >= 0
  146.                         and $x < $w
  147.                         and ( $y -= $ydir * $_ ) >= 0
  148.                         and $y < $h
  149.                         and $board[$y][$x] eq $turn ) {
  150.                         push @mine, [ $x, $y ];
  151.                     }
  152.                 }
  153.                 push @all, @mine if @mine >= $connect;
  154.             }
  155.             if (@all) {
  156.                 for (@all) {
  157.                     my ( $x, $y ) = @$_;
  158.                     my $up    = $h - $y + 3 . "A";
  159.                     my $right = 1 + $x * 2 . "C";
  160.                     print "\e[$up\e[$right";
  161.                     print "$c{'w'.$turn}o$c{restore}\r";
  162.                 }
  163.                 print "$c{$turn}Player " . ( $turn + 1 ) . " wins!$c{clear}\n\n";
  164.                 print $c{d};
  165.                 print $server "end\n" if $server;
  166.                 last;
  167.             }
  168.             if ( not grep $_ eq " ", map @$_, @board ) {
  169.                 print "$c{d}The game is a tie!$c{clear}\n\n";
  170.                 last;
  171.             }
  172.             $turn = ( 0, 1 )[ $turn - 1 ];
  173.         }
  174.     }
  175. }
  176.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


Al igual lo estoy trabajando aparte para hacerlo que juegue contra la PC y solamente en la misma PC, no en línea o por sockets, porque no lo necesito.

Cualquier sugerencia o idea, ahí está la base en la que estoy trabajando.
Avatar de Usuario
Progra_GC
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-03-26 10:50 @493
Ubicación: Costa Rica

Re: Ayuda para proyecto 4 en raya

Notapor explorer » 2012-04-04 14:42 @654

Hummm... no me gusta mucho esto que has publicado...

Habría que poner al principio, que se trata de una variación de la versión 0.012 de Games::ConnectFour.

Es decir, aunque en la primera línea pone Games::ConnectFour, NO tiene relación con el archivo original.

No entiendo lo que dices de que genera varios archivos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ayuda para proyecto 4 en raya

Notapor Progra_GC » 2012-04-04 19:15 @843

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. if ( $^O eq "MSWin32" ) {
  5.     system "color 07";
  6.     require Win32::Console::ANSI;
  7. }
  8. use IO::Socket;
  9.  
  10. our %c = (
  11.     d  => "\e[0;37;40m",
  12.     b  => "\e[1;34;40m",
  13.     0  => "\e[1;31;40m",
  14.     1  => "\e[1;33;40m",
  15.     w0 => "\e[0;30;41m",
  16.     w1 => "\e[0;30;43m",
  17.  
  18.     save    => "\e[s",
  19.     restore => "\e[u",
  20.     clear   => "\e[0J",
  21. );
  22.  
  23. sub input {
  24.     my ( $message, $default, @accepted ) = @_;
  25.     print $message;
  26.     while (1) {
  27.         ( my $in = <STDIN> ) =~ s/^\s+|\s+$//g;
  28.         return $in if grep $in eq $_, @accepted or @accepted == 0;
  29.         return $default if $in eq "" and defined $default;
  30.         print "$c{d}Por favor introduce uno de los siguientes: ", join( ", ", @accepted ), ". ";
  31.     }
  32. }
  33.  
  34. init();
  35.  
  36. sub init {
  37.     print "\n$c{d}Bienvenido al 4 en Linea!\n";
  38.     print "Control-C para salir.\n\n";
  39.     while (1) {
  40.         my $play = input(
  41.             "[1]: Jugar en la PC
  42. 2 : Internet play
  43. 3 : localhost (127.0.0.1) play
  44. 4 : Local play
  45. ", 1, 1 .. 4
  46.         );
  47.         my $c_number;
  48.         my $g_number;
  49.         my $server;
  50.         my $player;
  51.         my ( $connect, $w, $h );
  52.         if ( $play > 1 ) {
  53.             my $host = "nitrogen.mine.nu";
  54.             my $port = 1262;
  55.             $host = "localhost" if $play == 3;
  56.             if ( $play == 4 ) {
  57.                 $host = input("Enter host address: ");
  58.             }
  59.  
  60.             $server->autoflush(1);     # so output gets there right away
  61.             chomp( $c_number = <$server> );
  62.             print "Connected to $host on $port as client number $c_number.\n";
  63.             chomp( $player = <$server> );
  64.             $player++;
  65.             chomp( $g_number = <$server> );
  66.             print "Joined game number $g_number.\n";
  67.             if ( $player == 1 ) {
  68.                 print "Awaiting another player...\n";
  69.                 <$server>;
  70.             }
  71.             else {
  72.                 print "Waiting for player 1 to set game settings...\n";
  73.                 ( $connect, $w, $h ) = split " ", <$server>;
  74.                 print "Settings are: connect:$connect; width:$w; height:$h.\n";
  75.             }
  76.         }
  77.         if ( !$server or $player == 1 ) {
  78.             $connect = input( "Cuantos desea conectar (3, [4], 5, 6)? ", 4, 3 .. 6 );
  79.             ( $w, $h )
  80.                 = @{ ( [ 7, 6 ], [ 8, 7 ], [ 9, 7 ] )
  81.                     [ input( "Tamaño del tablero ([1], 2, 3, 4)? ", 1, 1 .. 4 ) - 1 ] };
  82.             print $server join( " ", $connect, $w, $h ), "\n" if $server;
  83.         }
  84.         my $turn = 0;
  85.         my @board = ( map [ (" ") x $w ], 1 .. $h );#pinta la matriz
  86.         print "\n$c{b}";
  87.         print "|", join( "|", @$_ ), "|\n" for @board;
  88.         print "-" x ( $w * 2 + 1 ), "\n";
  89.         print " ", join( " ", 1 .. $w ), "\n\n\n\e[1A";
  90.         while (1) {
  91.             my $in;
  92.             if ( !fork ) {
  93.                 print "$c{$turn}Jugador " . ( $turn + 1 ) . ", Elija columna: ";
  94.                 exit;
  95.             }
  96.             else {
  97.                 wait;
  98.                 print $c{save};
  99.                 while (1) {
  100.                     if ( !$server or $player - 1 == $turn ) {
  101.                         ( $in = <STDIN> ) =~ s/^\s+|\s+$//g;
  102.                         print "$c{restore}$c{clear}";
  103.                         if ( grep $in eq $_, 1 .. $w and $board[0][ --$in ] eq " " ) {
  104.                             print $server $in, "\n" if $server;
  105.                             last;
  106.                         }
  107.                         else {
  108.  
  109.                             #play error sound
  110.                         }
  111.                     }
  112.                     else {
  113.                         chomp( $in = scalar <$server> );
  114.                         last;
  115.                     }
  116.                 }
  117.             }
  118.             my $up    = $h + 4 . "A";
  119.             my $right = 1 + $in * 2 . "C";
  120.             print "\r\e[$up\e[$right";
  121.             my $row = -1;
  122.             do {
  123.                 if (fork) {
  124.                     $row++;
  125.                     select undef, undef, undef, 0.04;
  126.                     wait;
  127.                 }
  128.                 else {
  129.                     print " \b";
  130.                     print "\e[1B";
  131.                     print "o\b";
  132.                     exit;
  133.                 }
  134.             } while $row + 1 < $h and $board[ $row + 1 ][$in] eq " ";
  135.             $board[$row][$in] = $turn;
  136.             print "$c{restore}\r";
  137.             my @all;
  138.             for ( [ 1, 0 ], [ 0, 1 ], [ 1, 1 ], [ -1, 1 ] ) {
  139.                 my ( $xdir, $ydir ) = @$_;
  140.                 my @mine = [ $in, $row ];
  141.                 for ( 1, -1 ) {
  142.                     my ( $x, $y ) = ( $in, $row );
  143.                     while ( ( $x -= $xdir * $_ ) >= 0
  144.                         and $x < $w
  145.                         and ( $y -= $ydir * $_ ) >= 0
  146.                         and $y < $h
  147.                         and $board[$y][$x] eq $turn ) {
  148.                         push @mine, [ $x, $y ];
  149.                     }
  150.                 }
  151.                 push @all, @mine if @mine >= $connect;
  152.             }
  153.             if (@all) {
  154.                 for (@all) {
  155.                     my ( $x, $y ) = @$_;
  156.                     my $up    = $h - $y + 3 . "A";
  157.                     my $right = 1 + $x * 2 . "C";
  158.                     print "\e[$up\e[$right";
  159.                     print "$c{'w'.$turn}o$c{restore}\r";
  160.                 }
  161.                 print "$c{$turn}Jugador " . ( $turn + 1 ) . " ha ganado.!$c{clear}\n\n";
  162.                 print $c{d};
  163.                 print $server "end\n" if $server;
  164.                 last;
  165.             }
  166.             if ( not grep $_ eq " ", map @$_, @board ) {
  167.                 print "$c{d}El juego esta empate.!$c{clear}\n\n";
  168.                 last;
  169.             }
  170.             $turn = ( 0, 1 )[ $turn - 1 ];
  171.         }
  172.     }
  173. }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

Esto es lo que tengo, el que tiene varios archivos y no me funciona del todo bien es el ejemplo de CPAN.
Avatar de Usuario
Progra_GC
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-03-26 10:50 @493
Ubicación: Costa Rica

Re: Ayuda para proyecto 4 en raya

Notapor explorer » 2012-04-04 19:27 @852

La línea 170 se puede simplificar un poco más:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.             $turn = ( 1, 0 )[ $turn ];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Sigo sin ver los problemas del ejemplo. De hecho, aún no sé de qué ejemplo estás hablando, porque en la página de Games::ConnectFour no viene ninguno, solo la forma de arrancarlo.

De todas maneras, como sigues con tu proyecto, da igual. :)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Proyectos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados