
Pexeso ve Visual Basic
Zdravím, dostal jsem za ukol naprogramovat hru pexeso ve Visual basic 2010. Jenomže nemám tušení jak začít ( Jak udělat aby pokaždé byli ovrázky jinde a jak udělat aby program poznal dva shodne) :(
- Pres BOOLEAN (True/False) nebo IS (Karta_Hovezi IS Karta_Hovezi) jsi zkousel?
no jelikož ještě nemám random postavení karet tak ne ale díky za typ :)
- Potom nahodné losovani muzesz udelat pres RND typu:
- V pripade ze karta bude mit "CISELNOU" hodnotu, co ma na obrazku je jedno.
No ale jak mi tohle pomuže náhodně rozmístit karty?
- Zrejme nahodné zobrazeni do "PictureBox1, PictureBox2, PictureBox3 etc.", nevim jak nebo pres co mas udelane zobrazeni.
Mám 6x6 polí počínaje button1...
ked mas 6x6 poli tak si karty ocisluj 0-35 a vygenerujes nahodne cislo od 0 do 35 (alebo od 1 po 36) a kartu s tym cislom posadis na prve policko, potom si vygenerujes nahodne cislo z rozsahu 0 do 34 a prechadzas este neusadene karty a pocitas ich a tu dalsiu podla nahodneho cisla usadis, dalsie nahodne cislo bude z rozsahu 0 az 33 atd. Cele je to o 2 vnorenych cykloch
P.S: usadenie kariet si ukladas napr. no nejakeho pola s 6x6 prvkami, do ktoreho si zaznamenavas ze ktora karta (ulozis si do pola cislo karty) je na danom policku. Alebo naopak mozes mat 36 kariet (pole s 36 polozkami) a ku kazdej karte si zapises ze kde je umiestnena (a tak potom mozes jednoducho preskakovat karty ktore uz su umiestnene, ptz si len prechadzas to pole ze ci tam je hodnota na ktoru si cele pole inicializoval, napr. -1, co znamena ze karta este neni usadena)
Ahh todle mi moc pomohlo děkuju:) jinak se nesnažím dohnat ukoly je to maturitní projekt mam na to pul roku
Je to presna kopia toho co by si robil ty v skutocnosti keby si mal v ruke 36 kariet a chcel by si ich nahodne rozmiestnit na stol. Robil by si to tiez po jednej karte, prvu by si vybral nahodne z 36tich, a umiestnil na prve policko, druhu nahodne z 35tich a umiestnil na druhe policko atd.
Ked chces aby robil program nejaku cinnost tak rozmyslaj ze jak sa to robi v realnom svete, po malych krokoch, a tie kroky napises do programu.
Rozumím:) ted ještě jak udělat aby poznal že jsou stejné
tak snad musis nejak mat neikde priradenie cislo karty -> obrazok, bud napevno (napr. ze karta 1 a 2 ma stejny obrazok, 3 a 4, atd, potom ti staci cislo karty celociselne vydelit dvomi a porovnat), alebo si budes drzat priradenie cislo karty -> obrazok v nejakom poli ktore si na zaciatku inicializujes, a porovnas potom podla toho pola ze ci maju stejny obrazok
no já přemejšlel že kdyby si vybral nějaký obrázek tak byhc mu dal číslo a po kliknutí by se to číslo uložilo do proměné a pokud by byla shodná s druhou tak by byl stejný..
Pole si napln treba samyma -1. Pak vypln pole 2x cisly od 0 do 17 na nahodne pozice (dej pozor abys zapisoval jen na pozice, kde jeste neni karta, tam kde je -1), pri tahu 2x sahnes do pole a porovnas cisla.
Todle mi teda přijde celkem složitý
To je tak na 20 minut prace. Bez UI.
No nevim pro mě je tendle postup moc složitý nebo nechápu jak přesně to myslíš
Tvůj problém bohužel není programování, ale algoritmizace.
Chceš-li se opravdu naučit programovat, musíš prvně umět problém algoritmizovat - tj. rozložit na jednoznačný sled relativně jednoduchých operací, které je třeba provést, aby byla úloha správně vyřešena. Algoritmizace úzce souvisí s matematikou, zejména logikou. Pokud nemáš logické myšlení, je skvělým začátkem učení matematiky, protože to Tě přinutí myslet logicky.
Naprogramování vytvořeného algoritmu je pak už úkol pro "cvičenou opici" - stačí znát syntaxi jazyka, v kterém to máš naprogramovat.
Abych Tě trochu naťukl, tak algoritmus vygenerování náhodných pozic karet může vypadat třeba takhle:
- vytvoř pole od 0 do 35 a do všech prvků ulož -1
- v cyklu pro i 0 do 15:
- - vygeneruj první pozici zvoleného čísla i
- - je v poli na této pozici -1?
- - - pokud ano, ulož do ní zvolené číslo (i)
- - - pokud ne, jdi na předchozí krok (vygenerování první pozice)
- - vygeneruj druhou pozici zvoleného čísla i
- - je v poli na této pozici -1?
- - - pokud ano, ulož do ní zvolené číslo (i)
- - - pokud ne, jdi na předchozí krok (vygenerování druhé pozice)
- konec cyklu
Děkuju moc!! Ale tak to nemusí být -1 v tom poli ne? Takže pokud si cyklem for do poli uložim vždy jiné čísla a kartam(buttonum) přiřadím čísla od 1 do 36 tak se zeřadí tak jak je mám v poli ne? To pak ale ty karty nebudou rozloženy do 6x6
Ta -1 je tam kvůli tomu, abys poznal, jestli už jsi tam vložil nějaké číslo.
Jo to vím ale nemuí tam být -1 muže tam být cokoliv ne?
Cokoliv ne. Cokoliv z hodnot, které se tam normálně nemůžou vyskytnout. Pokud se tam můžou vyskytnout pouze kladná čísla, tak u záporného je jistota, že tam být nemůže.
no jo udělal sem pole ale nemužu jich do pole nadefinovat víc jak 33
Cože nemůžeš?
je tam napsaný že limit je 32
Kde je to napsaný? Buď se nauč vyjadřovat přesně, nebo budeš sebemenší problém řešit pěkně dlouho.
Do pole jsem zadal 33 hodnot podtrhlo mi to tak jsem na to najel kurzorem a ukazalo se mi že pole může max obsahiovat 32 položek pro jistotu jsem si to i vygooglil a je to tak
To by mě teda zajímalo, co jsi vygooglil.
VB.NET (stejně jako ostatní jazyky .NET) podporuje až 32-rozměrná pole, čili pole adresované až 32 indexy, s větším počtem rozměrů než tři (používaným ve 3D grafice) se ale setkáme málokdy. Více na: http://www.zive.cz/clanky/programujeme-ve-visual-b asic-net---20-dil---deklarace-pole/sc-3-a-121695/d efault.aspx#utm_medium=selfpromo&utm_source=zive&u tm_campaign=copylink
Dam ti taku radu. Zacni pekne od zaciatku - zadaj si do google slova zaciname s visual basic NET, alebo nejaky visual basic NET tutorial, urob si pekne najprv hello world, a dalsich X kapitol/cviceni, a az potom co si prejdes vsetky kapitoly/tutorialy co si si nasiel, sa snaz nieco programovat.
P.S. pretoze so sucastnym stavom vedomosti to nedas, ani omylom.
Já základy umím ale pole nějak nechápu
pole su zaklady.
No jo, já je ale prostě nepochopím :/ nebyl by tu někdo tak ochotný ukázat mi kod na to jak do pole nacpat to "-1"
Děkuju! :)
S tímhle přístupem ten program stejně nikdy nedáš. Tohle bys měl znát tak po dvou týdnech, ale ty se to (jak tvrdíš) učíš už dva roky. To je jako bys po dvou letech učení se čtení ještě neuměl všechna písmenka.
No jo každej umí něco jiného programování prostě není moje no :/ A teda když budu chtít náhodně rozmístit karty tak pomocí cyklu for budu generovat čísla a zadávat je do -1 a když tam -1 nebude tak se přesuu do dalšího indexu?
Nahodne cislo bude znamenat poradie do ktoreho tu dalsiu kartu vlozis. T.j. musis mat 2 pocitadla - jedno bude pocitat ktoru kartu vkladas, druhe bude pocitat ze kolko uz si nasiel tych -1 v aktualnom prechode, a ked si sa dostal na to nahodne cislo tak ulozis cislo karty ktore vkladas. Potom si vygenerujes nove nahodne cislo, zvysis cislo karty, vynulujes pocitadlo -1, a zacnes prechadzat pole odznova.
Neukladas nahodne ciasla do pola, to je ti uplne k hovnu.
Uz som to pisal vyssie, nechapes absolutne nic. Nakresli si na papier policka, vystrihni si karty, a rob to rukami a kukaj ze jake kroky pri tom robis. Alebo prenechaj programovanie niekomu kto je toho schopny a chod radsej ja neviem na prirodopisnu skolu alebo co.
No to bohužel nemůžu jsem ve čtvrtáku a todle je moje maturitní práce jestli to neudělám nepustí mě k maturitě :( a dělám to podle toho - vytvoř pole od 0 do 35 a do všech prvků ulož -1
- v cyklu pro i 0 do 15:
- - vygeneruj první pozici zvoleného čísla i
- - je v poli na této pozici -1?
- - - pokud ano, ulož do ní zvolené číslo (i)
- - - pokud ne, jdi na předchozí krok (vygenerování první pozice)
- - vygeneruj druhou pozici zvoleného čísla i
- - je v poli na této pozici -1?
- - - pokud ano, ulož do ní zvolené číslo (i)
- - - pokud ne, jdi na předchozí krok (vygenerování druhé pozice)
- konec cyklu
Ten algoritmus je ale dost nedokonaly resp. trochu dementny. Jak to robi clovek s IQ>10 som ti pisal uz uplne kdesi hore, aj teraz znova.
Ted sem přemejšlel jestli by šlo udělat tak že byhc si dal 6x6 labelu a jeden button do button bych napsal kod pro nahodně vygenerování čísel do všech labelu a pak podle vygenerovaných čísel zobrazovat karty šlo by to?
Mozes pouzit aj ten algoritmus co ti pisal vyssie, fungovat bude.
nahodne cislo je index pola, a do pola si davas hodnotu cislo karty.
a mas v poli cisla kariet (v dvoch nahodnych polickach je hodnota 0, v inych dvoch nahodnych polickach je 1, atd.)
//oprava: to cislo karty pojde od 0 do 17 (mas 18kariet, 2*18 = 36 poli), ne do 15, sorry
alebo trochu normalnejsie
este som tam zabudol za tym
Dim pole(36)
musis pole najprv inicializovat na tie -1
Takhle to zkusim
Pro to nahodne normálně použiju CInt(Int((6 * Rnd()) + 1)) ?
ne. Mas generovat nahodne cislo z rozsahu 0 az 35:
CInt(Int(36 * Rnd()))
no však jen jako příklad sme to myslel sorry. A ještě jak je kod pro se nerovná? ISnot?
For i = 0 To 35
pole2(i) = -1
Next
For cislo_karty = 0 To 17
pole2(nahodne_cislo) = CInt(Int(36 * Rnd()))
If pole2(nahodne_cislo) IsNot "-1" Then
pole2(nahodne_cislo) = cislo_karty
End If
pole2(nahodne_cislo) = CInt(Int(36 * Rnd()))
If pole2(nahodne_cislo) IsNot "-1" Then
pole2(nahodne_cislo) = cislo_karty
End If
Next
takhle ?
OMG.
opakovat neni if. To nepoznas ani cykly? Daj si do google visual basic net cykly. A ne nemyslim cyklus for.
nerovna sa je <> a neporovnavas to s textom ale len s cislom.
To vsetko su absolutne zaklady. Zakladnejsie zaklady uz neexistuju.
A nemas tam mat
pole2(nahodne_cislo) = CInt(Int(36 * Rnd()))
to nevies ani opisat text co som sem napisal tak jak bol po riadkoch? To snad neni pravda.
No tak myslíš while?
Tim pádem ale musim nadefinovat proměnou nahodne cislo nebo to je ten index
Samozrejme ze ked pouzivas nejaku premennu tak ju najprv kdesi nadefinujes cez Dim as integer apod ked to je integer apod.
nevies nic.
Nahodne cislo mam podtržené a nutí mě to ho deklerovat
Tak ho deklaruj, co ti brání?
To pak bude brát jako index?
Jako index ho už přece používáš.
Takže ted stačí už jen podle pole přiřadit karty
A nebude v poli třeba: (36,25,1,36) co když se budou čísla v poli opakovat?
V poli su cisla kariet. Cisla od 0 po 17, kazde cislo je presne v dvoch polickach. Citaj si ten algoritmus este 5x, a nakresli si to pole na papierik a pis si tam ceruzkou kazdy krok co ten algoritmus robi.
Ty jsi programování neviděl ani z rychlíku, asi jsi ty dva roky chodil za školu, to jinak prostě není možný.
http://www.itnetwork.cz/visual-basic-vb-net-tutori al-pole
Tohle vlákno si poznamenám, to se fakt jen tak nevidí.
To pole pouzijes na to aby si vedel ze jaky obrazok mas vykreslit. Mas na obrazovke plochu 6x6 policok. Takze suradnice policka (nejake x a y) su z rozsahu 0-5, 0-5.
Index do pola bude potom (x*6 + y), t.j. pre policko na pozicii x,y zobrazis obrazok:
cislo_obrazku = pole(x*6 + y)
Mas 18 moznych kariet (obrazkov) t.j. cislo obrazku je z rozsahu 0-17
Dobře děkuju ti moc za trpělivost semnou a za čas který jsi stravil pomáháním mi moc si toho cením
Zbytek nějak dodělám popř. se poptám učitele
jo jinak pro to vykreslení dám zase for s tím "cislo_obrazku = pole(x*6 + y)"
Najprv predsa vykreslis vsetky obrazky stejne (zadna strana kariet).
Az ked niekto niekam klikne tak si z pozicie mysi prepocitas poziciu karty, tym ziskas tie suradnice karty x,y (v rozsahu 0-5, 0-5) a zobrazis len jeden obrazok cislo_obrazku = pole(x*6 + y) na suradniciach na ktorych ma ten obrazok byt (podla toho kam uziavtel klikol)
Graficky program reaguje na udalosti zvonku, neni tam ziadne for, ale jednotlive funkcie ktore sa spustia po nejakej udalosti (napr. mouse click).
Zacni konecne si hladat googlom priklady a zacni od zakladov, neurobis to dnes, ani zajtra, a este budes muset vela googlit. Mas na to snad pol roka ci kolko.
Objednám si knížku k tomu....Jinak fakt moc díky:)