Anonymní profil odpoved – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil odpoved – Programujte.comAnonymní profil odpoved – Programujte.com

 

Příspěvky odeslané z IP adresy 94.113.253.–

Visual Basic › pavel
30. 11. 2021   #389057
.NET › Revize kódu Hanojských věží
18. 11. 2021   #389005

#5 KARLOSCZ1979
Čekal jsem, že to zhodnotí nějaký profík, zatím nikdo nic nepsal, tak ještě přidám celkové hodnocení.
Nelíbí se mi to provedení celkově, dávat ty položky do stacku, pak to kopírovat do pole, řadit a pak ještě převracet...
Vem si kdyby jsi dělal něco náročnějšího, kolik by jsi tímto zaplácal paměti a výkonu..

.NET › property accessor
22. 10. 2021   #388820

#13 Montezo

BDS: tuhle wifinu využívá více lidí. a všichni máte dotazy stejného typu :D

Myslím, že se v těch přirovnáních ztrácíš (nebo já). Zatím ještě neznáš základy a už by jsi chtěl vyvíjet programovací jazyk.

Je to tam například pro ošetření vstupů uživatele, nebo ošetření chyb při čtení souborů.....

nebo i pomoc vývojáři:

class TestClass
    {
        private int _x = 0;
        public bool ValueIsCorrect{get; private set;} = true;

        public int X
        {
            get { return _x; }
            set
            { 
                if (value < -100) 
                {
                 _x = -100;
                 ValueIsCorrect = false;
                }
                else
                {
                   if (value > 100) 
                   {
                    _x = 100;
                     ValueIsCorrect = false;
                   }
                   else
                   {
                    _x = value;
                    ValueIsCorrect = true;                    
                   }
                 }
                 PrekresliOkno();
            }
        }

     private void PrekresliOkno()
     {
      //nejaky kod
     }
    }

trochu krkolomné, ale snad o to lépe pochopitelné 

.NET › property accessor
22. 10. 2021   #388813

#7 Montezo
měl jsem na mysli:

Montezo Viktor funkce safranek DEBRECEN gripen..

.NET › property accessor
22. 10. 2021   #388807

#4 hlucheucho
pravdu máš! 

class TestClass
    {
        private int _x; //chci aby _x mohlo mít hodnotu v rozsahu -100 až 100 

        public int X //vlastnost X je public, takže k ní lze přistupovat zvenčí
        {
            get { return _x; }
            set
            { //tímto zajistím, že _x bude v rozsahu -100 až 100
                if (value < -100) _x = -100;
                else
                {
                    if (value > 100) _x = 100;
                    else _x = value; //<oprava
                }
            }
        }
    }

opraveno

.NET › Console.WriteLine
20. 10. 2021   #388790

#3 funkce
"new A();" vytvoří novou instanci třídy typu "A"

pak ji "=" přiřadí identifikátor (uživatelské jméno) "a"

značí přiřazení

== značí rovnost

.NET › Console.WriteLine
20. 10. 2021   #388786

#1 funkce
Máš zvláštní otázky.

Myslím, že ses začal věnovat něčemu, k čemu nemáš ani vzdálené vlohy.

Voláš tím metodu třídy Console s parametrem... Stačí WriteLine označit a stisknout F12.

.NET › Object a znakový řetězec...
20. 10. 2021   #388783

#42 safranek
samozřejmě jde jen o ukázky, aby bylo poznat, že se hodnota změnila

reálnější je tento příklad: 

class C
{
 uint tag = 0;
 string title;

 public C()
 {
  title=string.Empty; //doplní prázdný řetězec, aby title nebylo null
 }

 public C(int Tag)
 : this() //spustí konstruktor bez parametru
 {
  tag=Tag;
 } 
}
.NET › Object a znakový řetězec...
20. 10. 2021   #388779

#39 hlucheucho
kdyby nebyl líný, tak si spustí tutoriál, tam to taky vysvětluje

(mám strach, že spustím lavinu dalších otázek, proto jsem tam dědičnost nedal, i když se strašně nabízí)

.NET › Object a znakový řetězec...
20. 10. 2021   #388778

#37 safranek
> mělo tam bejt i "A instance 2"  ?

