Игра Собери картинку - C# (232705)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста доделать до конца мою курсовую на тему Игра Собери картинку. я её уже сделал только у меня с одной картинкой, а нужно что бы я мог выбрать картинку в ToolStripMenu я там добавил выбрать картинку , а как сделать что бы оно выбирало не знаю =((( Подскажите пожалуйста ((( Вот листинг моей проги
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
namespace Kursova
{
    public partial class Form1 : Form
    {
 
        // 4х4 - размер игрового поля
        const int nw = 4, nh = 4;
 
        // графическая поверхность формы
        System.Drawing.Graphics g;
 
        // картинка
        Bitmap pics;
 
        // размер (ширина и высота) клетки
        int cw, ch;
 
        // игровое поле: хранит номера фрагментов
        // картинки
        int[,] field = new int[nw, nh];
 
        // координаты пустой клетки
        int ex, ey;
 
        // признак отображения номера фишки
        Boolean showNumbers = false;
        public Form1()
        {
            InitializeComponent();
            try
            {
                // загружаем файл картинки
                pics = new Bitmap("puzzle.bmp");
            }
            catch (Exception exc)
            {
                MessageBox.Show("Файл 'puzzle.bmp' не найден.\n",
                    "Собери картинку",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                this.Close();
                return;
            }
            // определяем высоту и ширину клетки (фишки)
            cw = (int)(pics.Width / nw);
            ch = (int)(pics.Height / nh);
 
            // установить размер клиентской (внутренней) области формы
            this.ClientSize =
                new System.Drawing.Size(cw * nw + 1, ch * nh + 1 + menuStrip1.Height);
            // рабочая графическая поверхность
            g = this.CreateGraphics();
 
            this.newGame();
        }
        // новая игра
        private void newGame()
        { // располагаем фишки в правильном порядке
            for (int j = 0; j < nh; j++)
                for (int i = 0; i < nw; i++)
                    field[i, j] = j * nw + i + 1;
 
            // последняя фишка - пустая
            field[nw - 1, nh - 1] = 0;
            ex = nw - 1; ey = nh - 1;
 
            this.mixer();        // перемешиваем фишки
            this.drawField();    // выводим игровое поле
 
        }
        // перемешивает фишки
        private void mixer()
        {
            int d;    // положение (относительно пустой) перемещаемой
            // клетки: 0 - слева; 1 - справа; 2 - сверху; 3 - снизу.
 
            int x, y; // перемещаемая клетка
 
            // генератор случайных чисел
            Random rnd = new Random();
 
            for (int i = 0; i < nw * nh * 10; i++)
            // nw * nh * 10 - кол-во перестановок
            {
                x = ex;
                y = ey;
 
                d = rnd.Next(4);
                switch (d)
                {
                    case 0: if (x > 0) x--; break;
                    case 1: if (x < nw - 1) x++; break;
                    case 2: if (y > 0) y--; break;
                    case 3: if (y < nh - 1) y++; break;
                }
                // здесь определили фишку, которую
                // нужно переместить в пустую клетку
                field[ex, ey] = field[x, y];
                field[x, y] = 0;
 
                // запоминаем координаты пустой фишки
                ex = x; ey = y;
            }
        }
        // отрисовывает поле
        private void drawField()
        {
            // содержимое клеток
            for (int i = 0; i < nw; i++)
                for (int j = 0; j < nh; j++)
                {
                    if (field[i, j] != 0)
                        // выводим фишку с картинкой:
                        // ( ((field[i,j] - 1) % nw) * cw,
                        //   (int)((field[i,j] - 1) / nw) * ch ) -
                        // координаты левого верхнего угла
                        // области файла-источника картинки
                        g.DrawImage(pics,
                            new Rectangle(i * cw, j * ch + menuStrip1.Height, cw, ch),
                            new Rectangle(
                                ((field[i, j] - 1) % nw) * cw,
                                ((field[i, j] - 1) / nw) * ch,
                                cw, ch),
                            GraphicsUnit.Pixel);
                    else
                        // выводим пустую фишку
                        g.FillRectangle(SystemBrushes.Control,
                            i * cw, j * ch + menuStrip1.Height, cw, ch);
                    // рисуем границу
                    g.DrawRectangle(Pens.Black,
                        i * cw, j * ch + menuStrip1.Height, cw, ch);
 
                    // номер фишки
                    if ((showNumbers) && field[i, j] != 0)
                        g.DrawString(Convert.ToString(field[i, j]),
                            new Font("Tahoma", 10, FontStyle.Bold),
                            Brushes.Black, i * cw + 5, j * ch + 5 + menuStrip1.Height);
                }
        }
        // проверяет, расположены ли фишки в правильном порядке
        private Boolean finish()
        {
            // координаты клетки
            int i = 0;
            int j = 0;
 
            int c;       // число в клетке
 
            // фишки расположены правильно, если
            // числа в них образуют матрицу:
            //   1  2  3  4
            //   5  6  7  8
            //   9 10 11 12
            //  13 14 15
 
            for (c = 1; c < nw * nh; c++)
            {
                if (field[i, j] != c) return false;
 
                // к следующей клетке
                if (i < nw - 1) i++;
                else { i = 0; j++; }
            }
            return true;
        }
        // перемещает фишку, на которой сделан щелчок,
        // в соседнюю пустую клетку:
        // (cx, cy) - клетка, в которой сделан щелчок,
        // (ex, ey) - пустая клетка
        private void move(int cx, int cy)
        {
            // проверим, возможен ли обмен
            if (!(((Math.Abs(cx - ex) == 1) && (cy - ey == 0)) ||
                ((Math.Abs(cy - ey) == 1) && (cx - ex == 0))))
                return;
            // обмен. переместим фишку из (x, y) в (ex, ey)
            field[ex, ey] = field[cx, cy];
            field[cx, cy] = 0;
 
            ex = cx; ey = cy;
 
            // отрисовать поле
            this.drawField();
 
            if (this.finish())
            {
                field[nw - 1, nh - 1] = nh * nw;
                this.drawField();
 
                // игра закончена. сыграть еще раз?
                // No  - завершить работу программы,
                // Yes - новая игра
                if (MessageBox.Show("Поздравляю! Вы справились с поставленной задачей!\n" +
                         "Еще раз?", "Собери картинку",
                          MessageBoxButtons.YesNo,
                          MessageBoxIcon.Question)
                          == System.Windows.Forms.DialogResult.No)
                    this.Close();
                else this.newGame();
            }
        }
        // обработка события Paint
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            drawField();
 
        }
        // щелчок кнопкой мыши на игровом поле
        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            // преобразуем координаты мыши в координаты клетки
            move(e.X / cw, (e.Y - menuStrip1.Height) / ch);
 
        }
        // команда Новая игра
        private void новаяИграToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            newGame();
        }

        private void оПрограмеToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2();
            f.ShowDialog();
            
        }

    }
}

Решение задачи: «Игра Собери картинку»

textual
Листинг программы
private void CreatePicture()
        {
            try
            {
                // загружаем файл картинки
                pics = new Bitmap(picture);
            }
            catch (Exception exc)
            {
                MessageBox.Show("Файл " + picture + " не найден.\n",
                    "Собери картинку",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                this.Close();
                return;
            }
 
            field = new int[nw, nh];
 
            // определяем высоту и ширину клетки (фишки)
            cw = (int)(pics.Width / nw);
            ch = (int)(pics.Height / nh);
 
            // установить размер клиентской (внутренней) области формы
            this.ClientSize =
                new System.Drawing.Size(cw * nw + 1, ch * nh + 1 + menuStrip1.Height);
            // рабочая графическая поверхность
            g = this.CreateGraphics();
 
            this.newGame();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.636 из 5