Tym razem chciałbym zaprezentować mały skrypcik, który wykonałem na języki skryptowe. Skrypt napisany jest w perlu i nazywa się Zgaduj Zgadula. Jest to gra, która polega na odgadnięciu przez gracza losowo wybranej przez komputer liczby całkowitej z przedziału <1,100>. Gracz ma 10 prób, a po każdej z nich komputer sprawdza czy podano właściwą liczbę, jeśli nie na ekranie pojawia się podpowiedź czy odgadywana liczba jest większa czy mniejsza.
Zasady gry:
- liczba rund max 10,
- przy każdej kolejnej rundzie w znaku zachęty pojawia się napis: Runda x, gdzie x to numer kolejnej rundy,
- po zakończeniu rozgrywki wyświetla się komunikat z pytaniem, czy użytkownik chce jeszcze raz zagrać, po wybraniu opcji „Tak” skrypt wykonuje się ponownie,
- program sprawdza czy użytkownik podaje poprawne dane wejściowe (czy wyrażenie jest liczbą oraz czy liczba jest z przedziału <0,100>),
- wprowadzony jest prosty system rejestracji, który zapisuje nick do pliku, a jeżeli ktoś już podał nick użyty, to odczytuje sumę punktów z wszystkich rozgrywek jakie stoczyła osoba o tym nicku,
- wprowadzony jest prosty system punktacji, po odgadnięciu liczby użytkownik dostaje 11-x punktów, gdzie x to numer rundy, w której liczba została odgadnięta,
- punkty zapisywane są do pliku i sumowane z wszystkich rozgrywek.
Warunki korzystania ze skryptu:
- Skrypty są rozpowszechniane na licencji GPL.
- Jedynym warunkiem ich użytkowania jest nieusuwanie żadnych danych umożliwiających identyfikację autora skryptu.
- Możesz wykorzystywać fragmenty ich kodu we własnych projektach oraz dowolnie modyfikować.
Kod skryptu wygląda tak:
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 | #!/usr/bin/perl # Autor skryptu: Arkadiusz Tobiasz # www: http://www.tobiasz.org # blog: http://www.blog.tobiasz.org # mail: arek@tobiasz.org # # Skrypty są rozpowszechniane na licencji GPL. # Jedynym warunkiem ich użytkowania jest nieusuwanie żadnych danych umożliwiających identyfikację autora skryptu. # Możesz wykorzystywać fragmenty ich kodu we własnych projektach oraz dowolnie modyfikować. use strict; use warnings; my $range = 100; # przedzial liczb do wylosowania my $random_number; # wylosowana liczba my $rund = 1; # numer rundy my $runds = 10; # ilosc rund my $play = 1; # gra wlaczona my $again = 0; # czy uzytkownik chce grac jeszcze raz my $number; # liczba wybrana przez uzytkownika my $register = 0; # czy zarejestrowany my $name; # nazwa uzytkownika my $result; # wynik podczas gry my $points; # liczba punktow my $nick; print "Podaj nick:\n"; chomp($name = <STDIN>); print "--------------------------------\n"; open(top10, "top10.txt" ) || die "Nie można otworzyć pliku!"; while( <top10> ) { chomp; ($nick, $points) =split( /;;/ ); if($nick eq $name) { print "Witaj $name!\n"; print "Liczba punktow: $points\n"; print "Powodzenia w grze!\n"; $register = 1; } } close( top10 ); if($register == 0) { print "Witaj $name!\n"; print "Wlasnie zostales zarejestrowany.\n"; print "Obecnie masz 0 punktow.\n"; print "Powodzenia w grze!\n"; open (top10, ">>top10.txt") or die "Nie można otworzyć pliku: $!"; print top10 "$name;;0\n"; close(top10); $points = 0; } print "--------------------------------\n"; while($play == 1) { $random_number = int(rand($range) + 1); # losowanie liczby z przedzialu while($rund < 11) { do { do { print "Podaj liczbe z przedzialu <0,100>:\n"; print "Rudna $rund: "; chomp($number = <STDIN>); } until($number > 0 && $number < 100); } until($number =~ /^[+-]?\d+$/); #sprawdzenie czy wyrazenie jest liczba if($number == $random_number) { print "Brawo udalo Ci sie odgadnac liczbe w $rund rundzie!\n"; $result = 11 - $rund; print "Zdobyles $result punktow!\n"; $result = $result + $points; print "W sumie masz $result punktow.\n"; open (top10, "<top10.txt") or die "Nie można otworzyć pliku: $!"; open (top10_new, ">top10_new.txt") or die "Nie można otworzyć pliku: $!"; while( <top10> ) { chomp; ($nick, $points) =split( /;;/ ); if ($nick eq $name) { print top10_new "$name;;$result\n"; } else { print top10_new "$nick;;$points\n"; } } close(top10); close(top10_new); unlink("top10.txt"); rename("top10_new.txt", "top10.txt"); $rund = 11; print "--------------------------------\n"; } else { $runds = $runds - 1; if($number > $random_number) { print "Wylosowana liczba jest mniejsza od podanej!\n"; print "Pozostalo Ci jeszcze $runds prob.\n"; print "--------------------------------\n"; } if($number < $random_number) { print "Wylosowana liczba jest wieksza od podanej!\n"; print "Pozostalo Ci jeszcze $runds prob.\n"; print "--------------------------------\n"; } } $rund++; } print "Czy chcesz zagrac jeszcze raz? [t/n]\n"; chomp($again = <STDIN>); if($again eq "t" || $again eq "T") { $play = 1; $rund = 1; $runds = 10; $points = $result; } else { $play = 0; } print "--------------------------------\n"; } |
Spakowana paczka ze skryptem:
Popularity: 9%

IMHO gdybyś podzielił kod skryptu na procedury byłby znacznie bardziej czytelny.
Masz rację, może kiedyś go przerobię