Pexeso Boti – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Pexeso Boti – C / C++ – Fórum – Programujte.comPexeso Boti – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Kubas1290
Newbie
2. 4. 2016   #1
-
0
-

Ahoj mám problém a prosím o radu

Mám pexeso a do něj chci přidat boty resp.

Mám na pozadí (ve visual studiu c#) (na formu) 38 pictureboxu(tudiž 18 párů)

a já bych potřeboval ,aby když hraje "Bot" ,tak aby automaticky kliknul(otočil) na náhodný pictureBox(z těch 38) 

Představoval bych si ten kod nějak s Random:

 if(hrac == 1 && hracove[1] == 1)
                {
                    Random PC1 = new Random();
                    int Obrazek = PC1.Next(2, 38+1);
                    pictureBox7.Controls.Click();

}

Jen bych opravdu potřeboval příkaz ,kterým bych v kodu by kliknul na náhodný picturebox(ze 38)

Díky moc za rady :-))

Nahlásit jako SPAM
IP: 37.48.35.–
Reklama
Reklama
BDS+2
Věrný člen
2. 4. 2016   #2
-
+1
-
Zajímavé

#1 Kubas129

  1. Tenhle příspěvek měl být v sekci .Net.
  2. řešit tak, jak to děláš je nešťastné, já bych to všechno kreslil (třeba na panel), tak bych mohl k obrázkům pohodlně přistupovat a "randomovat" pouze index, protože bych je měl uložené v List

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
Kubas1290
Newbie
2. 4. 2016   #3
-
0
-

#2 BDS
moc díky za odpověd :-)

No já mám těch 38 pictureboxu na formu v panelu a u nich mám nastavené ,jen pozadí ,ale jinak všechny ty obrázky mám v listu ono je to celkem složitý vysvětlovat :D

Ale opravdu si nevím rady ,jak vygenerovat nějaké číslo a poté se k tomu číslu přiřadil nějaký obrázek v listu a aby se ten obrázek zobrazil na správném pictureBoxu.

http://uloz.to/xvyRy3Sm/pexeso-ve-c-motiv-starwars-d-rar

Heslo: 12345

Nahlásit jako SPAM
IP: 37.48.32.–
BDS+2
Věrný člen
2. 4. 2016   #4
-
0
-

proč to pexeso děláš ve více než jednom boxu nechápu. Přece je daleko snazší to dělat v jednom boxu. Pomocí random zvolit obrázek a ten nakreslit přes Graphics DrawImage.

Pokud to chceš dělat složitě a škaredě:

http://programujte.com/forum/vlakno/30858-picturebox-click/#p209551

jen si ošetři otáčení stejné karty 2x

ps. nechce se mě stahovat soubor >400 MB (navíc ze stránek s omezením rychlosti)

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
Kubas1290
Newbie
3. 4. 2016   #5
-
0
-

#4 BDS
Díky moc za radu :-)

ale stejně jsem to moc nepochopil :D ,že to jenom žejo vybere ten picturebox ,ale poté se neprovede ta akce "otočení" načtení toho obrázku v tom určeným pictureboxu.

Ps. já to mám v tom hl. kodu ty karty takto:

na Formu v panelu1 mám 20 pictureboxu a každý z nich odkazuje na událost na ten první.

Pak mám zamíchání a rozdání karet:

Připojen obrázek.

no a poté následuje ta metoda toho pictureBox1_Click

Připojen obrázek.

No a já bych potřeboval ,aby proti mě hrál počítač :D (místo toho hráče 2)

btw ten projekt není ,tak úplně můj stáhl jsem ho někde na netu a dost jsem se z něj inspitoval ,takže v tom projektu co dělám já mám téměř to samí ,akorát tam mám 4 hráče a místo toho Imagelistu na formu mám já list z obrázky a přidávám je přímo v tom kodu a mám tam 38 karet a ten první .tag jsem nahradil listem.

ale jinak to mám +- stejný jako v tomto projektu :)

Nahlásit jako SPAM
IP: 37.48.41.–
BDS+2
Věrný člen
3. 4. 2016   #6
-
0
-

nějak nechápu s čím máš problém. Jen vidím, že Ti to vypisuje 25 chyb, a ty jsi tu dal náhled části "bezchybného" kódu.

ps, když chceš někde uvádět pouze náhled je dobré zapnout nastavení:

Tools->Options->Text Editor->All Languages->General->Line Numbers

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
Kubas1290
Newbie
3. 4. 2016   #7
-
0
-

#6 BDS
těch chyb si nevšímej:D

jen jsem ten kod zkratil na to nejhlavnější :D

stáhl jsem to odsud:

https://drive.google.com/file/d/0B-ZvSISvAgICODllMjhmYjUtZTQyOS00YzA1LTgyMTItZGU2OWIxYzgwZGRj/view?ddrp=1&hl=cs#

ale vše chápu +- chápu ,jen nevím ,jak tam udělat to aby druhý hráč byl počítač a hrál proti mě

(no počítač spíše ,jen nějak jen s tím randomem ,jen aby se otočili náhodné 2 obrázky ,když je na řadě)

s tím si opravdu nevím rady včera jsem nad tím ztrávil téměř celý den :(

Nahlásit jako SPAM
IP: 37.48.41.–
BDS+2
Věrný člen
3. 4. 2016   #8
-
0
-

tady to máš tak narychlo upravené ve VS 2013:

http://leteckaposta.cz/550672172

(mimochodem ten počítač bude vždy hrát jak úplný pitomec, pokud mu nevytvoříš nějakou inteligenci)

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
Kubas1290
Newbie
3. 4. 2016   #9
-
0
-

#8 BDS
Díky moc :-)

Tohle jsem přesně potřeboval :D

Kdyby si někdy něco chtěl ,tak napiš :-)

btw jen ,tak na okraj

1.) Proč si založil kvůli té jedné metodě "PcPlay();" nový form

2.) Kdybych chtěl třeba udělat 3 počítačový hráče ,tak to bude stejné ,akorát ten kod skopíruji a trošku ho přepíšu a ještě ošetřím podmínkami ,že jo? 

Nahlásit jako SPAM
IP: 37.48.47.–
BDS+2
Věrný člen
3. 4. 2016   #10
-
0
-

#9 Kubas129
1. nevytvořil jsem nový form, pouze jsem to dal do dalšího souboru, ať nemusíš zkoumat co jsem tam všechno změnil. (pokud je třída partial, může se to tak dělat, ale nemusí)

2. jo

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
Kubas1290
Newbie
3. 4. 2016   #11
-
0
-

#10 BDS
dík :-)

hele prosím ještě ,kde si deklaroval(založil:D) tuhle proměnou?

bPcEnemy

Nahlásit jako SPAM
IP: 37.48.47.–
BDS+2
Věrný člen
3. 4. 2016   #12
-
0
-

#11 Kubas129
do menu jsem přidal položku

(používej F12)

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
Kubas1290
Newbie
3. 4. 2016   #13
-
0
-

#12 BDS
menu?Do jakýho menu jsi to dal?:D

btw co je tohle na tom designeru

     private System.Windows.Forms.ToolStripMenuItem bPcEnemy;

-

please :D

Nahlásit jako SPAM
IP: 37.48.47.–
BDS+2
Věrný člen
3. 4. 2016   #14
-
0
-
Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
Kubas1290
Newbie
5. 4. 2016   #15
-
0
-

#14 BDS
Ahoj to jsem zase já :D

Hele pomohl bys mi prosím ještě s tím pexesem?

Já když jsem skopíroval ten tvůj kod a trošku ho pozměnil (místo picturebox1 jsem dal picturebox2 a tu podmínku if(pc.checked)PcPlay jsem odstranil[tu metodu jsem nechal]

Ale tedka mám problém s tím ,že když zapnu hru ,tak když kliknu na náhodný picturebox ,tak se otočí ale hned na to se začnou otáčet ,kvůli té metodě PcPlay() další pictureboxy a nejdou vůbec zastavit.

= Vyberu jen jeden picturebox a hned se spustí ta metoda PcPlay() a nejde zastavit :(

zdá se mi to jako nekonečný cyklus :D

----------

Podíval bys ses mi prosím na ten kod?  předem moc Díky :-) [Je to jen ten hlavní kod ,to co je zazelenalé to s tím hraním karet nesouvisí  :D]

http://leteckaposta.cz/756218124

Nahlásit jako SPAM
IP: 37.48.4.–
q
~ Anonymní uživatel
219 příspěvků
5. 4. 2016   #16
-
0
-

Přepínáš hráče při každém kliku, takže PcPlay dvakrát klikne a zase je na řadě.

Znáš breakpointy a krokování? Mrkni na to, pak takové věci odladíš snadněji.

Nahlásit jako SPAM
IP: 213.211.51.–
kubas129
~ Anonymní uživatel
52 příspěvků
5. 4. 2016   #17
-
0
-

#16 q
jakš tak jo ,ale já tam v tom projektu mám více formulářů ,takže na to krokování vidím jen formulář 1 a pak se jen ukážou takový 3 řádky příkazů v main.

        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

ale i tak pokud přepínám hráče při každém kliku ,tak se museli při každém kliku přeci přepínat i u toho původního projektu ,jak jsi mi ho upravil a přidal jsi toho pc hrace ,ale tam to funkuje úplně bezvadně a také tam nemáš nikde nemáš ošetřený to kliknutí (alespon ho tam nikde nevidím :D).

Navíc vždyt  ta metoda PcPlay(); Přeci proběhne jen jednou a teprve když proběhne ,tak se ta hodnota hrač změní opět na tu původní hodnotu.Zkoušel jsem i cyklus ,ale moc to nechápu proč to přepíná hráče při každém kliku vždy to má přeci přepnout hráče až po druhém kliknutí na picturebox --> to si tam mám založi proměnou ,která bude sčítat kliknutí a teprve až když se kliknutí bude rovnat 2 ,tak se hráč přepne?Pokud ano ,tak jaktože to v tom původním projektu není a funkuje to bezproblému? :D

Dík moc 

Nahlásit jako SPAM
IP: 37.48.2.–
q
~ Anonymní uživatel
219 příspěvků
5. 4. 2016   #18
-
0
-

#17 kubas129
Já nejsem BDS, jen jsem se do toho teď vložil :-)

