Beispiel #1
0
        private void btnMouseDown(object sender, MouseEventArgs e)
        {
            PuzzleButton btn = (PuzzleButton)sender;

            if (vrsta)
            {
                if (btn.Text != "")
                {
                    moveBtn = btn;
                    Bitmap bit = new Bitmap(50, 50);
                    moveBtn.DrawToBitmap(bit, new Rectangle(Point.Empty, bit.Size));
                    moveCursor     = new Cursor(bit.GetHicon());
                    Cursor.Current = moveCursor;
                    DoDragDrop(this, DragDropEffects.Move);
                }
            }
            else if (btn.Image != null)
            {
                moveBtn = btn;
                Bitmap bit = new Bitmap(50, 50);
                moveBtn.DrawToBitmap(bit, new Rectangle(Point.Empty, bit.Size));
                moveCursor     = new Cursor(bit.GetHicon());
                Cursor.Current = moveCursor;
                DoDragDrop(this, DragDropEffects.Move);
            }
        }
Beispiel #2
0
        private void flpPuzzle_DragDrop(object sender, DragEventArgs e)
        {
            Point        p   = this.flpPuzzle.PointToClient(new Point(e.X, e.Y));
            PuzzleButton btn = (PuzzleButton)flpPuzzle.GetChildAtPoint(p);

            if (btn != null)
            {
                if (vrsta)
                {
                    if (btn.Text == "")
                    {
                        btn.BackColor     = Color.LightSkyBlue;
                        moveBtn.BackColor = Color.GhostWhite;
                        btn.Text          = moveBtn.Text;
                        btn.value         = int.Parse(moveBtn.Text);
                        moveBtn.value     = 0;
                        moveBtn.Text      = "";
                        rjesenje();
                        flpPuzzle.Focus();
                    }
                }

                else if (btn.Image == null)
                {
                    btn.Image     = moveBtn.Image;
                    moveBtn.Image = null;
                    btn.value     = moveBtn.value;
                    moveBtn.value = 0;
                    rjesenje();
                    flpPuzzle.Focus();
                }
            }
        }
Beispiel #3
0
        //pritiskom na button nova puzzla poziva se ova metoda koja slaže novu igru tako da nasumično rasporedi
        //brojeve buttona
        private void btnNovaPuzzla_Click(object sender, EventArgs e)
        {
            grbSve.Enabled = false;

            n      = (int)numN.Value;
            m      = (int)numM.Value;
            prazno = (int)numPrazno.Value;
            int brPolja = n * m - prazno;

            flpPuzzle.Width  = n * 50 + n + 1;
            flpPuzzle.Height = m * 50 + m + 1;

            btnOdustajem.Visible  = true;
            btnOdustajem.Location = new Point(flpPuzzle.Width / 2 - 40, flpPuzzle.Location.Y + flpPuzzle.Height);

            Random rand = new Random();

            for (int i = 0; i < n * m; i++)
            {
                PuzzleButton pbtn = new PuzzleButton();
                pbtn.pos = i + 1;
                if (nacin)
                {
                    pbtn.Click += new EventHandler(swapLabel);
                }
                else
                {
                    pbtn.MouseDown += new MouseEventHandler(btnMouseDown);
                }
                flpPuzzle.Controls.Add(pbtn);
            }

            List <int> listaBrojeva = new List <int>(), listaBrojeva2 = new List <int>();
            int        r, inverzije = 0;

            for (int i = 1; i <= brPolja; i++)
            {
                listaBrojeva.Add(i);
            }

            while (listaBrojeva.Count != 0)
            {
                r = rand.Next(listaBrojeva.Count);
                listaBrojeva2.Add(listaBrojeva[r]);
                listaBrojeva.RemoveAt(r);
            }

            // za jedno prazno polje činimo igru rješivom
            if (prazno == 1)
            {
                bool promjena = false;
                for (int i = 0; i < listaBrojeva2.Count; ++i)
                {
                    for (int j = i + 1; j < listaBrojeva2.Count; ++j)
                    {
                        if (listaBrojeva2[i] > listaBrojeva2[j])
                        {
                            ++inverzije;
                        }
                    }
                }
                if (n % 2 == 1)
                {
                    if (inverzije % 2 == 1)
                    {
                        promjena = true;
                    }
                }
                else
                {
                    if (m % 2 == 0)
                    {
                        if ((inverzije + m) % 2 == 1)
                        {
                            promjena = true;
                        }
                    }
                    else
                    {
                        if ((inverzije + m) % 2 == 0)
                        {
                            promjena = true;
                        }
                    }
                }
                if (promjena)
                {
                    for (int i = 0; i < listaBrojeva2.Count; ++i)
                    {
                        if (listaBrojeva2[i] > listaBrojeva2[i + 1])
                        {
                            int tmp = listaBrojeva2[i];
                            listaBrojeva2[i]     = listaBrojeva2[i + 1];
                            listaBrojeva2[i + 1] = tmp;
                            break;
                        }
                    }
                }
            }


            //provjeravamo je li vrsta puzzle brojevi ili slika, ako su brojevi dodijeli nasumicno brojeve
            //ako se želi implementirati slika, treba sliku razrezati na n*m dijelova te nasumicno te dijelove podijeliti
            //pazeći da postavljamo za odgovarajući dio odgovarajući value svakom buttonu
            if (vrsta)
            {
                foreach (PuzzleButton btn in flpPuzzle.Controls)
                {
                    if (listaBrojeva2.Count != 0)
                    {
                        btn.Text      = listaBrojeva2[0] + "";
                        btn.value     = listaBrojeva2[0];
                        btn.BackColor = Color.LightSkyBlue;
                        listaBrojeva2.RemoveAt(0);
                    }
                    else
                    {
                        btn.Text      = "";
                        btn.value     = 0;
                        btn.BackColor = Color.GhostWhite;
                    }
                }
            }
            else
            {
                Bitmap img          = Properties.Resources.slagalica;
                Bitmap newimg       = resizeImage(img, new Size(n * 50, m * 50));
                var    Pixel_format = newimg.PixelFormat;
                var    imgarray     = new Image[n * m];
                //int k = 0;
                for (int i = 0; i < m; i++)
                {
                    for (int j = 0; j < n; j++)
                    {
                        var        index = i * n + j;
                        RectangleF Tile  = new RectangleF();
                        Tile.Width      = 50;
                        Tile.Height     = 50;
                        Tile.X          = j * 50;
                        Tile.Y          = i * 50;
                        imgarray[index] = newimg.Clone(Tile, Pixel_format);
                    }
                }


                foreach (PuzzleButton btn in flpPuzzle.Controls)
                {
                    if (listaBrojeva2.Count != 0)
                    {
                        btn.Image = imgarray[listaBrojeva2[0] - 1];
                        btn.value = listaBrojeva2[0];
                        listaBrojeva2.RemoveAt(0);
                    }
                    else
                    {
                        btn.Image = null;
                        btn.value = 0;
                    }
                }
            }
        }
