Volba náhodného čísla - RANDOM

Pro různé testovací programy nebo hry (od jednoduchých po složitější) je často potřeba volit náhodné číslo. Ve většině prorgamovacích jazycích existuje obdobná funkce pro volbu náhodného čísla - random:

Funkci RANDOM je možné využít dvěma způsoby:
- k volbě náhodného přirozeného čísla, jako parametr se do závorky uvede horní hranice: např. random(10) zvolí náhodné číslo od nuly do devíti (vždy o 1 menší než je číslo v závorce)
- k volbě náhodného desetinného čísla - do závorky se nepíše žádný parametr: random() - zvolí náhodné desetinné číslo větší nebo rovno nule a menší než 1

Aby bylo možno se zvoleným číslem dále pracovat, je potřeba uložit ho do proměnné:
a:=random(50);

V mnoha případech nebudeme chtít volit náhodné číslo od nuly, potom stačí přičíst "spodní hranici" čísel, která chceme volit, například:
a:=1+random(6) - zvolí čísla od 1 do 6
a:=10+random(91) - zvolí čísla od 10 do 100

Pokud budete spouštět program, který bude obsahovat random, víckrát, budou sice volena náhodná čísla, ale při každém spuštění stejná. V podstatě se tato čísla vybírají z nějaké tabulky náhodných čísel, chcete-li tuto tabulku vyměnit, je nutno použít příkaz randomize.

Hádání čísel s komponentou MEMO

Volbu náhodného čísla využijeme k jednoduché hře , ve které počítač zvolí náhodné číslo, které potom hráč hádá. Pro víceřádkový výstup použijeme tentokrát další novou komponentu MEMO (lze ji samozřejmě použít i pro vstup):


Formulář projektu může podle obrázku obsahovat nadpis, tlačítko pro volbu nového náhodného čísla, další tlačítko pro zkontrolování zadaného tipu a Edit pro zadání tipu. Zbývající dvě větší pole na obrázku jsou právě komponenty MEMO. Tato komponenta se od komponenty Edit liší hlavně tím, že může obsahovat více řádků.

Vlastnosti memo jsou například (převzato z Umíme to s Delphi, 7. díl):
Lines - jednotlivé řádky komponenty
Text - práce s celým textem
Alignment - zarovnání textu
ScrollBars - nastavení posuvníků
WordWrap - zalamování řádků
WantTabs, WantReturns - umožňuje vkládat tabelátory a Entery. V každém případě může uživatel zmíněné znaky do textu dostat současným stiskem Ctrl (Ctrl+Tab, Ctrl+Enter).


Z uvedených vlastností využijeme v tomto projektu jen první vlastnost Lines. Můžeme ji využít už v návrhu formuláře pro víceřádkový text návodu. Pro úpravu této vlastnosti je k dispozici editor, podobně jako u úprav položek ComboBoxu nebo ListBoxu.

Za běhu programu se k přidání řádku do komponenty MEMO použije metoda add (opět podobně jako u ListBoxu), například:
memo2.lines.add('zvoleno nové číslo');
Vlastní programování obsahuje proceduru na tlačítku pro volbu nového čísla:
procedure TForm2.Button1Click(Sender: TObject);
begin
randomize;
a:=1+random(100);
memo2.lines.clear; //vyprázdění komponenty
edit1.Text:=''; //vložení "prázdného" textu
memo2.lines.add('zvoleno nové číslo');
end;
Funkce procedury by měla být jasná na základě předešlého textu - zvolí se tabulka náhodných čísel, potom se do proměnné a uloží náhodné číslo od 1 do 100, vyprázdní se memo2 a edit1 a do memo2 se přidá řádek s hlášením o zvolení nového čísla.

Další (a poslední :-) ) proceduru obsahuje tlačítko pro kontrolu tipu:
procedure TForm2.Button2Click(Sender: TObject);
begin
memo2.lines.add('tvuj pokus: '+edit1.Text);
if a=strtoint(edit1.Text) then
begin
showmessage('skvele');
application.terminate;
end;
if a>strtoint(edit1.Text) then memo2.lines.add('pridej');
if a<strtoint(edit1.Text) then memo2.lines.add('uber');
end;


I tato procedura je jasná - nejprve se do memo2 přidá řádek s číslem z Edit1 (tip), potom se tip porovná se zvoleným náhodným číslem a - je-li stejné (uhodnuto), vypíše se hláška a aplikace skončí, je-li menší nebo větší, vypíše se příslušná hláška do memo2.

Aplikace ukládej do složky s názvem lekce10 .

Úkoly:

Základní úloha:

Vytvoř aplikaci podle textu lekce a přidej vypisování počtu pokusů (je jedno, kterou komponentu k tomu použiješ).


Úlohy na plus (za každou jedno plus):

1. Doplň základní úlohu o možnost volby intervalu pro volené číslo (od kolika do kolika by číslo mohlo být).

2. Doplň základní úlohu o možnost volby hry pro dva lidské :-) hráče.


Úlohy na jedničku:

1. Rozšiř jednu z úloh (nebo úlohy) na plus na hru "Hon na lišku", ve které se hádané číslo po každém pokusu zvětší (například o 3). Pokud se dostane nad zvolenou hranici, začne se zase o dané číslo zmenšovat, než se dostane ke spodní hranici a stále dokola se pohybuje v daných "hranicích", dokud není "chyceno".

2. Doplň násobilku z 9. lekce na zkoušecí program. Ve výpisu násobků bude vždy jeden náhodný chybně. Zkoušený má určit, který to je.

3. Napiš aplikaci pro virtuální míchání fiktivní kyseliny - uživatel má za úkol pro náhodné množství kyseliny doplnit správné množství vody, jestliže mají být tři díly kyseliny a 7 dílů vody. Počítají se mu pokusy a ztráty životů, po určitém počtu chyb aplikace skončí (viz ukázka ).