Původně se hráč přepínal pokud byly odkryty špatné karty. Ty jsi to z toho else přesunul ven, takže se přepínají při každém kliku.

Nahlásit jako SPAM
IP: 213.211.51.–
kubas129
~ Anonymní uživatel
52 příspěvků
5. 4. 2016   #19
-
0
-

#18 q
aha toho jsem si nevšiml :(

a jak to ted opravit ,tak aby to konečně šlo ,tak jak by to mělo jít?

Dík moc

Nahlásit jako SPAM
IP: 37.48.2.–
BDS+2
Věrný člen
5. 4. 2016   #20
-
0
-

#19 kubas129

Zatím ti můžu poradit s tím breakpointem:

klikni na první řádek s kódem v metotě pictureBox_Click a stiskni F9 (vytvoří se breakpoint), pak F5 a hraj. 

jakmile se hra pozastaví (narazí na breakpoint) pokračuj mačkáním F11 a pozoruj jak aplikace postupuje.

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
BDS+2
Věrný člen
5. 4. 2016   #21
-
0
-

#19 kubas129
já se v tom kódu trochu ztrácím (většina věcí je tam zakomentovaných - celkově je to dost hnusný kód), ale myslím, že tam nepřipočítáváš klik (vybrana_pocet++

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
kubas129
~ Anonymní uživatel
52 příspěvků
5. 4. 2016   #22
-
0
-

Díky za rady :-)

Zkusil jsem vše co jsi mi napsal nicméně stále mi to nefunkuje :( a vyzkoušel jsem i to krokování nicméně vůbec nevím v čem je chyba :(   )

Trošku jsem ten kod upravil a vybral jsem z něj to nejpodstatnější ,nepodíval bys ses mi prosím ještě jednou na ten kod ? (jen bych potřeboval tam něco upravit ,aby hráč mohl otočit 2 karty a pak aby hrál počítač a otočil 2 karty a poté aby opět hrál hráč...)

Z těch 500 Mb jsem udělal jen 16Mb :)

http://leteckaposta.cz/571787964

Předem moc moc díky :)

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

Projdi si ty změny oproti funkční verzi od BDS. Moc jich tam nemáš.

Původně se hráč přepínal pokud byly odkryty špatné karty. Ty jsi to z toho else přesunul ven, takže se přepínají při každém kliku.

Dej to zpátky do toho else :-)

Nahlásit jako SPAM
IP: 213.211.51.–
Kubas129
~ Anonymní uživatel
52 příspěvků
6. 4. 2016   #24
-
0
-

Už jsem asi přišel ,kde je chyba u toho hráče bych asi potřeboval nějakou podmínku ,která by počítala počet kliknutí na ten picturebox ,jelikož u toho pc hráče si myslím že když se spustí ta metoda pcplay() tak že se otočí 2 pictureboxy poté se přepne na hrace ale jelikož tam není žádná pdmínka která ho na té podmínce přinutí počkat až hráč otočí 2 pictureboxy ,tak se opět přepne na toho pc hráče.

Neví někdo prosím co stím?

Nahlásit jako SPAM
IP: 193.85.203.–
BDS+2
Věrný člen
6. 4. 2016   #25
-
0
-

#24 Kubas129 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using System.Media;
namespace Pexeso
{
    public partial class Form6 : Form
    {
        Random random = new Random();
        PictureBox prvnioznaceny;
        public Form6()
        {
            InitializeComponent();
        }
        List<Image> Ikonky = new List<Image>();

        int predchozi = -1;
        int pokrok = 0;
        int[] body = new int[4];
        int hrac = 0;

        private void Form6_Load(object sender, EventArgs e)
        {
            //tady to nech jak máš
        }
        private void pictureBox2_Click(object sender, EventArgs e)
        {
            PictureBox obrazek = (PictureBox)sender;
            
            int aktualni = (int)obrazek.Tag;
            obrazek.Image = Ikonky[aktualni];
            obrazek.Refresh();
            Thread.Sleep(600);

            if (predchozi < 0)
            {
                prvnioznaceny = obrazek;
                predchozi = aktualni;
            }
            else
            {
                if (aktualni == predchozi)
                {
                    body[hrac]++;
                    pokrok++;
                    prvnioznaceny.Enabled = false;
                    obrazek.Enabled = false;
                    //tady aktualizuješ label aktuálního hráče
                }
                else
                {
                    prvnioznaceny.Image = Ikonky[18];
                    obrazek.Image = Ikonky[18];
                    Application.DoEvents();
                    NextPlayer();
                }
                predchozi = -1;
            }


            if (pokrok > 17)
            {
                //tady si uděláš vyhodnocení hry (vyhlášení vítěze)
            }
            else
            {
                if (hrac > 0) PcPlay();
            }

        }

        private void NextPlayer()
        {
            hrac++;
            if (hrac == body.Length) hrac = 0;
            /*
            //tady si označíš a vybarvíš labely
            switch(hrac)
            {

            }
            */
        }

        private PictureBox VyberNahodnou()
        {
            List<PictureBox> pics = new List<PictureBox>();
            foreach (Control c in panel1.Controls)
            {
                if (c is PictureBox && c.Enabled)
                {
                    pics.Add((PictureBox)c);
                }
            }
            if (pics.Count == 0) return null;

            return pics[random.Next(0, pics.Count)];
        }

        private void PcPlay()
        {
            PictureBox box1 = VyberNahodnou();
            pictureBox2_Click(box1, null);
        }
    }

}

doufám, že teď si to už dokážeš dodělat

Nahlásit jako SPAM
IP: 94.113.253.–
Visual Studio C/C#/C++
(pouze samouk)
kubas129
~ Anonymní uživatel
52 příspěvků
6. 4. 2016   #26
-
0
-

#25 BDS
Díky moc :-) ale ,když zapnu program kliknu na jakýkoli picturebox vyskoší mi error :(

Neví někdo prosím co s tím? Díky moc

Připojen obrázek.

Nahlásit jako SPAM
IP: 37.48.18.–
BDS+2
Věrný člen
6. 4. 2016   #27
-
0
-

pro jistotu ti to sem dám komplet: 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using System.Media;
namespace Pexeso
{
    public partial class Form6 : Form
    {
        Random random = new Random();
        PictureBox prvnioznaceny;
        public Form6()
        {
            InitializeComponent();
        }
        List<Image> Ikonky = new List<Image>();
        //private byte Pomoc = 0;
        int predchozi = -1;
        int pokrok = 0;
        int[] body = new int[4];
        int hrac = 0;

        private void Form6_Load(object sender, EventArgs e)
        {
            List<int> List = new List<int>();
            Random nahodne = new Random();
            int pocet_karet = 0;
            byte[] dvojice = new byte[18];

            while (pocet_karet < 36)
            {
                int karta = nahodne.Next(0, 18);
                if ((dvojice[karta] == 0) || (dvojice[karta] == 1))
                {
                    List.Add(karta);
                    dvojice[karta]++;
                    pocet_karet++;
                }
            }
            //MessageBox.Show(karty);
            for (int i = 0; i < 36; i++)
            {
                panel1.Controls[i].Tag = int.Parse(List[i].ToString());
            }
            Ikonky.Add(Image.FromFile(@"Ikonky\1.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\2.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\3.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\4.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\5.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\6.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\7.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\8.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\9.jpeg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\10.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\11.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\12.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\13.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\14.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\15.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\16.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\17.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\18.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\19.png"));
            predchozi = -1;
        }
        private void pictureBox2_Click(object sender, EventArgs e)
        {
            PictureBox obrazek = (PictureBox)sender;
            
            int aktualni = (int)obrazek.Tag;
            obrazek.Image = Ikonky[aktualni];
            obrazek.Refresh();
            Thread.Sleep(600);

            if (predchozi < 0)
            {
                prvnioznaceny = obrazek;
                predchozi = aktualni;
            }
            else
            {
                if (aktualni == predchozi)
                {
                    body[hrac]++;
                    pokrok++;
                    prvnioznaceny.Enabled = false;
                    obrazek.Enabled = false;
                    //tady aktualizuješ label aktuálního hráče
                }
                else
                {
                    prvnioznaceny.Image = Ikonky[18];
                    obrazek.Image = Ikonky[18];
                    Application.DoEvents();
                    NextPlayer();
                }
                predchozi = -1;
            }


            if (pokrok > 17)
            {
                //tady si uděláš vyhodnocení hry (vyhlášení vítěze)
            }
            else
            {
                if (hrac > 0) PcPlay();
            }

        }

        private void NextPlayer()
        {
            hrac++;
            if (hrac == body.Length) hrac = 0;
            /*
            //tady si označíš a vybarvíš labely
            switch(hrac)
            {

            }
            */
        }

        private PictureBox VyberNahodnou()
        {
            List<PictureBox> pics = new List<PictureBox>();
            foreach (Control c in panel1.Controls)
            {
                if (c is PictureBox && c.Enabled)
                {
                    pics.Add((PictureBox)c);
                }
            }
            if (pics.Count == 0) return null;

            return pics[random.Next(0, pics.Count)];
        }

        private void PcPlay()
        {
            PictureBox box1 = VyberNahodnou();
            pictureBox2_Click(box1, null);
        }
    }
}

když tak ti to večer předělám celé

Nahlásit jako SPAM
IP: 94.113.253.–
Visual Studio C/C#/C++
(pouze samouk)
kubas129
~ Anonymní uživatel
52 příspěvků
6. 4. 2016   #28
-
0
-

ahoj

díky moc za kod :-)