Beispiel #4
0
        //metoda kojom mijenjamo buttone prilikom pritiska na neki button - provjerava se je li pritisnut button prazan
        //ako nije tada se prazan button sprema u varijablu i provjeravaju se pozicije buttona kao uvjet za promjenu
        private void swapLabel(Object sender, EventArgs e)
        {
            PuzzleButton btn = (PuzzleButton)sender;

            if (vrsta)
            {
                if (btn.Text == "")
                {
                    return;
                }
            }
            else
            {
                if (btn.Image == null)
                {
                    return;
                }
            }

            PuzzleButton prazniBtn = null;

            if (vrsta)
            {
                foreach (PuzzleButton bt in flpPuzzle.Controls)
                {
                    if (bt.Text == "")
                    {
                        prazniBtn = bt;
                        break;
                    }
                }

                if ((btn.pos == (prazniBtn.pos - 1) && prazniBtn.pos % n != 1) || btn.pos == (prazniBtn.pos + n) ||
                    btn.pos == (prazniBtn.pos - n) || (btn.pos == (prazniBtn.pos + 1) && prazniBtn.pos % n != 0))
                {
                    prazniBtn.BackColor = Color.LightSkyBlue;
                    btn.BackColor       = Color.GhostWhite;
                    prazniBtn.value     = btn.value;
                    prazniBtn.Text      = btn.Text;
                    btn.Text            = "";
                    btn.value           = 0;
                    flpPuzzle.Focus();
                }
                rjesenje();
            }
            else
            {
                foreach (PuzzleButton bt in flpPuzzle.Controls)
                {
                    if (bt.Image == null)
                    {
                        prazniBtn = bt;
                        break;
                    }
                }

                if ((btn.pos == (prazniBtn.pos - 1) && prazniBtn.pos % n != 1) || btn.pos == (prazniBtn.pos + n) || btn.pos == (prazniBtn.pos - n) || (btn.pos == (prazniBtn.pos + 1) && prazniBtn.pos % n != 0))
                {
                    prazniBtn.Image = btn.Image;
                    prazniBtn.value = btn.value;
                    btn.value       = 0;
                    btn.Image       = null;
                    flpPuzzle.Focus();
                }
                rjesenje();
            }
        }