C# Snake

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

bohmacek
Level 1
Level 1
Příspěvky: 90
Registrován: prosinec 15
Pohlaví: Nespecifikováno
Stav:
Offline

C# Snake

Příspěvekod bohmacek » 12 dub 2016 21:52

Zdravím.
Mám jako projekt do školy udělat hada. Můj had je v poli pictureboxů 15x15 a 40x40 pixelů. Po stisknutí buttonu se naspawnuje pole a po stisknutí druhého tlačítka se mi spawne jídlo pro hada a taky had samotný. Had se pohybuje a je to 1 čtvereček. Když sní jídlo, dole se v labelu ukáže jeho délka. Ovšem nevím jak udělat optický pohyb tohoto hada. Programově se přičítá ( jeho délka ), ale opticky je to furt jenom jeden čtvereček. Posílám source a prosím vás o pomoc. Předem děkuji všem za vaše rady a podobně.

Zde je Form1

Kód: Vybrat vše

namespace HraSnake
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        PictureBox[,] pole = new PictureBox[15, 15];
        Random nahKulicka = new Random();
        Hat had;
        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 15; i++)
            {
                for (int o = 0; o < 15; o++)
                {
                    PictureBox p = new PictureBox();
                    p.Width = 40;
                    p.Height = 40;
                    p.BackgroundImage = Image.FromFile("myluju.png");
                    p.Location = new Point(i * 40, o * 40);
                    p.BorderStyle = BorderStyle.Fixed3D;
                    pole[i, o] = p;
                    panel1.Controls.Add(pole[i, o]);

                }
            }
            button1.Visible = false;
            button3.Visible = true;
            had = new Hat(1, 3, 5);
            timer2.Start();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            timer2.Stop();
            string message = "Doopravdy chcete ukončit hru ?";
            string caption = "Form Closing";
            var result = MessageBox.Show(message, caption,
                                 MessageBoxButtons.YesNo,
                                 MessageBoxIcon.Question);
            if (result == DialogResult.Yes)
            {
                this.Close();
            }
            if (result == DialogResult.No)
            {
                timer1.Start();
                timer2.Start();
            }

        }
        Image jidlo = Image.FromFile("lol.png");
        Image hadik = Image.FromFile("qwre.png");
        int r1 = 0;
        int r2 = 0;
        private void button3_Click(object sender, EventArgs e)
        {
             r1 = nahKulicka.Next(0, 15);
             r2 = nahKulicka.Next(0, 15);
            pole[r1, r2].Image = jidlo;
            for (int i = 0; i < had.Delka; i++)
            {
                pole[had.Zleva + i, had.Shora].Image = hadik;
            }
            button3.Enabled = false;
            button3.Visible = false;
            button2.Enabled = true;
            button2.Visible = true;
            had.Dolu = true;
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
           

            if (had.Nahoru)
            {
               
                Zruseni(had.Zleva, had.Shora);
                had.Pohyb(0, -1);
                if (had.Shora < 0) had.Shora = 14;
                Hybani(0,-1);
            }

            if (had.Dolu)
            {
               
                Zruseni(had.Zleva, had.Shora);
                had.Pohyb(0, 1);
                if (had.Shora > 14) had.Shora = 0;
                Hybani(0,1);
            }
            if (had.Doleva)
            {
                Zruseni(had.Zleva, had.Shora);
                had.Pohyb(-1, 0);
                if (had.Zleva < 0) had.Zleva = 14;
                Hybani(-1,0);
            }
            if (had.Doprava)
            {
                Zruseni(had.Zleva, had.Shora);
                had.Pohyb(1, 0);
                if (had.Zleva>14) had.Zleva = 0;
                Hybani(1,0);
            }
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.W)
            {
                had.Dolu = false;
                had.Doleva = false;
                had.Doprava = false;
                had.Nahoru = true;
             


            }
            if (e.KeyCode == Keys.S)
            {
                had.Nahoru = false;
                had.Doleva = false;
                had.Doprava = false;
                had.Dolu = true;
               

            }
            if (e.KeyCode == Keys.D)
            {
                had.Dolu = false;
                had.Doleva = false;
                had.Nahoru = false;
                had.Doprava = true;
             
            }
            if (e.KeyCode == Keys.A)
            {
                had.Dolu = false;
                had.Nahoru = false;
                had.Doprava = false;
                had.Doleva = true;
             
            }
            if (e.KeyCode == Keys.Escape)
            {
                timer1.Stop();
                timer2.Stop();
                string message = "Doopravdy chcete ukončit hru ?";
                string caption = "Form Closing";
                var result = MessageBox.Show(message, caption,
                                     MessageBoxButtons.YesNo,
                                     MessageBoxIcon.Question);
                if (result == DialogResult.Yes)
                {
                    this.Close();
                }
                if (result == DialogResult.No)
                {
                    timer1.Start();
                    timer2.Start();
                }

            }

        }
       

        void Hybani(int kamX,int kamY)
        {
            try
            {
                    pole[had.Zleva , had.Shora].Image = hadik;
            }
            catch
            { }

        }
   

        void Zruseni(int x, int y)
        {

            pole[x,y].Image = null;
        }


        private void button2_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.W)
            {
                had.Dolu = false;
                had.Doleva = false;
                had.Doprava = false;
                had.Nahoru = true;


            }
            if (e.KeyCode == Keys.S)
            {
                had.Nahoru = false;
                had.Doleva = false;
                had.Doprava = false;
                had.Dolu = true;


            }
            if (e.KeyCode == Keys.D)
            {
                had.Dolu = false;
                had.Doleva = false;
                had.Nahoru = false;
                had.Doprava = true;

            }
            if (e.KeyCode == Keys.A)
            {
                had.Dolu = false;
                had.Nahoru = false;
                had.Doprava = false;
                had.Doleva = true;

            }
        }

        private void timer2_Tick(object sender, EventArgs e)
        {
            label3.Text = "Souřadnice: " + had.Zleva + ", " + had.Shora + "     Delka hada:" + had.Delka;

            if (r1 == had.Zleva && r2 == had.Shora)
            {
                had.Delka++;
                r1 = nahKulicka.Next(0, 15);
                r2 = nahKulicka.Next(0, 15);
                pole[r1, r2].Image = jidlo;
            }
        }
    }
}