Nemusí, je to na začátku dokud se tam nedá středník, ale čárka tak to furt platí. Ale tohle jsi si mohl ověřit ve visualstudiu.

> .."typ" si představím právě "int, bool, double apod"..

 V podstatě máš pravdu on to není hodnotový typ jako int apd. Jde o uživatelsky definovaný referenční typ. Přesné názvosloví není pro mě podstatné, nikdy jsem se ho neučit. Tady je o tom nějaké povídání, možná je tam taky pro tebe něco pro pochopení.

>Tohle je taky samo o sobě konstruktor?

ne, to je statická metoda (funkce), která se spouští vždy po startu programu

.NET › Object a znakový řetězec...
18. 10. 2021   #388753

#19 safranek
zapni VisualStudioInstaller a nainstaluj toto:

Připojen obrázek.

ta chybová hláška s tím souvisí, ten tutoriál je dělaný v NET. Framework

Tutoriál začni jak jsem už psal lekcí 16, tam jsou první všeobecné věci co musíš vědět (díly 1-15 se věnují WindowsForms)

.NET › Práce s texťákem v C++ do C#
21. 2. 2018   #219791

#5 ORION206

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

je tam proto, že pokud používáš např. české windows tak by ti nefungovalo parsování čísla s desetinnou tečkou..

takže pokud tam máš tečku, jedeš např. na českých windows a nedáš tam "en-US", tak ti to nebude fungovat.

možná se ti může hodit i toto: 

                char[] del = new char[] { ' ' }; //možná tam můžeš mít i '\t'
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    string[] ss = line.Split(del, StringSplitOptions.RemoveEmptyEntries); //vynechá prázdné řetězce (např. 2 mezery za sebou)

mimochodem, proč tam máš to pole mez_X, když k němu nepřiřazuješ žádnou hodnotu?(u C# je tam 0, ale u C++ byla hodnota v závislosti na tom co bylo na dané pozici v paměti - v podstatě náhodné číslo)

proč do souboru zapisuješ 12 argumentů, když jich tam máš pouze 6?

.NET › void* na byte[] v C#
13. 9. 2016   #212674

#7 Radek Chalupa 

já bych to udělal takto:

 try
 {
     int delka = (int)cmd.velikost_dat_blob(0);
     byte* data = (byte*)cmd.obsah_blob(0);
     using (MemoryStream ms = new MemoryStream(delka))
     {
         for (int i = 0; i < delka; i++) ms.WriteByte(data[i]);
         bitmapa_.nacist_stream(ms);
     }                    
 }
 catch (Exception ex)
 {
     MessageBox.Show(ex.Message, "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error);
 }
Visual Basic › jak fungují řetězce (String)
23. 5. 2016   #210832

#6 Kartik
a co zkusit StringBuilder?

.NET › Velikost aktualizace Visual…
19. 4. 2016   #210023

#1 Hans
kdybych dělal víc počítačů, tak bych stáhl ISO - odinstalace není nutná, po spuštění instalace by se měla automaticky provést pouze update.

Odhaduji (podle doby stahování), že se při síťové instalaci update stáhne více než 1 GB.

.NET › Seřazení prvků v poli od nej…
13. 4. 2016   #209937

#27 kubas129
Opět máš špatný návrh aplikace. Přece můžeš formulář navrhnou tak, že výsledky hry vypíšeš jako víceřádkový text do jednoho labelu, pak nebudeš muset řešit takové blbosti. Případně to můžeš kreslit rovnou na formulář.

.NET › Seřazení prvků v poli od nej…
12. 4. 2016   #209898

#16 kubas129
tobě je docela těžké poradit, ignoruješ většinu toho co ti kdo napíše, neptáš se na to co potřebuješ....

Pokud nepochopíš ani tohle, tak ses nejspíš začal věnovat špatnému koníčku;) 

            STAV[] player = new STAV[4];
            //inicializace:
            for (int i = 0; i < 4; i++)
            {
                player[i].id = i;
                player[i].score = 0;
            }

            //příklad bodování:
            player[0].score = 44;
            player[1].score = 11;
            player[2].score = 33;
            player[3].score = 22;
            //seřazení od největšího:
            Array.Sort(player);
    struct STAV : IComparable
    {
        public int id; //id hráče - podle toho po seřazení poznáš který je který
        public int score; //bodový stav

        public int CompareTo(object obj)
        {
            STAV s = (STAV)(obj);
            return s.score.CompareTo(score);
        }
    }

Strukturou STAV jsem nahradil zmíněné dvourozměrné pole

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

Ještě dodám ukázku v konzolové aplikaci: 

    class Program
    {
        static void Main(string[] args)
        {
            STAV[] player = new STAV[4];
            //inicializace:
            for (int i = 0; i < 4; i++)
            {
                player[i].id = i;
                player[i].score = 0;
            }

            //příklad bodování:
            player[0].score = 44;
            player[1].score = 11;
            player[2].score = 33;
            player[3].score = 22;
            //seřazení od největšího:
            Array.Sort(player);

            foreach(STAV s in player)
            {
                Console.WriteLine(s.ToString());
            }

            Console.ReadKey();
        }

    }

    struct STAV : IComparable
    {
        public int id;
        public int score;

        public int CompareTo(object obj)
        {
            STAV s = (STAV)(obj);
            return s.score.CompareTo(score);
        }

        public override string ToString()
        {
            int i = id+1;
            return string.Format("Hráč {0} získal {1} bodů", i, score);
        }
    }
.NET › Seřazení prvků v poli od nej…
12. 4. 2016   #209887

#7 peter
nebo se nad tím zamyslet, mě jako první možnost napadlo toto:

static void SortIntArray(int[] arr)
        {
            int temp;
            for(int i=0; i<arr.Length; i++)
            {
                for (int j = 0; j < arr.Length; j++)
                {
                    if (arr[j] < arr[i])
                    {
                        temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
        }
C / C++ › Pexeso Boti
7. 4. 2016   #209743

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ů
    }
}
C / C++ › Pexeso Boti
7. 4. 2016   #209728

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 <--

C / C++ › Pexeso Boti
6. 4. 2016   #209677

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é

C / C++ › Pexeso Boti
6. 4. 2016   #209667

#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

.NET › komunikace mezi okny c#
17. 2. 2016   #208714

Myslel jsem to tak, že můžeš labelu nastavit vlastnost Modifiers na public a pak přímo k labelu přistupovat z jiných formulářů.

C / C++ › Použití gettru() z jiné třídy
17. 2. 2016   #208713

#19 vitamin
nevím on to tak chtěl, zkoumá komunikaci tříd. Smysl celého návrhu je z jakéhokoliv pohledu mimo všeho co si dokážu představit.

.NET › komunikace mezi okny c#
17. 2. 2016   #208707

není nutné mít vše public, když to nepotřebuješ 

    public partial class MemoryGame : Form
    {
        
        Random location = new Random();// will set random location 
        List<Point> pointsCards = new List<Point>(); // get values of location

        PictureBox FirstCardOpen; 
        PictureBox SecondCardOpen;

        public Form1 mainData;
        public MemoryGame(Form1 mwn)
        {
            InitializeComponent();
            mainData = mwn;
            mainData = new Form1(); // toto tu máš proč?!!
        }

        public void MemoryGame_Load(object sender, EventArgs e)
        {
            lblPlayer1NameGame.Text = mainData.lblPlayer1Name.Text;
            mainData.lblPlayer2Name.Text = mainData.lblPlayer2Name.Text; // a toto je co?
.NET › chyba C#: premenna nepristup…
30. 10. 2015   #206009

#12 arrayList
pořád jsme u toho stejného, píšu to už po druhé: nepředáváš instanci Form1 do Form2. Kdyby ses podíval na to video, tak to nemůžeš udělat špatně.

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2(this);
            form.Show();
        }

        public void zapis_do_textboxu(string text)
        {
            textBox1.Text = text;
        }
    }
    public partial class Form2 : Form
    {
        Form1 fm1;
        public Form2(Form1 fm)
        {
            InitializeComponent();
            fm1 = fm;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            fm1.zapis_do_textboxu(uloz_text());
            Close();
        }

        private string uloz_text()
        {
            return = textBox1.Text;
        }
    }

ps,

Form1.zapis_do_textboxu(uloz_text());

toto je naprostý nesmysl, to můžeš použít pouze pro statické funkce

odpoved
C / C++ › ktere visual studio
19. 10. 2015   #205783
.NET › C# čtení HKEY_LOCAL_MACHINE…
16. 10. 2015   #205678

#3 hlucheucho
upravit v manifestu:

requestedExecutionLevel level="asInvoker" 

na:

requestedExecutionLevel level="requireAdministrator" 

samozřejmě, pokud má aktuální uživatel nižší oprávnění, tak nemůže spouštět aplikace s vyšším oprávněním.

.NET › usafe struct - 1.lekce
14. 8. 2015   #204316

#11 Matěj Andrle

je to uloženo klasicky, binárně

kod mohl vypadat takto:

#include <stdio.h>

struct ITEMDATA
{
char vlastnostA [32];
char vlastnostB [16];
char vlastnostC [16];
char vlastnostD [8];
char vlastnostE [8];
double hodnotaA;
long hodnotaB;
int hodnotaC;
short pole1[12];
byte pole2[256];
};

ITEMDATA library[100000];

...
FILE *fi = fopen(".......
...
fwrite(library, sizeof(ITEMDATA), 100000, fi);

.NET › usafe struct - 1.lekce
14. 8. 2015   #204314

#3 Matěj Andrle
Endialita - to by snad bylo jen prohozené. Ne?

.NET › usafe struct - 1.lekce
14. 8. 2015   #204313

#7 Kit
Rada č. 3

ta funkce se uvádí na netu na několika diskuzích, jen jsem ji zkopíroval, její obsah zatím nechápu.

.NET › usafe struct - 1.lekce
14. 8. 2015   #204312

Řekněme, že mám soubor který obsahuje 100 000 položek (v c++ uložených struktur o pevné velikosti) ve formátu:

{

char vlastnostA [32];

char vlastnostB [16];

char vlastnostC [16];

char vlastnostD [8];

char vlastnostE [8];

double hodnotaA;

long hodnotaB;

int hodnotaC;

short pole1[12];

byte pole2[256];

};

já budu muset zachovat tento formát (z důvodu kompatibility).

Jak data do souboru ukládat a připisovat bez toho, abych musel přepisovat celý soubor a nemusel data zapisovat po jedné položce. A samozřejmě pak data číst.

.NET › usafe struct - 1.lekce
14. 8. 2015   #204308

#4 Kit
nedělám žádný kompletní software, tento program dělám je v rámci "výuky".

Jestli někdo víte jak, jak se dá vytvořit program na uložení "unsafe struct" do souboru, tak prosím poraďte.

V uvedené příkladu se mi jedná o funkci "byte[] getBytes" - ta nepracuje správně.

C / C++ › Druhé nejmenší číslo v poli
6. 2. 2015   #198896

#14 hlucheucho
v mém příkladu jsem zakomentoval

if(ok == INT_MAX && pole[0]<INT_MAX)return pole[0];

kdyby někomu vadilo, že bude funkce vracet číslo INT_MAX, které v poli není..

on je skoro stejný nesmysl vracet jakékoliv číslo jako druhé nejmenší, když jsou všechna čísla shodná

ps, ani nevím jestli lze nazvat posloupností, pole stejných čísel

C / C++ › procházení vektoru - iteráto…
5. 2. 2015   #198841

Díky za reakce. Rychlost provádějí jsem na mysli neměl, spíš mi šlo správu paměti.

C / C++ › procházení vektoru - iteráto…
5. 2. 2015   #198829

Měl bych doplňující otázku:
Jakou funkci by jste použili? Nebo je to úplně jedno?

void Fc1()
{
 //1. verze
 for(int i=0; i<100000; i++)
 {
   v1.push_back(hodnota());
   v2.push_back(hodnota());
 }
}
//---------------------------------------------------------------------------
void Fc2()
{
 //2. verze
 for(int i=0; i<100000; i++)v1.push_back(hodnota());
 for(int i=0; i<100000; i++)v2.push_back(hodnota());
}
//---------------------------------------------------------------------------

 

 

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