Hra miny v pascalu – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Hra miny v pascalu – Pascal – Fórum – Programujte.comHra miny v pascalu – Pascal – Fórum – Programujte.com

 

Filip
~ Anonymní uživatel
121 příspěvků
6. 3. 2016   #1
-
0
-

Dobrý den,

ve škole jsem dostal zadání abych naprogramoval hru hledání min v pascalu (Bez grafiky).

Zadání zní

Vykreslí se nejprve pole pomocí nějakých znaků (např. pomlčka). Hráč vždy zadá souřadnice a zda si myslí, že na nich je mina nebo není. Pokud zadá, že na poli mina není a bude to pravda, odkryje se číslo, kolik je v okolí min. Pokud to nebude pravda, hra končí prohrou. Pokud zadá, že na poli je mina a bude to pravda, odkryje se mina (třeba písmeno m). Pokud to nebude pravda, hra konční. Hrát se bude s jedním herním plánem (jen jediné rozmístění min), které si nachystáš do textového souboru a odtud se načte do pole. Textový soubor obsahující herní plánek si doneseš už hotový.

Nástin řešení:

Potřebuješ asi 2 dvourozměrná pole. V jednom bude herní plánek a druhé stejně velké pole s hodnotami boolean. Druhé pole nastavíš na počáteční hodnotu false. Když hráč pole odkryje, hodnotu políčka změníš na true, takře při dalším výpisu budeš vědět, že na tomto políčku zobrazuješ herní plán. Kde bude false, vykreslí se např. pomlčka. Herní plánek ze souboru bych četla po znacích a zapisovala do pole pro herní plán.

Předem děkuji za všechny rady :-)

Nahlásit jako SPAM
IP: 86.61.185.–
Tukan0
Stálý člen
6. 3. 2016   #2
-
0
-

ahoj, no a s čím by jsi chtěl jako moct? Tak začni třeba tak, že z textáku si načteš pole min a po zadání souřadnic ti to vypíše jeslti je tam mina nebo kolik min je v okolí.

Nahlásit jako SPAM
IP: 188.175.57.–
Filip
~ Anonymní uživatel
121 příspěvků
6. 3. 2016   #3
-
0
-

#2 Tukan
Tak nějak mě nenapadá jak na to. No udělal jsem 2 textové soubory 5 řádků a 4 sloupce. V jednom jsou pouze pomlčky a v druhém je herní plocha, která má být skytá. Zadeklaroval jsem 2 dvourozměrná pole (var reseni:array [1..4,1..5] of string, var plocha:array[1­..4,1..5] of string) Teď netuším jak do toho pole načíst ty znaky ze souboru. Chtěl jsem aby se to pole načetlo naráz, ale v zadání je aby se to načítalo po znacích pravděpodobně for cyklem. Poté mi taky došlo, že to nejde načítat naráz protože když skončí tah tak se to pole vypíše celé znova a ty odkryté části by se znovu zakryly.

Nahlásit jako SPAM
IP: 86.61.185.–
Tukan0
Stálý člen
6. 3. 2016   #4
-
0
-

v pascalu jsem nedělal už asi 8 let kod ti nenapíši. Tak si přečti znak po znaku a ty si zapisuj do pole.

No tak zase si musíš zapsat do souboru, kde uživatel kliknul, aby jsi při dalším načtení už to věděl.

Nahlásit jako SPAM
IP: 188.175.57.–
Filip
~ Anonymní uživatel
121 příspěvků
6. 3. 2016   #5
-
0
-

A když mám textový soubor, kde je to takto

----

----

----

----

----

Tak jak mám napsat abych zapsal třeba do písmene a tu jednu pomlčku na souřadnicích 1,1 ?

Nahlásit jako SPAM
IP: 86.61.185.–
Tukan0
Stálý člen
6. 3. 2016   #6
-
0
-

teď nechápu co myslíš tím "do písmene a". 

Já bych to asi udělal takto, že budu vždycky vypisovat tohle pole. A pokud by bylo na nějaké místo kliknuto, tak si tam dám místo pomlčky číslo nebo M (jako minu). Po každém kliku musíš vymazat soubor a zapsat celé pole do souboru.

Nahlásit jako SPAM
IP: 188.175.57.–
Filip
~ Anonymní uživatel
121 příspěvků
6. 3. 2016   #7
-
0
-

#6 Tukan
Tak to jsem vůbec nepochopil má tam být funkce boolean. A napadlo mě akorát změnit hodnotu pomlčky na false a hodnotu z řešení přepsat z false na true ;) A nebudu muset vůbec nic přepisovat v souborech

Nahlásit jako SPAM
IP: 86.61.185.–
Tukan0
Stálý člen
6. 3. 2016   #8
-
0
-

#7 Filip

tak jasně můžeš to udělat tak, že ty txt načteš na začátku a pak tě už nezajímají - nejlehčí. 