Zde je class Hat

namespace HraSnake

Kód: Vybrat vše

{
    class Hat
    {
        int delka;
        int zleva;
        int shora;
        bool nahoru = false;
        bool dolu = false;
        bool doprava = false;
        bool doleva = false;

        public int Delka
        {

            get
            {
                return delka;
            }

            set
            {
                delka = value;
            }
        }

        public int Zleva
        {
            get
            {
                return zleva;
            }

            set
            {
                zleva = value;
            }
        }

        public int Shora
        {
            get
            {
                return shora;
            }

            set
            {
                shora = value;
            }
        }

        public bool Nahoru
        {
            get
            {
                return nahoru;
            }
           
            set
            {
                dolu = false;
                doleva = false;
                doprava = false;
                nahoru = value;
            }
        }

        public bool Dolu
        {
            get
            {
                return dolu;
            }

            set
            {
               
                dolu = value;
            }
        }

        public bool Doprava
        {
            get
            {
                return doprava;
            }

            set
            {
               
                doprava = value;
            }
        }

        public bool Doleva
        {
            get
            {
                return doleva;
            }

            set
            {
               
                doleva = value;

            }
        }

        public Hat(int delka,int zleva, int shora)
        {
            this.Delka = delka;
            this.Zleva = zleva;
            this.Shora = shora;
        }

        public void Pohyb(int oKolikX, int oKolikY)
        {
            Zleva += oKolikX;
            Shora += oKolikY;
        }
     

    }
}]

Prosím o nekopírování, i když tento projekt je takový s prominutím SHIT, že by to nemělo smysl. Děkuji ještě jednou za vaše rady.
Naposledy upravil(a) bohmacek dne 13 dub 2016 14:31, celkem upraveno 1 x.

Reklama
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7359
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: C# Snake

Příspěvekod faraon » 12 dub 2016 22:09

Ten zdroják zvýrazni pátým tlačítkem v první řadě, to je "Zobrazení kódu". Bude to přehlednější a zachováš původní formátování.

Když se ti ten tvůj čtvereček pohybuje, jak zajišťuješ že z předchozí pozice zmizí a na nové se objeví?

Co takhle místo jedněch souřadnic použít pole, a nechat zobrazovat vždy takový počet čtverečků, jaká je délka hada? Při pohybu se budou souřadnice posouvat v poli, a při prodloužení se prodlouží použitá část pole...
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
Eldan
Level 3.5
Level 3.5
Příspěvky: 691
Registrován: leden 16
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: C# Snake

Příspěvekod Eldan » 13 dub 2016 09:13

Můžeš použít pole/seznam aktivních kusů hada jako souřadnice (o velikosti jako had), kde když se had nají tak poslední prvek neuberes, jinak budeš vždy všechny prvky posouvat.

Sent from my A0001 using Tapatalk


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti