Start Programowanie Random - czyli nieco o losowaniu
Random - czyli nieco o losowaniu PDF Drukuj Email
Wpisany przez Piotrek   
czwartek, 27 sierpnia 2009 00:00

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?

Poprawiony: piątek, 16 lipca 2010 11:38
 
Copyright © 2010 Wortal Informatyka i Ekonometria. Wszelkie prawa zastrzeżone.
Joomla! jest wolnym oprogramowaniem dostępnym na licencji GNU GPL.