Forum » Programiranje » [C#] Naključno razporejanje elementov v tabeli
[C#] Naključno razporejanje elementov v tabeli
TheAmunraaa ::
Zdravo!
Rabim pomoč pri mojem projektu - igra spomin.
Na formi imam 16 pictureboxov in 16 panelov, ki jih pokrivajo.
Glede panelov je že skoraj vse narejeno, sedaj pa rabim razporediti slike tako, da bo na formi 8 slik, ki se bojo enkrat ponovile (skupaj 16 slik).
Slike imam v tabeli tako:
Sedaj pa v pictureboxe dodam slike:
Kar pa ne znam narediti je pa, da bi elemente v tabeli razporedil naključno (da bi se zamenjali sliki 1 in 5 ali pa 3 in 7, ipd.)
Rabim pomoč pri mojem projektu - igra spomin.
Na formi imam 16 pictureboxov in 16 panelov, ki jih pokrivajo.
Glede panelov je že skoraj vse narejeno, sedaj pa rabim razporediti slike tako, da bo na formi 8 slik, ki se bojo enkrat ponovile (skupaj 16 slik).
Slike imam v tabeli tako:
Image[] images = new Image[16] //tabela z 16 elementi { Properties.Resources.img1, Properties.Resources.img2, Properties.Resources.img3, Properties.Resources.img4, Properties.Resources.img5, Properties.Resources.img6, Properties.Resources.img7, Properties.Resources.img8, Properties.Resources.img1, Properties.Resources.img2, Properties.Resources.img3, Properties.Resources.img4, Properties.Resources.img5, Properties.Resources.img6, Properties.Resources.img7, Properties.Resources.img8 }; //slike so podvojene, da lahko izbiram med 16 slikami in ne rabim kakšne for zanke
Sedaj pa v pictureboxe dodam slike:
pictureBox1.BackgroundImage = images[0]; //tole se ponovi še 15-krat vendar ima vsak svojo številko elemeenta iz tabele
Kar pa ne znam narediti je pa, da bi elemente v tabeli razporedil naključno (da bi se zamenjali sliki 1 in 5 ali pa 3 in 7, ipd.)
jizzer ::
Sedaj imaš narejeno da je slika picture boxa pravzaprav slika z indeksom 0 v tvojem array-u slik. Index 0 pa pokriva vedno isto vrednost (v tem primeru isto sliko). Uporabi random, in namesto
Preberi pa še si tu, piše malo več o tem.
pictureBox1.BackgroundImage = images[0]; //napišeš nekaj takega Random nakljucnoSt = new Random(); pictureBox1.BackgroundImage = images[nakljucnoSt.Next(16)]
Preberi pa še si tu, piše malo več o tem.
Zgodovina sprememb…
- spremenil: jizzer ()
TheAmunraaa ::
Ok! To sedaj dela in mi lepo in naključno razporedi slike je pa problem, da mi isto sliko pokaže več kot dvakrat, kočem pa da mi jo poakže točno dvakrat (nič več, nič manj)
edit: poskušal sem že z non-repeating random, ampak ne razumem kako se to naredi.
edit: poskušal sem že z non-repeating random, ampak ne razumem kako se to naredi.
Zgodovina sprememb…
- spremenil: TheAmunraaa ()
stb ::
Lahko pa jih premešaš za v drug array in poleg parov lahko iščeš tudi trojčke ipd
Preveri robne pogoje, ker se ti zna tale nepreizkušena koda zaciklati pri iskanju prostega slota.
Bolj varčno s spominom pa je seveda, da imaš le eno kopijo slik, v drugem arrayu pa hraniš le indekse slik.
var rnd = new Random(); Image[] imagesAll = new Image[8] { /* ... snip ... */ }; //tabela z 8 elementi int factor = 2; Image[] imagesShuffled = new Image[imagesAll.Length * factor]; foreach (var image in imagesAll) { // duplicate (triplicate...) images in target array: for (int i = 0; i < factor; i++) { // find a random empty slot int pos; do { pos = rnd.Next(imagesAll.Length * factor); } while (imagesShuffled[pos] != null); // copy the image imagesShuffled[pos] = image; } }
Preveri robne pogoje, ker se ti zna tale nepreizkušena koda zaciklati pri iskanju prostega slota.
Bolj varčno s spominom pa je seveda, da imaš le eno kopijo slik, v drugem arrayu pa hraniš le indekse slik.
Zgodovina sprememb…
- spremenil: stb ()
darkolord ::
images = images.OrderBy(i => Guid.NewGuid()).ToArray();
Na vrh moraš dodati še "using System.Linq", če tega še nimaš.
Zgodovina sprememb…
- spremenilo: darkolord ()
stb ::
TheAmunraaa ::
Hvala!!!!
Legende ste!
Dela tk k mora s tem stavkom zdej:
A mi lahko prosim kdo razloži kaj to sedaj sploh naredi, da bom vedel pri zagovarjanju naloge?
Sam si predstavljam, da slike, ki jih imam v tabeli "images" uredi v novi tabeli, ampak pojma nimam na kak način.
Legende ste!
Dela tk k mora s tem stavkom zdej:
images = images.Union(images).OrderBy(i => Guid.NewGuid()).ToArray();
A mi lahko prosim kdo razloži kaj to sedaj sploh naredi, da bom vedel pri zagovarjanju naloge?
Sam si predstavljam, da slike, ki jih imam v tabeli "images" uredi v novi tabeli, ampak pojma nimam na kak način.
Zgodovina sprememb…
- spremenil: TheAmunraaa ()
darkolord ::
Slike v tabeli "images" uredi po vrstnem redu, s tem da kot ključ za urejanje uporabi naključno generiran Guid (globally unique identifier - npr. 393c74cf-597a-48d0-b67c-f9cebc57ac4f).
Ekvivalentno bi bilo takole:
Samo je pač ena vrstica več :)
Union pa nardi unijo.
Ekvivalentno bi bilo takole:
var rnd = new Random(); images = images.Union(images).OrderBy(i => rnd.Next()).ToArray();
Samo je pač ena vrstica več :)
Union pa nardi unijo.
TheAmunraaa ::
Hvala tebi in vsem drugim, ki ste mi pomagali!
Bom kar pustil Guid bo profesor bolj navdušen
Lep pozdrav!
Bom kar pustil Guid bo profesor bolj navdušen
Lep pozdrav!
TheAmunraaa ::
Mojim težavam pa ni in ni konca in namesto, da bi že prej vprašal tole sem se sam mučil do 1.00 zjutraj...
Sedaj imam problem, ker ne vem kako bi preveril, če je v npr. picturebox1 enaka slika kot v picturebox2, tako da bom dobil par, ki bo prikazan do konca igre v en label pa mi bo nabilo 5 točk.
Sedaj imam problem, ker ne vem kako bi preveril, če je v npr. picturebox1 enaka slika kot v picturebox2, tako da bom dobil par, ki bo prikazan do konca igre v en label pa mi bo nabilo 5 točk.
TheAmunraaa ::
To sem že poskusil, ampak mi ne dela.
Problem je da imam preko picturebox-ov panele na katere klikam in se ti odpirajo. Ne znam narediti, da bi program vedel, da če kliknem panel1, da bi mogoče dobil vrednost pictureboxa.
Problem je da imam preko picturebox-ov panele na katere klikam in se ti odpirajo. Ne znam narediti, da bi program vedel, da če kliknem panel1, da bi mogoče dobil vrednost pictureboxa.
stb ::
Operator == primerja če gre za isto instanco objekta.
Probaj z
ki naj bi primerjal vsebino, ne instanc.
Probaj z
if (pictureBox1.BackgroundImage.Equals(pictureBox2.BackgroundImage))
ki naj bi primerjal vsebino, ne instanc.
TheAmunraaa ::
Ne dela
Ne vem na kakšen način bi še lahko primerjal slike v picturebox-ih.
Ali se da narediti, da bi lahko eno spremenljivko pripel panelu in bi potem kar s paneli preverjal enakost?
Spremenljivke pa bi panelom pripenjal tako, kot dajem vrednosti picturebox-om(če je ima picturebox1 sliko "img4" bi v panelu1 pisalo "img4")
Ne vem na kakšen način bi še lahko primerjal slike v picturebox-ih.
Ali se da narediti, da bi lahko eno spremenljivko pripel panelu in bi potem kar s paneli preverjal enakost?
Spremenljivke pa bi panelom pripenjal tako, kot dajem vrednosti picturebox-om(če je ima picturebox1 sliko "img4" bi v panelu1 pisalo "img4")
TheAmunraaa ::
TheAmunraaa ::
Evo! Projekt je narejen
Je prišel na idejo da bi primerjal slike po širini in sicer sem 3 slike povečal za 1, 2 in 3 pixle, tako, da se razlikujejo.
Je prišel na idejo da bi primerjal slike po širini in sicer sem 3 slike povečal za 1, 2 in 3 pixle, tako, da se razlikujejo.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [c#] ukaz radirkaOddelek: Programiranje | 1118 (911) | japol |
» | [c#] shrani text, tabele, slikeOddelek: Programiranje | 1524 (1130) | klemen93 |
» | [c#] picturebox, slika na slikoOddelek: Programiranje | 1089 (899) | japol |
» | [Visual C#] "Format" shranjevanja?Oddelek: Programiranje | 977 (762) | c0dehunter |
» | C# metodaOddelek: Programiranje | 1984 (1855) | davaman |