ale bohužel nefunkuje ,tak úplně dobře :(

tedka se sice neotáčejí pořád ,ale otočí se 4 :(

Nahlásit jako SPAM
IP: 37.48.7.–
BDS+2
Věrný člen
6. 4. 2016   #29
-
0
-

mimochodem v mém předchozím kódu mám chybu (neošetřil jsem duplicitní výběr karty)

Tady to máš ošetřené + hraje jen pc. 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using System.Media;
namespace Pexeso
{
    public partial class Form6 : Form
    {
        Random random = new Random();
        PictureBox prvnioznaceny;
        bool stop = false; //<--
        int predchozi = -1;
        int pokrok = 0;
        int[] body = new int[4];
        int hrac = 0;

        List<Image> Ikonky = new List<Image>();

        public Form6()
        {
            InitializeComponent();
        }

        private void pictureBox2_Click(object sender, EventArgs e)
        {
            if (stop) return;
            PictureBox obrazek = (PictureBox)sender;
            
            int aktualni = (int)obrazek.Tag;
            obrazek.Image = Ikonky[aktualni];
            obrazek.Refresh();
            Thread.Sleep(600);

            if (predchozi < 0)
            {
                prvnioznaceny = obrazek;
                predchozi = aktualni;
                prvnioznaceny.Enabled = false;  //<--
            }
            else
            {
                if (aktualni == predchozi)
                {
                    body[hrac]++;
                    pokrok++;
                    prvnioznaceny.Enabled = false;
                    obrazek.Enabled = false;
                    predchozi = -1;
                    //tady aktualizuješ label aktuálního hráče
                }
                else
                {
                    prvnioznaceny.Enabled = true; //<--
                    prvnioznaceny.Image = Ikonky[18];
                    obrazek.Image = Ikonky[18];
                    predchozi = -1;
                    Application.DoEvents();
                    NextPlayer();
                }
            }


            if (pokrok > 17)
            {
                //tady si uděláš vyhodnocení hry (vyhlášení vítěze)
            }
            else
            {
                //if (hrac > 0) PcPlay(); //<--
                PcPlay(); //<--
            }

        }

        private void NextPlayer()
        {
            hrac++;
            if (hrac == body.Length) hrac = 0;
            /*
            //tady si označíš a vybarvíš labely
            switch(hrac)
            {

            }
            */
        }

        private PictureBox VyberNahodnou()
        {
            List<PictureBox> pics = new List<PictureBox>();
            foreach (Control c in panel1.Controls)
            {
                if (c is PictureBox && c.Enabled)
                {
                    pics.Add((PictureBox)c);
                }
            }
            if (pics.Count == 0) return null;

            return pics[random.Next(0, pics.Count)];
        }

        private void PcPlay()
        {
            PictureBox box1 = VyberNahodnou();
            pictureBox2_Click(box1, null);
        }
        //všimni si, že jsem load nahradil shown !!!!
        private void Form6_Shown(object sender, EventArgs e) //<--
        {
            List<int> List = new List<int>();
            Random nahodne = new Random();
            int pocet_karet = 0;
            byte[] dvojice = new byte[18];

            while (pocet_karet < 36)
            {
                int karta = nahodne.Next(0, 18);
                if ((dvojice[karta] == 0) || (dvojice[karta] == 1))
                {
                    List.Add(karta);
                    dvojice[karta]++;
                    pocet_karet++;
                }
            }
            //MessageBox.Show(karty);
            for (int i = 0; i < 36; i++)
            {
                panel1.Controls[i].Tag = List[i];
            }

            Ikonky.Add(Image.FromFile(@"Ikonky\1.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\2.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\3.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\4.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\5.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\6.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\7.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\8.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\9.jpeg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\10.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\11.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\12.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\13.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\14.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\15.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\16.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\17.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\18.jpg"));
            Ikonky.Add(Image.FromFile(@"Ikonky\19.png"));

            predchozi = -1;
            Application.DoEvents(); //<--
            PcPlay(); //<--
        }

        private void Form6_FormClosing(object sender, FormClosingEventArgs e)
        {
            stop = true; //<--
            Application.DoEvents();
        }
    }
}

změny, které jsem provedl jsem označil <--

ps, na to abych v tomto prase kódu vylepšoval další věci už kašlu. Tak jak je to řešené, se to nedá.. Od začátku jsem ti psal, že ta koncepce je nic.

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
kubas129
~ Anonymní uživatel
52 příspěvků
6. 4. 2016   #30
-
0
-

ahoj,

díky opravdu moc za ten kod :-)

jen ještě mám takový maličký problém s jedním errorem co mi to pořád píše ,neporadil bys mi ještě prosím  čím nahradit ten .tag?Že mě to tam hází chybu null referenceException a nevím proč :(

Připojen obrázek.

Dík moc :-)

Nahlásit jako SPAM
IP: 37.48.7.–
kubas129
~ Anonymní uživatel
52 příspěvků
6. 4. 2016   #31
-
0
-

Btw mohl bych ještě k tomu takový dotaz?

Čím se liší shown od load?

Konkrétně myslím tenhle příkaz:

        //všimni si, že jsem load nahradil shown !!!!
        private void Form6_Shown(object sender, EventArgs e) //<--

chápu to dobře ,že shown = ukázat a load = načíst ?

Nahlásit jako SPAM
IP: 37.48.7.–
BDS+2
Věrný člen
6. 4. 2016   #32
-
0
-

#30 kubas129
Kdy to hodí chybu?

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
BDS+2
Věrný člen
6. 4. 2016   #33
-
0
-

#31 kubas129
když chceš aby hrál jen pc, tak jsem to změnil. Jinak by se spustila hra a až potom se zobrazilo okno.

Rozdíl mezi load a shown je i v tom, že se load zavolá pokaždé když se načítá form a shown pouze při 1. zobrazení formu

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
kubas129
~ Anonymní uživatel
52 příspěvků
6. 4. 2016   #34
-
0
-

#32 BDS
Když kliknu na jakýkoliv z těch 38 pictureboxu ,které jsou umístěny na panel1

Nahlásit jako SPAM
IP: 37.48.7.–
BDS+2
Věrný člen
6. 4. 2016   #35
-
0
-

mimochodem nechápu jednu věc. Proč máš zdrojové obrázky karet v 1600x1200 px, když je zobrazuješ v boxu 50x50 px???

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
kubas129
~ Anonymní uživatel
52 příspěvků
6. 4. 2016   #36
-
0
-

#33 BDS
aha díky :-)

btw jde to kdyžtak přepínat ,pokud budu chtít třeba někdy v budoucnu ,aby si hráč mohl v jiném formu v comboboxu vybrat ,jestli chce hrát proti člověku nebo proti pc ,tak dalo by se to kdyžtak za chodu programu nějak přepnout ,nebo bych si musel založit nový konstruktor s load?

Dík moc

Nahlásit jako SPAM
IP: 37.48.7.–
BDS+2
Věrný člen
6. 4. 2016   #37
-
0
-

#34 kubas129
a co jsi čekal? buď hraješ ty nebo pc!

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
kubas129
~ Anonymní uživatel
52 příspěvků
6. 4. 2016   #38
-
0
-

#35 BDS
Jelikož když jsem tam dal menší obrázky určený pro tu velikost ,tak oni se pak šíleně rozmazali :(

a já jsem nevěděl jak je nastavit tak aby se nerozmazávali (když byli v listu)

Nahlásit jako SPAM
IP: 37.48.7.–
kubas129
~ Anonymní uživatel
52 příspěvků
6. 4. 2016   #39
-
0
-

#37 BDS
aha dík za info :)

A například pokud budu mít 2 hráče a jednoho pc

Tak pořád mi budou na to stačit jenom dva konstruktory že jo? :-)

Nahlásit jako SPAM
IP: 37.48.7.–
BDS+2
Věrný člen
6. 4. 2016   #40
-
0
-

#38 kubas129
prosím tě vem si nějaký grafický editor a normálně ty obrázky ořízni na poměr stran jaký potřebuješ a zmenši na rozměr jaký chceš zobrazovat (50x50)

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
kubas129
~ Anonymní uživatel
52 příspěvků
6. 4. 2016   #41
-
0
-

#40 BDS

#37 BDS
aha takže to píše error jen kvůli té velikosti obrázků?

jsem myslel ,že ty nic neovlivnují ,že když se tam zvolí strench ,tak se jen zmenší :-)

Nahlásit jako SPAM
IP: 37.48.7.–
BDS+2
Věrný člen
6. 4. 2016   #42
-
0
-

#41 kubas129
ne tu chybu to vyhazuje protože ten tag je null.

počkej zhruba tak hodinu, udělám nějaké jinak řešené pexeso, na ukázku.. Na tom to snad pochopíš

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
kubas129
~ Anonymní uživatel
52 příspěvků
6. 4. 2016   #43
-
0
-

#42 BDS
Moc moc díky :-)

Nahlásit jako SPAM
IP: 37.48.7.–
BDS+2
Věrný člen
6. 4. 2016   #44
-
0
-

#43 kubas129

tento projekt jsem dostatečně netestoval, a tak doufám, že tam nemám chybu:

http://www59.zippyshare.com/v/JhCONkWw/file.html

máš zde možnost zapojit 2 - 4 hráče a pro každého hráče volbu, zda bude hrát počítač, nebo člověk

(já mám obrázky v ImageListu, ty si je dej klidně tak jak si to měl.. - jen s tím, že já mám zadní stranu na indexu 0)

přikládám i kód:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;

namespace SWPexeso
{
    public partial class Form1 : Form
    {
        private const int players_count_max = 4; //pro jednoduchost jsem nastavil 4 hráče jako maximum
        private const int card_distance = 52; //muj rozestup karet
        bool click_on_stop, playing;
        int last_index, current_player, players_count, click_count, min, sec, completed;
        int[] player = new int[players_count_max];
        bool[] player_ai = new bool[players_count_max];

        Random random = new Random();
        Card[] cards = new Card[20];
                
        public Form1()
        {
            InitializeComponent();
        }

        public void StopGame()
        {
            click_on_stop = true;
            Application.DoEvents();
            GameTimer.Stop();
        }

        //překreslení celého plátna
        private void Canvas_Paint(object sender, PaintEventArgs e)
        {
            for (int x = 0; x < 5; x++)
            {
                for (int y = 0; y < 4; y++)
                {
                    int index = (y * 5) + x;
                    int imageindex = (cards[index].covered) ? 0 : cards[index].picture;
                    e.Graphics.DrawImage(cardImages.Images[imageindex], (x * card_distance) + 2, (y * card_distance) + 2);
                }
            }
        }
        //výběr myší
        private void Canvas_MouseDown(object sender, MouseEventArgs e)
        {
            if (player_ai[current_player] || !playing) return; //když hraje pc, nebo se nehraje, tak nic..
            else //pokud nehraje aktuálně počítač:
            {   //výpočet karty na kterou bylo klepnuto
                int x = e.Location.X / card_distance;
                int y = e.Location.Y / card_distance;
                if (x < 5 && y < 4)
                {
                    int index = (y * 5) + x;
                    ClickOn(index);
                }
            }
        }
        //překreslení pouze definované karty
        private void Repaint(int index)
        {
            int y = index / 5;
            int x = index - (y * 5);
            try
            {
                Graphics g = Canvas.CreateGraphics();
                g.DrawImage(cardImages.Images[cards[index].picture], (x * card_distance) + 2, (y * card_distance) + 2);
            }
            catch { }
        }
        /// <summary>
        /// událost po kliknutí na kartu
        /// </summary>
        /// <param name="index">index karty na kterou bylo kliknuto</param>
        private void ClickOn(int index)
        {
            if (index != last_index && cards[index].enabled && cards[index].covered)
            {
                cards[index].covered = false; //otočit kartu
                click_count++;  //připočítat otočnou..
                Repaint(index); //překreslit kartu
                Thread.Sleep(600); //pozastavit, aby se balo postřehnout, která karta byla otočena

                if (click_count > 1) //pokud jsou obě karty otočeny
                {
                    if (cards[last_index].picture == cards[index].picture) //pokud se shodují
                    {
                        player[current_player]++; //připočítat body aktivnímu hráči
                        cards[index].enabled = false; //uzamčít kartu 1
                        cards[last_index].enabled = false; //uzamčít kartu 2
                        completed++;
                    }
                    else //karty nejsou shodné
                    {
                        cards[index].covered = true; //otočit zpět kartu 1
                        cards[last_index].covered = true; //otočit zpět kartu 2
                        Repaint(index); //překreslit kartu
                        Repaint(last_index); //překreslit kartu
                        NextPlayer(); //přepnout hráče
                    }
                    click_count = 0; //vymazat počet otočených karet
                    last_index = -1; //vymazat paměť, která karta byla otočena jako první
                }
                else //je otočena pouze jedna karta
                {
                    last_index = index; //zapamatovat si, která karta je otočena jako první
                }

                switch (current_player) //zobrazit aktuální bodový stav
                {
                    case 0: laPlayer1.Text = player[0].ToString(); break;
                    case 1: laPlayer2.Text = player[1].ToString(); break;
                    case 2: laPlayer3.Text = player[2].ToString(); break;
                    case 3: laPlayer4.Text = player[3].ToString(); break;
                }


                if (completed == 10) //pokud byly všechny karty otočeny
                {
                    GameTimer.Stop(); //zastavit měření času
                    try
                    {
                        System.Media.SoundPlayer snd = new System.Media.SoundPlayer(@"C:\Windows\Media\tada.wav");
                        snd.Play(); //můžeme přehrát nějaký zvuk
                    }
                    catch { }
                    playing = false;
                    //výpis výsledků:
                    if (player[0] == player[1] && player[2] == player[3] && player[1] == player[2]) MessageBox.Show("Remíza", "Pexeso info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    else
                    {
                        int winner = 0;
                        for (int i = 1; i < players_count; i++)
                        {
                            if (player[i] > player[winner]) winner = i;
                        }
                        int winner_num = winner + 1;
                        string msg = string.Format("Vítězem je hráč {0} se ziskem {1} bodů", winner_num, player[winner]);
                        MessageBox.Show(msg, "Pexeso info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else //pokud jsou ještě nějaké neotočené karty
                {
                    if (click_on_stop) playing = false;
                    else
                    {
                        if (player_ai[current_player]) ClickOn(NextRandom(last_index)); //pokud aktuálně hraje počítač, tak otočí nějakou kartu
                    }
                }
            }
        }

        /// <summary>
        /// výběr náhodné karty (pro AI)
        /// </summary>
        /// <param name="ignore">index již otočené karty</param>
        /// <returns></returns>
        private int NextRandom(int ignore)
        {
            Application.DoEvents();
            int r;
            while (true)
            {
                r = random.Next(0, 20);
                if (r != ignore && cards[r].covered && cards[r].enabled) return r;
            }
        }
        /// <summary>
        /// přepnout hráče
        /// </summary>
        private void NextPlayer()
        {
            current_player++;
            if (current_player == players_count) current_player = 0;

            switch (current_player)
            {
                case 0:
                    {
                        laPlayer1.ForeColor = Color.YellowGreen;
                        laPlayer2.ForeColor = Color.Gray;
                        laPlayer3.ForeColor = Color.Gray;
                        laPlayer4.ForeColor = Color.Gray;
                        break;
                    }
                case 1:
                    {
                        laPlayer1.ForeColor = Color.Gray;
                        laPlayer2.ForeColor = Color.YellowGreen;
                        laPlayer3.ForeColor = Color.Gray;
                        laPlayer4.ForeColor = Color.Gray;
                        break;
                    }
                case 2:
                    {
                        laPlayer1.ForeColor = Color.Gray;
                        laPlayer2.ForeColor = Color.Gray;
                        laPlayer3.ForeColor = Color.YellowGreen;
                        laPlayer4.ForeColor = Color.Gray;
                        break;
                    }
                case 3:
                    {
                        laPlayer1.ForeColor = Color.Gray;
                        laPlayer2.ForeColor = Color.Gray;
                        laPlayer3.ForeColor = Color.Gray;
                        laPlayer4.ForeColor = Color.YellowGreen;
                        break;
                    }
            }

            Refresh();
        }

        // čas
        private void GameTimer_Tick(object sender, EventArgs e)
        {
            if (sec == 59)
            {
                min++;
                sec = 0;
            }
            else sec++;

            laTime.Text = string.Format("{0}:{1:00}", min, sec);
        }

        /// <summary>
        /// nová hra
        /// </summary>
        private void StartNewGame(int pcount)
        {   //vynulování všeho:
            click_on_stop = true;
            playing = true;
            last_index = -1;
            player[0] = 0; //bodovy stav
            player[1] = 0; //bodovy stav
            player[2] = 0; //bodovy stav
            player[3] = 0; //bodovy stav
            player_ai[0] = ai1.Checked; //má hrát pc?
            player_ai[1] = ai2.Checked; //má hrát pc?
            player_ai[2] = ai3.Checked; //má hrát pc?
            player_ai[3] = ai4.Checked; //má hrát pc?

            click_count = 0;
            completed = 0;
            players_count = pcount;
            current_player = pcount - 1; //nastavíme na posledního hráče, aby to skočilo v NextPlayer() na 1. hráče           
            NextPlayer(); // je to tu kvůli vybarvení labelů

            min = 0; //minuty hry
            sec = 0; //sekundy hry
            //vytvořím pole všech čísel obrázků po dvou (1,1,2,2,3,3...)
            List<int> idx = new List<int>();
            for (int i = 1; i < 11; i++)
            {
                idx.Add(i);
                idx.Add(i);
            }
            //náhohně povybírám čísla z pole
            for (int i = 0; i < 20; i++)
            {
                int u = random.Next(0, idx.Count);
                cards[i].picture = idx[u];
                cards[i].enabled = true;
                cards[i].covered = true;
                idx.RemoveAt(u);
            }
            //překreslím plátno a vynuluji stav:
            Canvas.Refresh();
            laTime.Text = "0:00";
            laPlayer1.Text = "0";
            laPlayer2.Text = "0";
            laPlayer3.Text = "0";
            laPlayer4.Text = "0";
            GameTimer.Start();
            click_on_stop = false;
            if (player_ai[current_player]) ClickOn(NextRandom(last_index)); //pokud začíná pc..
        }

        private void btPlay_Click(object sender, EventArgs e)
        {
            if (playing) StopGame();
            int cnt = Convert.ToInt32(nuCount.Value);
            StartNewGame(cnt);
        }

        private void btStop_Click(object sender, EventArgs e)
        {
            if (playing) StopGame();  //zastavení hry je takové jakési nedodělané, ale nechci to dělat moc složité
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            StopGame();
        }
    }

    struct Card
    {
        public int picture;
        public bool enabled;
        public bool covered;
    }
}

seznam komponent:

        private System.Windows.Forms.NumericUpDown nuCount; //počet hráčů
        private System.Windows.Forms.Button btPlay; // tlačítko startu
        private System.Windows.Forms.CheckBox ai1;  // zapnout AI po hráče 1
        private System.Windows.Forms.CheckBox ai2;  // zapnout AI po hráče 2
        private System.Windows.Forms.CheckBox ai4;  // zapnout AI po hráče 3
        private System.Windows.Forms.CheckBox ai3;  // zapnout AI po hráče 4
        private System.Windows.Forms.Label laPlayer1; // aktuální bodový stav
        private System.Windows.Forms.Label laPlayer2; // aktuální bodový stav
        private System.Windows.Forms.Label laPlayer3; // aktuální bodový stav
        private System.Windows.Forms.Label laPlayer4; // aktuální bodový stav
        private System.Windows.Forms.Label laTime;   // aktuální čas hry
        private System.Windows.Forms.PictureBox Canvas; //box pro vykreslování
        private System.Windows.Forms.Timer GameTimer; //počítadlo času hry s intervalem 1000
        private System.Windows.Forms.ImageList cardImages; //seznam karet
        private System.Windows.Forms.Button btStop; // tlačítko zastavení hry
Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
kubas129
~ Anonymní uživatel
52 příspěvků
6. 4. 2016   #45
-
0
-

Tyjo :D To je fakt velice pěkný kod a ten desing tky dost pěkný dík

akorát nějaké příkazy moc nechápu ,že mi je prosím trošku vysvětlíš? :D

1.) Ta const  u int dělá něco ,nebo se tam dává jen proto aby programatori věděli ,že se jedná o konstantu? :D

2.)     V metodě StopGame    co znamenají tyhle příkazy? a.)  click_on_stop = true;   b.)Application.DoEvents();

