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

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

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

Помогите пожалуйста доделать до конца курсовую на тему Игра Собери картинку. Программа уже создана, там просто у меня не выходит изменить в вкладке о программе имя и год. И саму программу перевести на украинский язык=(((( Помогите поменять на Курсовая робота Сахно Олексія 2017 рік. Спасибо!

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

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8.  
  9. namespace Kursova
  10. {
  11.     public partial class Form1 : Form
  12.     {
  13.  
  14.         // 4х4 - размер игрового поля
  15.         const int nw = 4, nh = 4;
  16.  
  17.         // графическая поверхность формы
  18.         System.Drawing.Graphics g;
  19.  
  20.         // картинка
  21.         Bitmap pics;
  22.  
  23.         // размер (ширина и высота) клетки
  24.         int cw, ch;
  25.  
  26.         // игровое поле: хранит номера фрагментов
  27.         // картинки
  28.         int[,] field = new int[nw, nh];
  29.  
  30.         // координаты пустой клетки
  31.         int ex, ey;
  32.  
  33.         // признак отображения номера фишки
  34.         Boolean showNumbers = false;
  35.         public Form1()
  36.         {
  37.             InitializeComponent();
  38.             try
  39.             {
  40.                 // загружаем файл картинки
  41.                 pics = new Bitmap("puzzle.bmp");
  42.             }
  43.             catch (Exception exc)
  44.             {
  45.                 MessageBox.Show("Файл 'puzzle.bmp' не найден.\n",
  46.                     "Собери картинку",
  47.                     MessageBoxButtons.OK,
  48.                     MessageBoxIcon.Error);
  49.                 this.Close();
  50.                 return;
  51.             }
  52.             // определяем высоту и ширину клетки (фишки)
  53.             cw = (int)(pics.Width / nw);
  54.             ch = (int)(pics.Height / nh);
  55.  
  56.             // установить размер клиентской (внутренней) области формы
  57.             this.ClientSize =
  58.                 new System.Drawing.Size(cw * nw + 1, ch * nh + 1 + menuStrip1.Height);
  59.             // рабочая графическая поверхность
  60.             g = this.CreateGraphics();
  61.  
  62.             this.newGame();
  63.         }
  64.         // новая игра
  65.         private void newGame()
  66.         { // располагаем фишки в правильном порядке
  67.             for (int j = 0; j < nh; j++)
  68.                 for (int i = 0; i < nw; i++)
  69.                     field[i, j] = j * nw + i + 1;
  70.  
  71.             // последняя фишка - пустая
  72.             field[nw - 1, nh - 1] = 0;
  73.             ex = nw - 1; ey = nh - 1;
  74.  
  75.             this.mixer();        // перемешиваем фишки
  76.             this.drawField();    // выводим игровое поле
  77.  
  78.         }
  79.         // перемешивает фишки
  80.         private void mixer()
  81.         {
  82.             int d;    // положение (относительно пустой) перемещаемой
  83.             // клетки: 0 - слева; 1 - справа; 2 - сверху; 3 - снизу.
  84.  
  85.             int x, y; // перемещаемая клетка
  86.  
  87.             // генератор случайных чисел
  88.             Random rnd = new Random();
  89.  
  90.             for (int i = 0; i < nw * nh * 10; i++)
  91.             // nw * nh * 10 - кол-во перестановок
  92.             {
  93.                 x = ex;
  94.                 y = ey;
  95.  
  96.                 d = rnd.Next(4);
  97.                 switch (d)
  98.                 {
  99.                     case 0: if (x > 0) x--; break;
  100.                     case 1: if (x < nw - 1) x++; break;
  101.                     case 2: if (y > 0) y--; break;
  102.                     case 3: if (y < nh - 1) y++; break;
  103.                 }
  104.                 // здесь определили фишку, которую
  105.                 // нужно переместить в пустую клетку
  106.                 field[ex, ey] = field[x, y];
  107.                 field[x, y] = 0;
  108.  
  109.                 // запоминаем координаты пустой фишки
  110.                 ex = x; ey = y;
  111.             }
  112.         }
  113.         // отрисовывает поле
  114.         private void drawField()
  115.         {
  116.             // содержимое клеток
  117.             for (int i = 0; i < nw; i++)
  118.                 for (int j = 0; j < nh; j++)
  119.                 {
  120.                     if (field[i, j] != 0)
  121.                         // выводим фишку с картинкой:
  122.                         // ( ((field[i,j] - 1) % nw) * cw,
  123.                         //   (int)((field[i,j] - 1) / nw) * ch ) -
  124.                         // координаты левого верхнего угла
  125.                         // области файла-источника картинки
  126.                         g.DrawImage(pics,
  127.                             new Rectangle(i * cw, j * ch + menuStrip1.Height, cw, ch),
  128.                             new Rectangle(
  129.                                 ((field[i, j] - 1) % nw) * cw,
  130.                                 ((field[i, j] - 1) / nw) * ch,
  131.                                 cw, ch),
  132.                             GraphicsUnit.Pixel);
  133.                     else
  134.                         // выводим пустую фишку
  135.                         g.FillRectangle(SystemBrushes.Control,
  136.                             i * cw, j * ch + menuStrip1.Height, cw, ch);
  137.                     // рисуем границу
  138.                     g.DrawRectangle(Pens.Black,
  139.                         i * cw, j * ch + menuStrip1.Height, cw, ch);
  140.  
  141.                     // номер фишки
  142.                     if ((showNumbers) && field[i, j] != 0)
  143.                         g.DrawString(Convert.ToString(field[i, j]),
  144.                             new Font("Tahoma", 10, FontStyle.Bold),
  145.                             Brushes.Black, i * cw + 5, j * ch + 5 + menuStrip1.Height);
  146.                 }
  147.         }
  148.         // проверяет, расположены ли фишки в правильном порядке
  149.         private Boolean finish()
  150.         {
  151.             // координаты клетки
  152.             int i = 0;
  153.             int j = 0;
  154.  
  155.             int c;       // число в клетке
  156.  
  157.             // фишки расположены правильно, если
  158.             // числа в них образуют матрицу:
  159.             //   1  2  3  4
  160.             //   5  6  7  8
  161.             //   9 10 11 12
  162.             //  13 14 15
  163.  
  164.             for (c = 1; c < nw * nh; c++)
  165.             {
  166.                 if (field[i, j] != c) return false;
  167.  
  168.                 // к следующей клетке
  169.                 if (i < nw - 1) i++;
  170.                 else { i = 0; j++; }
  171.             }
  172.             return true;
  173.         }
  174.         // перемещает фишку, на которой сделан щелчок,
  175.         // в соседнюю пустую клетку:
  176.         // (cx, cy) - клетка, в которой сделан щелчок,
  177.         // (ex, ey) - пустая клетка
  178.         private void move(int cx, int cy)
  179.         {
  180.             // проверим, возможен ли обмен
  181.             if (!(((Math.Abs(cx - ex) == 1) && (cy - ey == 0)) ||
  182.                 ((Math.Abs(cy - ey) == 1) && (cx - ex == 0))))
  183.                 return;
  184.             // обмен. переместим фишку из (x, y) в (ex, ey)
  185.             field[ex, ey] = field[cx, cy];
  186.             field[cx, cy] = 0;
  187.  
  188.             ex = cx; ey = cy;
  189.  
  190.             // отрисовать поле
  191.             this.drawField();
  192.  
  193.             if (this.finish())
  194.             {
  195.                 field[nw - 1, nh - 1] = nh * nw;
  196.                 this.drawField();
  197.  
  198.                 // игра закончена. сыграть еще раз?
  199.                 // No  - завершить работу программы,
  200.                 // Yes - новая игра
  201.                 if (MessageBox.Show("Поздравляю! Вы справились с поставленной задачей!\n" +
  202.                          "Еще раз?", "Собери картинку",
  203.                           MessageBoxButtons.YesNo,
  204.                           MessageBoxIcon.Question)
  205.                           == System.Windows.Forms.DialogResult.No)
  206.                     this.Close();
  207.                 else this.newGame();
  208.             }
  209.         }
  210.         // обработка события Paint
  211.         private void Form1_Paint(object sender, PaintEventArgs e)
  212.         {
  213.             drawField();
  214.  
  215.         }
  216.         // щелчок кнопкой мыши на игровом поле
  217.         private void Form1_MouseClick(object sender, MouseEventArgs e)
  218.         {
  219.             // преобразуем координаты мыши в координаты клетки
  220.             move(e.X / cw, (e.Y - menuStrip1.Height) / ch);
  221.  
  222.         }
  223.         // команда Новая игра
  224.         private void новаяИграToolStripMenuItem1_Click(object sender, EventArgs e)
  225.         {
  226.             newGame();
  227.         }
  228.  
  229.  
  230.  
  231.         private void оПрограмеToolStripMenuItem_Click(object sender, EventArgs e)
  232.         {
  233.             Form2 f = new Form2();
  234.             f.ShowDialog();
  235.            
  236.         }
  237.  
  238.        
  239.  
  240.        
  241.     }
  242. }

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


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

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

15   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут