NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.

Diskuze: picture box + bodování

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
c-s-borec
Člen
Avatar
c-s-borec:5.4.2014 19:45

Zdravím,
můj kamarád má problém. Tímto bych chtěl někoho poprosit kdo s tímhle má zkušenosti a věděl by jak následující problémy vyřešit:
1, Jak mohu uložit pozici pictureboxů? Vše je dělané přes timer které jsou po zmáčknutí buttonu zastaveny (picutreboxi). Ale jakým příkazem můžu ty pictureboxi uložit a po zmáčknutí stejného buttonu se opět dají do pohybu.
Jedná se o hru výše uvedenou (ve spoileru) Arkanoid.

2, Mám už nastavené bodování (když spadne míček pod plošinu) tak se body odečtou. Ale když míček skončí pod plošinou, tak hru musím opět odstartovat (načte se vlastně nové kolo) a body se vynulují. Potřebuji, aby se body ukládali.

 
Odpovědět
5.4.2014 19:45
Avatar
Luboš Běhounek Satik:5.4.2014 20:20
  1. Uložit kam? Do souboru? A jak máš řešený ten pohyb?
  2. Asi sem rovnou hoď kód (přes tag code nebo pokud je to dlouhé, tak pastebin nebo celý zip), netuším, jak to máš udělané :)
Nahoru Odpovědět
5.4.2014 20:20
https://www.facebook.com/peasantsandcastles/
Avatar
c-s-borec
Člen
Avatar
c-s-borec:5.4.2014 21:15

Zde to je:

private void timer1_Tick(object sender, EventArgs e)
        {
            for (int i = 0; i < 22; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    if (micek.Bounds.IntersectsWith(pole[j, i].Bounds))
                    {
                        pohyby *= -1;

                        pole[j, i].Left += 1000; // Byl problém s odstraněním pictureboxu, proto při narazení míčku do pictureboxu se postune o 1000 do řiti.
                    }
                }
            }
Další nepotřebný kód.

private void panel1_Paint(object sender, PaintEventArgs e)
        {
            int bod = 0;
            if (micek.Top > 380)
            {
                bod = -10;
            }
            else
            {
                //if ()
                //{
                //    bod += 5;  // Zjistit, kdy zmizí picturebox (posune se o 1000).
                //}



                label5.Text = Convert.ToString(bod);
            }
        }
 
Nahoru Odpovědět
5.4.2014 21:15
Avatar
rawen
Člen
Avatar
Odpovídá na c-s-borec
rawen:6.4.2014 2:47

To, že říkáš souřadnicím picturebox, je poměrně zavádějící. :D A tento kus kódu je vcelku nic neříkající. :)

  1. Pokud si potřebuješ ukládat něco, s čím manipuluješ za běhu programu, tak na to ti stačí nějaká private proměnná. Pokud jde o souřadnice, tak ti stačí nějaké pole.
  2. Pokud jde o ukládání nějakého nahraného skóre, které si program bude pamatovat kdykoliv při zapnutí hry, tak na to se podívej na zdejší práci se soubory http://www.itnetwork.cz/csharp/soubory . Jednoduše to můžeš ukládat třeba do poznámkového bloku a při zapnutí z něj načítat.

Náhodou tu nedávno na fóru někdo řešil něco podobného http://www.itnetwork.cz/…3328438bac8e , hádám ale, že jsi na to narazil, protože to násobení pohybu -1 jsem tam tehdy doporučoval já a u tebe je to takové dost osamocené. :) Tehdy jsem si to i naprogramoval, takže vím, že na to najdeš moc dobře, ikdyž z takového kousku kódu - kdo ví. :D
Já jsem to tehdy řešil tak, že jsem si udělal nějaké veřejné proměnné, třeba:

private int kulickaX = 50; // souřadnice kuličky X
private int kulickaY = 50; // souřadnice kuličky Y
private int deskaX = 50; // souřadnice desky X
private int deskaY = 50; // souřadnice desky Y

private int R = 10; // poloměr kuličky

private int pohybX = 5; // o kolik se posune v čase ve směru X
private int pohybY = 5; // ..

Timer by sis měl udělat, aby volal metody, co se mají provádět, tedy spíš něco takovéhoto:

private void dispatcherTimer_Tick(object sender, EventArgs e)
{
    VykresliBod();
    PosunKulicku();
}

Přičemž ono posunutí kuličky by stačilo ve smyslu:

kulickaX += pohybX;

, samozřejně by se tam musel hlídat kontakt s deskou a hranama panelu, při jehož kontaktu s horní nebo dolní pohybY vynásobil -1, a při kontaktu s levou nebo pravou stranou pohybX vynásobil -1. :)
Každopádně bys neměl programovat páte přes deváte, ale první si naprogramovat pohyb samotné kuličky, pak třeba přidat pohyblivou desku, pak odrážení atd.. a né hned všechno naráz. :)

Nahoru Odpovědět
6.4.2014 2:47
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
Odpovídá na c-s-borec
Luboš Běhounek Satik:6.4.2014 18:22

místo posouvání do pryč ten picturebox raději schovej přes

.Visible = false;

(a akorát si v tom intersectu i kontroluj, jestli je picturebox vidět).

Pořád nevím, kam ty pictureboxy chceš ukládat :)

Body by měly třeba jako

private int body = 0;

u formuláře - pak jsou tam uloženy po celou dobu, co formulář existuje, pokud je máš jen uvnitř funkce, tak o tu hodnotu vždy přijdeš hned na konci funkce a při jejím dalším volání je tam zase defaultní hodnota.

Nahoru Odpovědět
6.4.2014 18:22
https://www.facebook.com/peasantsandcastles/
Avatar
c-s-borec
Člen
Avatar
c-s-borec:6.4.2014 19:16

Zdravím hoši, kámoš který popisoval můj problém my nakonec půjčil účet.
Nemohl by si mě někdo z Vás dvou spíš přidat na skype? Mohl bych popsat konkrétnější problém/program a zároveň ho i předvést.

Skype: Kostra16

Editováno 6.4.2014 19:16
 
Nahoru Odpovědět
6.4.2014 19:16
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.