He intentado hacer como práctica un programa para jugar al "AHORCADO". Pero aunque el programa funciona relativamente, tengo un problema crucial con el control de los fallos. Resulta que cada letra introducida para ver si esta en la palabra secreta, me es reconocida como fallo a excepción de la primera letra de la palabra secreta. Es decir, que hay un descontrol en el bucle encargado de controlar los fallos. No soy capaz de idear una forma de controlarlo... ¿Alguien me puede ayudar?
Gracias por adelantado.
Aquí va el código:
Using perl Syntax Highlighting
- #!C:\Perl\bin\perl.exe
- use strict;
- use warnings;
- print "Elige tu palabra secreta:\n";
- chomp(my $word = <STDIN>);
- my @word = split ('', $word);
- my @hidden = ((0) x scalar (@word));
- my @toy = ("","O","-","|","-","<");
- my @palis =();
- my $i = 0;
- my $wrong = 0;
- my $right = 0;
- CORE: #Bucle Central
- while (($wrong < 6)){
- print"Dí una letra:\n";
- chomp(my $guess = <STDIN>);
- foreach $i (0..$#word){
- if ($guess eq $word[$i]){ #Correctos
- $right++;
- $word[$i] = $guess;
- $hidden[$i] = $guess;
- print "\¡ACIERTO!\n";
- print "@hidden\n";
- &compare;
- next;
- }
- }
- if ($guess eq $word[$i]){ #Fallos
- next CORE;
- }
- else {
- $wrong++;
- print "\¡Fallo!\n";
- my $muneco = shift(@toy);
- push (@palis,$muneco);
- print"@palis\n";
- next;
- }
- }
- &guess_word;
- sub compare{ #Final correcto
- my $hidden = join ("", @hidden);
- my $e_word = join ("", @word);
- if ($e_word =~ /$hidden/){
- print"Correcto -> \¡GANASTE\!\n!\n";
- exit;
- }
- }
- sub guess_word{ #Ultima oportunidad
- my $hidden = join ("", @hidden);
- my $f_word = join ("", @word);
- if ($f_word =~ /$hidden/){
- print"\¡GANASTE\!\n";
- return 1;
- }else {
- print "Intenta adivinar la palabra completa:\n";
- chomp(my $g_word = <STDIN>);
- if ($g_word =~ /$word/){
- print"\¡GANASTE\!\n";
- return 1;
- } else {
- print "\¡AHORCADO\!";
- exit;
- }
- }
- }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4