3.) Vysvětlil bys mi prosím trošku tu metodu  jak je u ní komentář //překreslení celého plátna  co tam znamená to [index].covered (hlavně co covered)

4.) g.DrawImage

5.) Ten refresh co tam máš ,tak to je metoda na vynulovani (resetovani) poměnných?

ale ,fakt pěkný a přehledný kod díky :-)

Nahlásit jako SPAM
IP: 37.48.5.–
BDS+2
Věrný člen
6. 4. 2016   #46
-
0
-
  1. const se tam dává, když se chceš vyhnout tomu, že omylem změníš hodnotu za běhu programu
  2. click_on_stop nastavim na true, když si všimneš že, v metodě ClickOn kontroluji stav click_on_stop a na základě toho buď spustím, nebo nespustím další ClickOn. DoEvents nechá program udělat aktuální požadavky (tohle nevím jak vysvětlit) ono by bylo lepší do toho projektu zapojit spíš vlákna, ale to už by ses v tom úplně ztrácel. 
  3. pomocí covered kontroluji jestli je karta otočená a na základě toho vybírám obrázek
  4. Drawimage nakreslí obrázek do g na danou pozici
  5. Refresh je tam pro jistotu, aby se všechny změny na formuláři vizuálně projevily 

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
BDS+2
Věrný člen
6. 4. 2016   #47
-
0
-

ještě jsem zapomněl okomentovat strukturu Card 

    struct Card
    {
        public int picture;  // index obrázku karty
        public bool enabled; // možnost otočení karty
        public bool covered; // true: karta je otočena obrázkem dolů, false: karta je otočena obrázkem nahorů
    }

jinak, ono si s toho kódu moc velký příklad neber, já jsem pouze začátečník v C# píšu něco přes půl roku a ne nějak intenzivně.

Už vidím chybu: 

//překreslení pouze definované karty
        private void Repaint(int index)
        {
            int y = index / 5;
            int x = index - (y * 5);
            try
            {
                int imageindex = (cards[index].covered) ? 0 : cards[index].picture; //<--
                Graphics g = Canvas.CreateGraphics();
                g.DrawImage(cardImages.Images[imageindex], (x * card_distance) + 2, (y * card_distance) + 2);
            }
            catch { }
        }

ono se to kreslení chybně asi neprojevilo, protože se to překreslí jindy, ale takto jsem to měl mít. Tak si tam doplň ten řádek:(int imageindex = (cards[index].covered) ? 0 : cards[index].picture;)

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
BDS+2
Věrný člen
7. 4. 2016   #48
-
0
-

ještě jsem ti tam doplnil vylepšení "inteligence" AI, míra inteligence se nastavuje proměnnou IQ (IQ značí počet kroků, které si AI zapamatuje) 

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;

namespace SWPexeso
{
    public partial class Form1 : Form
    {
        private const int players_count_max = 4; //pro jednoduchost jsem nastavil 4 hráče jako maximum
        private const int card_distance = 52; //muj rozestup karet
        bool click_on_stop, playing;
        int last_index, current_player, players_count, click_count, min, sec, completed;
        int IQ = 9; // počet kroků, které is AI zapamatuje <--
        int[] player = new int[players_count_max];
        bool[] player_ai = new bool[players_count_max];

        Random random = new Random();
        Card[] cards = new Card[20];

        List<int> memory = new List<int>();
                
        public Form1()
        {
            InitializeComponent();
        }

        public void StopGame()
        {
            click_on_stop = true;
            Application.DoEvents();
            GameTimer.Stop();
        }