Přesně takhle to cvičící myslel. Na druhou stranu to je jen doporučený nástin řešení. Udělat to jde více způsoby

Nahlásit jako SPAM
IP: 188.175.57.–
Filip
~ Anonymní uživatel
121 příspěvků
6. 3. 2016   #9
-
0
-

#8 Tukan
assign(reseni, C:\pascal\reseni.txt);

Co je na tom blbě ?

Nahlásit jako SPAM
IP: 86.61.185.–
q
~ Anonymní uživatel
219 příspěvků
6. 3. 2016   #10
-
0
-

#9 Filip
Chybí ti tam apostrofy.

assign(reseni, 'C:\pascal\reseni.txt');
Nahlásit jako SPAM
IP: 213.211.51.–
Bellwar0
Duch
7. 3. 2016   #11
-
0
-

#3 Filip
Ved sprav si textovi v takejto podobe http://imgur.com/SRzbPon
- = nič m = mina  no a čísla su ako pri minach
* chybajú mi tam ešte jednotky za to sa ospravedlnujem
 

Potom sprav nieco ako:
repeat
readln(subor,riadok);
cisloriadku:=cisloriadku+1;     ak to bude prvy riadok spravi 0+1 cize 1. riadok
for i:=1 to lenght(riadok) do 
x:= riadok[i];
case x of 
#no a tu ides proste pre každú vec 
'-':hraciepole[cisloriadku,x];
'm':hraciepole[cisloriadku,x];  no a takto pre každú možnosť akú môžeš dostať.

Týmto načítaš svoje pole ktoré ma dokonca variabilnu velkosť (ak je array dynamická a pouťiješ SetLength)

potom je to už len o čítaní vstupu porovnávaní s načítaným polom a nasledovnom vypísaní na obrazovku, nevidím, teda nejdem to programovať a nemám to spravené ciže neviem na 100% povedať, že by bolo potreba mať dve polia. Keď budeš iba odhalovať rôzne body na pred pripravenom pláne a určovať či prehral alebo pokračuje alebo odhalil celé pole. Tak by si využil pole na výstupnej obrazovke.
 
To je môj názor ale bližšie som to neskúšal.

EDIT: Zabudol som pripomenúť, že nie je to správny syntax, je to len v skratke ukázané asi ako približne by som postupoval.
 

Nahlásit jako SPAM
IP: 185.69.104.–
Bellwar0
Duch
7. 3. 2016   #12
-
0
-

#11 Bellwar
Teraz som si uvedomil, že som zabudol v tom Case dopísať za neznámu z toho array
  
:='-'
:='m';

Nato som tam ešte včera v noci zabudol. 

Nahlásit jako SPAM
IP: 185.69.104.–
Mircosoft+1
Věrný člen
16. 3. 2016   #13
-
0
-

Kdysi jsem miny psal, i s grafikou. Hrací pole bylo 2D pole čísel (array[1..vyska,1..sirka] of byte), kde 0..8 znamenalo počet min v okolí a 9 byla mina. K tomu bylo druhé stejně velké pole, kde byly možné hodnoty "neodkryto", "odkryto", "označeno praporkem" a "označeno otazníkem" (byla to buď zase čísla, nebo přímo výčtový typ - už si to nepamatuju). Miny jsem do pole sypal náhodně a čísla generoval podle nich, načítání by mohlo fungovat nějak takhle:

Otevři soubor pro čtení (Reset)
Cyklus pro y od 1 do výšky hracího pole (for):
- begin
- Cyklus pro x od 1 do šířky hracího pole:
-- begin
-- Načti ze souboru jeden znak (Read)
-- Ulož ho do hracího pole na souřadnice y,x
-- Skoč v souboru na začátek dalšího řádku (Readln)
-- end
- end

To druhé pole fungovalo tak, že když se do něj kliklo levým myšítkem, změnila se hodnota na "odkryto" (navíc odkrytí nuly automaticky odkrylo i políčka v okolí a odkrytí miny ukončilo hru). Pravé myšítko točilo hodnoty dokola mezi "neodkryto", "označeno praporkem" a "označeno otazníkem". Ve tvém případě bude stačit pole booleanů, kde třeba false=zakryto a true=odkryto. Na začátku ho celé nastavíš na "zakryto".

Výpis hracího pole na obrazovku by mohl vypadat třeba takhle:

Cyklus pro y od 1 do výšky hracího pole:
- begin
- Cyklus pro x od 1 do šířky hracího pole:
-- begin
-- Jestli (if) je v tom druhém poli na indexu y,x hodnota "zakryto" (false), vypiš pomlčku (Write)
-- Jestli ne (else), vypiš místo pomlčky hodnotu z hracího pole na indexu y,x
-- end
- Na obrazovce ukonči řádek (Writeln)
- end

A teď koukám, že reaguju s týdenním zpožděním, takže už to stejně asi nemá cenu :-].

Nahlásit jako SPAM
IP: 212.79.106.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý