|
Funkcja random jest często stosowana w różnego rodzaju grach (choć nie tylko)
Za pomocą funkcji random możemy wygenerować liczbę pseudolosową (pseudo dla tego że losowanie opiera się na niezbyt "mocnym" algorytmie - niepolecana funkcja do tworzenia szyfrów)
funkcji random jako takiej nie zobaczymy od razu. To tylko samo wylosowanie liczby, takową liczbę należy jeszcze gdzieś zapamiętać - najlepsza do tego będzie tablica.
Aby nacieszyć oko tą funkcją w najprostrzmy sposób jak mi przyszedł do głowy trzeba by zrobić tak:
Kod: [Zaznacz] {Mini lotek} Program losuj;
var i, wylosowana : integer; lotto : array [1..10] of integer;
begin //potrzebne aby dla finkcji random randomize;
//do zmiennej wylosowana przypisujemy wylosowana liczbe od 0 do 10 //wynik kazdego takiego losowania przypisujemy w kolejne pozycje tablicy //(gdzies musimy trzymac nasze wyniki :P) for i:=1 to 10 do begin wylosowana:=random(10); lotto[i] := wylosowana; and //gdy mamy juz wyniki zapamietane w naszej tablicy wyswietlamy je //dodalem wyswietlanie na 3 pozycjach - max dwie cyfry i odstep to juz //jednak kosmetyka. for i:= 1 to 10 do write(lotto[i]:3);
readln; end.
Ważna uwaga jeśli ktoś korzysta z FreePascal'a - w klamrze BEGIN END przy przypisywaniu kolejnych wylosowanych liczb do tablicy należy wstawić średnik Dodano: [time]czw 27 sie 2009 17:50:37 CEST[/time]Dla lepszego zaprezentowania zastosowania funkcji random (choćby w grach) napisałem prostą i bardzo ubogą grę.
Każdy z nas pewnie pamięta jak się gra w karcianą grę w wojnę.
Wyciąg się z kupki kartę i kładzie ją na stół, jeśli posiada się kartę wyższą niż ta na stole wygrywa się, jeśli nie to ciągnie się następną z kupki.
Tutaj wersja mini napisana w przeciągu 30 min, oczywiście można by ją oprzeć o procedury być może w tedy było by czytelniejsze, można by też zrobić to za pomocą procedury case (wybór) dzięki temu moglibyśmy zbierać karty której nie chcemy wyłożyć na stół, oraz wykładać tą która nam odpowiada - w wersji konsolowej jednak chyba było by to zbytnie zagmatwanie, to chyba już trzeba by pisać na obiektach :P
W każdym razie, prosta, przede wszystkim w budowie gra w wojnę :) uwaga! jeśli kompilujesz ten program w Delphi to zamiast end; wstaw end Kod:
{Mini program, z okrojona gra karciana pt. wojna} Program wojna;
var ja, komp, i : integer;
//typ okrojony z typu integer - jak widac jest to typ dyskretny // okreslamy tylko zakres okrojenia, nie podajac nazwy pelnego typu moja, komputera : 1..9;
begin
writeln('Zagraj w karciana gre w wojne z komputerem'); writeln('do dyspozycji masz karty od 1 do 9'); writeln('wybierz odpowiedni klawisz aby wybrac swoja karte'); randomize; //wyzerowane wyniki w meczu ja :=0; komp := 0;
//poczatek meczu for i:=1 to 6 do begin //wybierasz swoja karte readln(moja); writeln('wybrales karte ', moja);
//losowanie karty przez komputer //petla zastosowana po to by komputer //nigdy nie wylosowal karty zero - blad logiczny repeat komputera := random(9); until komputera >= 1; writeln('komputer wybral karte ', komputera); //wynik w danej parti if moja > komputera then begin writeln('Ty wygrales'); inc(ja); end; //ze wzgledow gramatycznych rozdzielone na dwa if a nie if else if moja < komputera then begin writeln('Wygral komputer'); inc(komp); end; end; //wyniki w calym meczu if ja > komp then writeln('wygrales wynikiem ', ja,' do ',komp,' gratulacje!') else writeln('przegrales wynikiem ', ja,' do ',komp,' musisz jeszcze pocwiczyc ;)');
end.
Jeśli ktoś ugryzł to nieco inaczej - sprytniej czy proście, proszę o wrzucenie kodu :) Programowanie to przecież świetna zabawa :P:P
Ktoś jeszcze ma jakiś prosty pomysł na wykorzystanie funkcji random?
|