        //překreslení celého plátna
        private void Canvas_Paint(object sender, PaintEventArgs e)
        {
            for (int x = 0; x < 5; x++)
            {
                for (int y = 0; y < 4; y++)
                {
                    int index = (y * 5) + x;
                    int imageindex = (cards[index].covered) ? 0 : cards[index].picture;
                    e.Graphics.DrawImage(cardImages.Images[imageindex], (x * card_distance) + 2, (y * card_distance) + 2);
                }
            }
        }
        //výběr myší
        private void Canvas_MouseDown(object sender, MouseEventArgs e)
        {
            if (player_ai[current_player] || !playing) return; //když hraje pc, nebo se nehraje, tak nic..
            else //pokud nehraje aktuálně počítač:
            {   //výpočet karty na kterou bylo klepnuto
                int x = e.Location.X / card_distance;
                int y = e.Location.Y / card_distance;
                if (x < 5 && y < 4)
                {
                    int index = (y * 5) + x;
                    ClickOn(index);
                }
            }
        }
        //překreslení pouze definované karty
        private void Repaint(int index)
        {
            int y = index / 5;
            int x = index - (y * 5);
            try
            {
                int imageindex = (cards[index].covered) ? 0 : cards[index].picture;
                Graphics g = Canvas.CreateGraphics();
                g.DrawImage(cardImages.Images[imageindex], (x * card_distance) + 2, (y * card_distance) + 2);
            }
            catch { }
        }
        /// <summary>
        /// událost po kliknutí na kartu
        /// </summary>
        /// <param name="index">index karty na kterou bylo kliknuto</param>
        private void ClickOn(int index)
        {
            if (index != last_index && cards[index].enabled && cards[index].covered)
            {
                cards[index].covered = false; //otočit kartu
                click_count++;  //připočítat otočenou..
                Repaint(index); //překreslit kartu
                Thread.Sleep(600); //pozastavit, aby se balo postřehnout, která karta byla otočena

                if (click_count > 1) //pokud jsou obě karty otočeny
                {
                    if (cards[last_index].picture == cards[index].picture) //pokud se shodují
                    {
                        player[current_player]++; //připočítat body aktivnímu hráči
                        cards[index].enabled = false; //uzamčít kartu 1
                        cards[last_index].enabled = false; //uzamčít kartu 2
                        completed++;
                    }
                    else //karty nejsou shodné
                    {
                        cards[index].covered = true; //otočit zpět kartu 1
                        cards[last_index].covered = true; //otočit zpět kartu 2
                        if (IQ > 0) //<--
                        {
                            memory.Add(index); // AI si zapamatuje poslední karty
                            memory.Add(last_index); // AI si zapamatuje poslední karty
                            if ((memory.Count / 2) > IQ)
                            {
                                memory.RemoveAt(0);
                                memory.RemoveAt(1);
                            }
                        }
                        Repaint(index); //překreslit kartu
                        Repaint(last_index); //překreslit kartu
                        NextPlayer(); //přepnout hráče
                    }
                    click_count = 0; //vymazat počet otočených karet
                    last_index = -1; //vymazat paměť, která karta byla otočena jako první
                }
                else //je otočena pouze jedna karta
                {
                    last_index = index; //zapamatovat si, která karta je otočena jako první
                }

                switch (current_player) //zobrazit aktuální bodový stav
                {
                    case 0: laPlayer1.Text = player[0].ToString(); break;
                    case 1: laPlayer2.Text = player[1].ToString(); break;
                    case 2: laPlayer3.Text = player[2].ToString(); break;
                    case 3: laPlayer4.Text = player[3].ToString(); break;
                }


                if (completed == 10) //pokud byly všechny karty otočeny
                {
                    GameTimer.Stop(); //zastavit měření času
                    try
                    {
                        System.Media.SoundPlayer snd = new System.Media.SoundPlayer(@"C:\Windows\Media\tada.wav");
                        snd.Play(); //můžeme přehrát nějaký zvuk
                    }
                    catch { }
                    playing = false;
                    //výpis výsledků:
                    if (player[0] == player[1] && player[2] == player[3] && player[1] == player[2]) MessageBox.Show("Remíza", "Pexeso info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    else
                    {
                        int winner = 0;
                        for (int i = 1; i < players_count; i++)
                        {
                            if (player[i] > player[winner]) winner = i;
                        }
                        int winner_num = winner + 1;
                        string msg = string.Format("Vítězem je hráč {0} se ziskem {1} bodů", winner_num, player[winner]);
                        MessageBox.Show(msg, "Pexeso info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else //pokud jsou ještě nějaké neotočené karty
                {
                    if (click_on_stop) playing = false;
                    else
                    {
                        if (player_ai[current_player]) ClickOn(NextRandom(last_index)); //pokud aktuálně hraje počítač, tak otočí nějakou kartu
                    }
                }
            }
        }

        private int? CardFromMemory() //<--
        {
            foreach(int i in memory)
            {
                if (i != last_index && cards[i].enabled && cards[i].picture == cards[last_index].picture) return i;
            }
            return null;
        }

        /// <summary>
        /// výběr náhodné karty (pro AI)
        /// </summary>
        /// <param name="ignore">index již otočené karty</param>
        /// <returns></returns>
        private int NextRandom(int ignore)
        {
            Application.DoEvents();

            if(IQ > 0 && click_count > 0) //<--
            {
                int? i = CardFromMemory();
                if (i.HasValue) return i.Value;
            }

            int r;
            while (true)
            {
                r = random.Next(0, 20);
                if (r != ignore && cards[r].covered && cards[r].enabled) return r;
            }
        }
        /// <summary>
        /// přepnout hráče
        /// </summary>
        private void NextPlayer()
        {
            current_player++;
            if (current_player == players_count) current_player = 0;

            switch (current_player)
            {
                case 0:
                    {
                        laPlayer1.ForeColor = Color.YellowGreen;
                        laPlayer2.ForeColor = Color.Gray;
                        laPlayer3.ForeColor = Color.Gray;
                        laPlayer4.ForeColor = Color.Gray;
                        break;
                    }
                case 1:
                    {
                        laPlayer1.ForeColor = Color.Gray;
                        laPlayer2.ForeColor = Color.YellowGreen;
                        laPlayer3.ForeColor = Color.Gray;
                        laPlayer4.ForeColor = Color.Gray;
                        break;
                    }
                case 2:
                    {
                        laPlayer1.ForeColor = Color.Gray;
                        laPlayer2.ForeColor = Color.Gray;
                        laPlayer3.ForeColor = Color.YellowGreen;
                        laPlayer4.ForeColor = Color.Gray;
                        break;
                    }
                case 3:
                    {
                        laPlayer1.ForeColor = Color.Gray;
                        laPlayer2.ForeColor = Color.Gray;
                        laPlayer3.ForeColor = Color.Gray;
                        laPlayer4.ForeColor = Color.YellowGreen;
                        break;
                    }
            }

            Refresh();
        }

        // čas
        private void GameTimer_Tick(object sender, EventArgs e)
        {
            if (sec == 59)
            {
                min++;
                sec = 0;
            }
            else sec++;

            laTime.Text = string.Format("{0}:{1:00}", min, sec);
        }

        /// <summary>
        /// nová hra
        /// </summary>
        private void StartNewGame(int pcount)
        {   //vynulování všeho:
            click_on_stop = true;
            playing = true;
            last_index = -1;
            player[0] = 0; //bodovy stav
            player[1] = 0; //bodovy stav
            player[2] = 0; //bodovy stav
            player[3] = 0; //bodovy stav
            player_ai[0] = ai1.Checked; //má hrát pc?
            player_ai[1] = ai2.Checked; //má hrát pc?
            player_ai[2] = ai3.Checked; //má hrát pc?
            player_ai[3] = ai4.Checked; //má hrát pc?

            click_count = 0;
            completed = 0;
            players_count = pcount;
            current_player = pcount - 1; //nastavíme na posledního hráče, aby to skočilo v NextPlayer() na 1. hráče           
            NextPlayer(); // je to tu kvůli vybarvení labelů

            min = 0; //minuty hry
            sec = 0; //sekundy hry
            memory.Clear(); // <--
            //vytvořím pole všech čísel obrázků po dvou (1,1,2,2,3,3...)
            List<int> idx = new List<int>();
            for (int i = 1; i < 11; i++)
            {
                idx.Add(i);
                idx.Add(i);
            }
            //náhodně povybírám čísla z pole
            for (int i = 0; i < 20; i++)
            {
                int u = random.Next(0, idx.Count);
                cards[i].picture = idx[u];
                cards[i].enabled = true;
                cards[i].covered = true;
                idx.RemoveAt(u);
            }
            //překreslím plátno a vynuluji stav:
            Canvas.Refresh();
            laTime.Text = "0:00";
            laPlayer1.Text = "0";
            laPlayer2.Text = "0";
            laPlayer3.Text = "0";
            laPlayer4.Text = "0";
            GameTimer.Start();
            click_on_stop = false;
            if (player_ai[current_player]) ClickOn(NextRandom(last_index)); //pokud začíná pc..
        }

        private void btPlay_Click(object sender, EventArgs e)
        {
            if (playing) StopGame();
            int cnt = Convert.ToInt32(nuCount.Value);
            StartNewGame(cnt);
        }

        private void btStop_Click(object sender, EventArgs e)
        {
            if (playing) StopGame();  //zastavení hry je takové jakési nedodělané, ale nechci to dělat moc složité
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            StopGame();
        }
    }

    struct Card
    {
        public int picture;  // index obrázku karty
        public bool enabled; // možnost otočení karty
        public bool covered; // true: karta je otočena obrázkem dolů, false: karta je otočena obrázkem nahorů
    }
}

změny jsou označeny zase <--

Nahlásit jako SPAM
IP: 94.113.253.–
Visual Studio C/C#/C++
(pouze samouk)
BDS+2
Věrný člen
7. 4. 2016   #49
-
+1
-
Zajímavé

Tak jsem to pexeso testoval, ještě byla chyba ve vyhodnocení výhry. Taky jsem tam přidal nastavení obtížnosti.

Tady je odkaz na (doufám) finální verzi:

http://www85.zippyshare.com/v/4gt6HiEE/file.html

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;

namespace SWPexeso
{
    public partial class Form1 : Form
    {
        private const int players_count_max = 4; //pro jednoduchost jsem nastavil 4 hráče jako maximum
        private const int card_distance = 52; //muj rozestup karet
        bool click_on_stop, playing;
        int last_index, current_player, players_count, click_count, min, sec, completed;
        int IQ = 7; // počet kroků, které is AI zapamatuje <--
        int[] player = new int[players_count_max];
        bool[] player_ai = new bool[players_count_max];

        Random random = new Random();
        Card[] cards = new Card[20];

        List<int> memory = new List<int>();
                
        public Form1()
        {
            InitializeComponent();
        }

        public void StopGame()
        {
            click_on_stop = true;
            Application.DoEvents();
            GameTimer.Stop();
        }

        //překreslení celého plátna
        private void Canvas_Paint(object sender, PaintEventArgs e)
        {
            for (int x = 0; x < 5; x++)
            {
                for (int y = 0; y < 4; y++)
                {
                    int index = (y * 5) + x;
                    int imageindex = (cards[index].covered) ? 0 : cards[index].picture;
                    e.Graphics.DrawImage(cardImages.Images[imageindex], (x * card_distance) + 2, (y * card_distance) + 2);
                }
            }
        }
        //výběr myší
        private void Canvas_MouseDown(object sender, MouseEventArgs e)
        {
            if (player_ai[current_player] || !playing) return; //když hraje pc, nebo se nehraje, tak nic..
            else //pokud nehraje aktuálně počítač:
            {   //výpočet karty na kterou bylo klepnuto
                int x = e.Location.X / card_distance;
                int y = e.Location.Y / card_distance;
                if (x < 5 && y < 4)
                {
                    int index = (y * 5) + x;
                    ClickOn(index);
                }
            }
        }
        //překreslení pouze definované karty
        private void Repaint(int index)
        {
            int y = index / 5;
            int x = index - (y * 5);
            try
            {
                int imageindex = (cards[index].covered) ? 0 : cards[index].picture;
                Graphics g = Canvas.CreateGraphics();
                g.DrawImage(cardImages.Images[imageindex], (x * card_distance) + 2, (y * card_distance) + 2);
            }
            catch { }
        }
        /// <summary>
        /// událost po kliknutí na kartu
        /// </summary>
        /// <param name="index">index karty na kterou bylo kliknuto</param>
        private void ClickOn(int index)
        {
            if (index != last_index && cards[index].enabled && cards[index].covered)
            {
                cards[index].covered = false; //otočit kartu
                click_count++;  //připočítat otočenou..
                Repaint(index); //překreslit kartu
                Thread.Sleep(600); //pozastavit, aby se balo postřehnout, která karta byla otočena

                if (click_count > 1) //pokud jsou obě karty otočeny
                {
                    if (cards[last_index].picture == cards[index].picture) //pokud se shodují
                    {
                        player[current_player]++; //připočítat body aktivnímu hráči
                        cards[index].enabled = false; //uzamčít kartu 1
                        cards[last_index].enabled = false; //uzamčít kartu 2
                        completed++;
                    }
                    else //karty nejsou shodné
                    {
                        cards[index].covered = true; //otočit zpět kartu 1
                        cards[last_index].covered = true; //otočit zpět kartu 2
                        if (IQ > 0) //<--
                        {
                            memory.Add(index); // AI si zapamatuje poslední karty
                            memory.Add(last_index); // AI si zapamatuje poslední karty
                            if ((memory.Count / 2) > IQ)
                            {
                                memory.RemoveAt(0);
                                memory.RemoveAt(1);
                            }
                        }
                        Repaint(index); //překreslit kartu
                        Repaint(last_index); //překreslit kartu
                        NextPlayer(); //přepnout hráče
                    }
                    click_count = 0; //vymazat počet otočených karet
                    last_index = -1; //vymazat paměť, která karta byla otočena jako první
                }
                else //je otočena pouze jedna karta
                {
                    last_index = index; //zapamatovat si, která karta je otočena jako první
                }

                switch (current_player) //zobrazit aktuální bodový stav
                {
                    case 0: laPlayer1.Text = player[0].ToString(); break;
                    case 1: laPlayer2.Text = player[1].ToString(); break;
                    case 2: laPlayer3.Text = player[2].ToString(); break;
                    case 3: laPlayer4.Text = player[3].ToString(); break;
                }


                if (completed == 10) //pokud byly všechny karty otočeny
                {
                    GameTimer.Stop(); //zastavit měření času
                    try
                    {
                        System.Media.SoundPlayer snd = new System.Media.SoundPlayer(@"C:\Windows\Media\tada.wav");
                        snd.Play(); //můžeme přehrát nějaký zvuk
                    }
                    catch { }
                    playing = false;

                    //výpis výsledků:
                    int winner = 0;
                    for (int i = 0; i < players_count; i++)
                    {
                        if (player[i] > player[winner]) winner = i;
                    }
                    int winners = 0;
                    for (int i = 0; i < players_count; i++)
                    {
                        if (player[i] == player[winner]) winners++;
                    }

                    if (winners > 1) MessageBox.Show("Remíza", "Pexeso info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    else
                    {
                        int winner_num = winner + 1;
                        string msg = string.Format("Vítězem je hráč {0} se ziskem {1} bodů", winner_num, player[winner]);
                        MessageBox.Show(msg, "Pexeso info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else //pokud jsou ještě nějaké neotočené karty
                {
                    if (click_on_stop) playing = false;
                    else
                    {
                        if (player_ai[current_player]) ClickOn(NextRandom(last_index)); //pokud aktuálně hraje počítač, tak otočí nějakou kartu
                    }
                }
            }
        }

        private int? CardFromMemory() //<--
        {
            foreach(int i in memory)
            {
                if (i != last_index && cards[i].enabled && cards[i].picture == cards[last_index].picture) return i;
            }
            return null;
        }

        /// <summary>
        /// výběr náhodné karty (pro AI)
        /// </summary>
        /// <param name="ignore">index již otočené karty</param>
        /// <returns></returns>
        private int NextRandom(int ignore)
        {
            Application.DoEvents();

            if(IQ > 0 && click_count > 0) //<--
            {
                int? i = CardFromMemory();
                if (i.HasValue) return i.Value;
            }

            int r;
            while (true)
            {
                r = random.Next(0, 20);
                if (r != ignore && cards[r].covered && cards[r].enabled) return r;
            }
        }
        /// <summary>
        /// přepnout hráče
        /// </summary>
        private void NextPlayer()
        {
            current_player++;
            if (current_player == players_count) current_player = 0;

            switch (current_player)
            {
                case 0:
                    {
                        laPlayer1.ForeColor = Color.YellowGreen;
                        laPlayer2.ForeColor = Color.Gray;
                        laPlayer3.ForeColor = Color.Gray;
                        laPlayer4.ForeColor = Color.Gray;
                        break;
                    }
                case 1:
                    {
                        laPlayer1.ForeColor = Color.Gray;
                        laPlayer2.ForeColor = Color.YellowGreen;
                        laPlayer3.ForeColor = Color.Gray;
                        laPlayer4.ForeColor = Color.Gray;
                        break;
                    }
                case 2:
                    {
                        laPlayer1.ForeColor = Color.Gray;
                        laPlayer2.ForeColor = Color.Gray;
                        laPlayer3.ForeColor = Color.YellowGreen;
                        laPlayer4.ForeColor = Color.Gray;
                        break;
                    }
                case 3:
                    {
                        laPlayer1.ForeColor = Color.Gray;
                        laPlayer2.ForeColor = Color.Gray;
                        laPlayer3.ForeColor = Color.Gray;
                        laPlayer4.ForeColor = Color.YellowGreen;
                        break;
                    }
            }

            Refresh();
        }

        // čas
        private void GameTimer_Tick(object sender, EventArgs e)
        {
            if (sec == 59)
            {
                min++;
                sec = 0;
            }
            else sec++;

            laTime.Text = string.Format("{0}:{1:00}", min, sec);
        }

        /// <summary>
        /// nová hra
        /// </summary>
        private void StartNewGame(int pcount)
        {
            IQ = Convert.ToInt32(nuLevel.Value);
            //vynulování všeho:
            click_on_stop = true;
            playing = true;
            last_index = -1;
            player[0] = 0; //bodovy stav
            player[1] = 0; //bodovy stav
            player[2] = 0; //bodovy stav
            player[3] = 0; //bodovy stav
            player_ai[0] = ai1.Checked; //má hrát pc?
            player_ai[1] = ai2.Checked; //má hrát pc?
            player_ai[2] = ai3.Checked; //má hrát pc?
            player_ai[3] = ai4.Checked; //má hrát pc?

            click_count = 0;
            completed = 0;
            players_count = pcount;
            current_player = pcount - 1; //nastavíme na posledního hráče, aby to skočilo v NextPlayer() na 1. hráče           
            NextPlayer(); // je to tu kvůli vybarvení labelů

            min = 0; //minuty hry
            sec = 0; //sekundy hry
            memory.Clear(); // <--
            //vytvořím pole všech čísel obrázků po dvou (1,1,2,2,3,3...)
            List<int> idx = new List<int>();
            for (int i = 1; i < 11; i++)
            {
                idx.Add(i);
                idx.Add(i);
            }
            //náhodně povybírám čísla z pole
            for (int i = 0; i < 20; i++)
            {
                int u = random.Next(0, idx.Count);
                cards[i].picture = idx[u];
                cards[i].enabled = true;
                cards[i].covered = true;
                idx.RemoveAt(u);
            }
            //překreslím plátno a vynuluji stav:
            Canvas.Refresh();
            laTime.Text = "0:00";
            laPlayer1.Text = "0";
            laPlayer2.Text = "0";
            laPlayer3.Text = "0";
            laPlayer4.Text = "0";
            GameTimer.Start();
            click_on_stop = false;
            if (player_ai[current_player]) ClickOn(NextRandom(last_index)); //pokud začíná pc..
        }

        private void btPlay_Click(object sender, EventArgs e)
        {
            if (playing) StopGame();
            int cnt = Convert.ToInt32(nuCount.Value);
            nuCount.Focus();
            StartNewGame(cnt);
        }

        private void btStop_Click(object sender, EventArgs e)
        {
            if (playing) StopGame();  //zastavení hry je takové jakési nedodělané, ale nechci to dělat moc složité
            nuCount.Focus(); //jen pro deaktivaci tlačítka
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            StopGame();
        }
    }

    struct Card
    {
        public int picture;  // index obrázku karty
        public bool enabled; // možnost otočení karty
        public bool covered; // true: karta je otočena obrázkem dolů, false: karta je otočena obrázkem nahorů
    }
}
Nahlásit jako SPAM
IP: 94.113.253.–
Visual Studio C/C#/C++
(pouze samouk)
kubas129
~ Anonymní uživatel
52 příspěvků
9. 4. 2016   #50
-
+1
-
Zajímavé

Dík moc tedka se na to dívám ,ale něco nechápu :(

Co dělá:  Application.DoEvents();

To je nějaká událost nebo co? :D

Dík

Nahlásit jako SPAM
IP: 37.48.10.–
BDS+2
Věrný člen
9. 4. 2016   #51
-
+1
-
Zajímavé

#50 kubas129
vysvětlím to na příkladu:

řekněme že budeš provádět nějakou smyčku, (která nebude v samostatném vlákně), něco jako: 

for(int i=0; i<5555555; i++)
{
 delejněco();
}

a ty budeš chtít okno aplikace během provádění této smyčky minimalizovat. Tak to bude probíhat tak, že se po klepnutí na tlačítko nestane nic (aplikace zamrzne) a až po vykonání této smyčky se minimalizuje. Ale pokud to provedeš takto: 

for(int i=0; i<5555555; i++)
{
 delejněco();
 Application.DoEvents();
}

tak se v místě s "Application.DoEvents();" smyčka pozastaví a provede všechny čekající události (včetně klepnutí na minimalizační tlačítko a vlastní minimalizace) a pak pokračuje dál.

Ovšem s .DoEvents() je třeba nakládat opatrně, může dojít k nečekaným událostem, např. uživatel klepne na nějaké tlačítko, které spustí něco, co naruší právě probíhající akci.

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
BDS+2
Věrný člen
9. 4. 2016   #52
-
+1
-
Zajímavé

kdyby si chtěl mít trochu vyčuranějšího bota, tak nahraď metodu NextRandom touto: 

        private int NextRandom(int ignore)
        {
            Application.DoEvents();

            if (IQ > 0 && memory.Count > 1)
            {
                if (click_count > 0) //<--
                {
                    int? i = CardFromMemory();
                    if (i.HasValue) return i.Value;
                }
                else //AI si vzpomene jestli už některé dvojice nezná:
                {
                    for(int x=0; x<memory.Count-1; x++)
                    {
                        for(int y=x+1; y<memory.Count; y++)
                        {
                            if ((cards[memory[x]].picture == cards[memory[y]].picture) &&
                                cards[memory[x]].enabled && (memory[x] != memory[y])) return memory[x];
                        }
                    }
                }
            }

            int r;
            while (true)
            {
                r = random.Next(0, 20);
                if (r != ignore && cards[r].covered && cards[r].enabled) return r;
            }
        }

teď ještě pořád bude dělat chyby, ale dokonalého bych ho nedělal. Už tak je těžké ho porazit.

-------------------------------------------------------------

Jinak ještě jsem si s tím pohrál je to 2. projekt používá 2x18 .jpg obrázků s rozlišením 128x128, které načítá ze složky, ale jinak vychází z předchozího kódu: http://www5.zippyshare.com/v/TBcqwXE4/file.html samozřejmě hře pořád chybí některá ošetření a není příkladem správného přístupu, je to stále jen začátečnická ukázka. Autorem obrázků je Martin Berube.

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
kubas129
~ Anonymní uživatel
52 příspěvků
11. 4. 2016   #53
-
0
-

ahoj,

díky moc :-)

Nevíš šla by ta inteligence botů udělat i u toho prvního projektu(myslím ten ,jak jsem ho někde našel na netu)

nějak podobně jako si jí udělal ty u tohodle projektu? :-)

Předem moc dík za odpověd :-)

Nahlásit jako SPAM
IP: 37.48.8.–
peter
~ Anonymní uživatel
2551 příspěvků
11. 4. 2016   #54
-
0
-

random(vsechny)<=pamatovane ? chytry : hloupy
... vsechny kameny
... otocene pamatovane kameny (karticky)
Cili, bude tim chytrejsi, cim vic kamenu uz videl. Aby proste nebyl uplne tupej a kdyz je ve hre 5 paru, tak aby hru pripadne zakoncil a nezmatkoval.
A k tomu muzes pridat pravdepodobnost, s jakou si zapamatuje umisteni kamene, pripadne dobu, po kterou si ho zapamatuje.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:9938:70...–
Kubas1290
Newbie
11. 4. 2016   #55
-
0
-

#54 peter
jj úplně jsem to z toho pochopil ,díky opravdu moc :D

Nahlásit jako SPAM
IP: 37.48.8.–
Kubas1290
Newbie
11. 4. 2016   #56
-
0
-


#54 peter
Neporadil bys mi prosím s tímhle?

http://programujte.com/forum/vlakno/30902-serazeni-prvku-v-poli-od-nejvyssi-hodnoty-po-nejnizsi-hodnotu/nove/

Nahlásit jako SPAM
IP: 37.48.8.–
BDS+2
Věrný člen
11. 4. 2016   #57
-
0
-

#53 kubas129
určitě by šla, ale řešilo by se to dost hloupě

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
Kubas1290
Newbie
11. 4. 2016   #58
-
0
-

#57 BDS
Jak to? :)

Nahlásit jako SPAM
IP: 37.48.8.–
BDS+2
Věrný člen
11. 4. 2016   #59
-
0
-

#58 Kubas129
otočené PictureBoxy by se musely házet do Listu a pak je porovnávat podle toho tagu... je to škaredé.

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
Kubas1290
Newbie
11. 4. 2016   #60
-
0
-

Prosimtě ,poradil bys mi ještě s jednou věcí prosím?

Do formu 5 dávám z formu 6 čtyř místné pole 

zde se mi obsah tohoto pole skopíruje do druhého pole.

V prvním poli se mi hodnoty seradi od nejvetsiho po nejmensi

...

a právě poté bych potřeboval nejspíše foreach ,který by našel hodnotu největšiho čísla ve druhém poli ,což znamená pole[0] a tuto hodnotu by poté hledal v poli1 ,ale našel by pozici ,kde je umístěna což je třeba pole[2]

Já akorát nevím ten příkaz ,který to dělá ,nenapsal bys mi ho prosím?

--

--

Lépe vysvětlený:

mám pole dejme tomu ,že se bude jmenovat Pole1 v tomto poli mám 4 prvky 

int[] Pole1 = new int[3];

dejme tomu ,že v tomto poli budou zaznamenány body hráčů nicméně každý hráč (tudiž počet hráčů je 4) bude umísten na své pozici Pole[0] je hráč1 Pole[1] je hráč2 atd...

No poté se tento obsah nahraje do nového pole dejme tomu do pole 2

int[] Pole2 = new int[3];

this.Pole2 = Pole1;

No v poli1 Pomocí cyklu seřadím čísla od maxima po nejnižší hodnotu

no a poté bude výpis od nejlepšího hráče po nejhoršího hráče nicméně aby se poznalo o jakého hráče se jedná ,tak musí být někde 

pole1[0] = Pole2[Umístěné číslo na maximu?]

Nahlásit jako SPAM
IP: 37.48.8.–
Kubas1290
Newbie
11. 4. 2016   #61
-
0
-

#59 BDS
ale čistě teoreticky by to šlo ,že jo? :-)

Nahlásit jako SPAM
IP: 37.48.8.–
BDS+2
Věrný člen
11. 4. 2016   #62
-
0
-

#60 Kubas129
1. C# řeš prosím na diskuzi .net

2. řeš různé problémy v různých vláknech a nezakládej dvě stejná vlákna v různých diskuzích!

3. všechno jde

Nahlásit jako SPAM
IP: 185.69.69.–
Visual Studio C/C#/C++
(pouze samouk)
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, 81 hostů

Podobná vlákna

Pexeso — založil janca.dr

Pexeso — založil Markéta

Pexeso v delphi — založil sepik

Moderátoři diskuze

 

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