Обмен картинок в игре "Пятнашки" - C#

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

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

Пишу игру пятнашки но без использования элементов формы. Работаю со списками. При нажатии на части картинок должна происходить их замена, собственно говоря это и происходит, но криво. На 2-3 скрине замена происходит правильно, а вот на 3-4 нет(3 строка 3 столбец должен быть белым) на 174-178 строке происходит замена местами кликнутых картинок. Почему же у меня неправильно происходит замена, подскажите пожалуйста.

Решение задачи: «Обмен картинок в игре "Пятнашки"»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.IO;
  11. using System.Timers;
  12.  
  13. namespace WindowsFormsApplication5
  14. {
  15.     public partial class Form1 : Form
  16.     {
  17.         public Form1()
  18.         {
  19.             InitializeComponent();
  20.         }
  21.         int movement = 0;
  22.         string place;
  23.         int countOfBlocks = 0;
  24.         int mode = 0;
  25.         int width = 0;
  26.         int height = 0;
  27.         List<Bitmap> listBitMap = new List<Bitmap>();
  28.         List<Point> listPoint = new List<Point>();
  29.         int state = 1;
  30.         public void Form1_Paint(object sender, PaintEventArgs e)
  31.         {
  32.             var g = e.Graphics;
  33.             switch (state)
  34.             {
  35.                 case 1:
  36.                     g.DrawString("НАЧАТЬ ИГРУ", new Font("Arial black", 30), new SolidBrush(Color.Black), 300, 100);
  37.                     g.DrawString("РЕКОРДЫ", new Font("Arial black", 30), new SolidBrush(Color.Black), 330, 150);
  38.                     g.DrawString("ПРАВИЛА ИГРЫ", new Font("Arial black", 30), new SolidBrush(Color.Black), 275, 200);
  39.                     break;
  40.                 case 2:
  41.                     for (var i = 0; i < countOfBlocks; i++)
  42.                     {
  43.                         listBitMap.Add(new Bitmap(place + i + ".jpg"));
  44.                     }
  45.  
  46.                     for (height = 0; height < 4; height++)
  47.                         for (width = 0; width < 4; width++)
  48.                         {
  49.                             listPoint.Add(new Point(177 * width, 107 * height));
  50.                         }
  51.  
  52.                     for (int i = 0; i < countOfBlocks; i++)
  53.                     {
  54.                         if (listPoint.ElementAt(i) != null)
  55.                         {
  56.                             g.DrawImage(listBitMap[i], listPoint[i]);
  57.                         }
  58.                     }
  59.                     Bitmap pole = new Bitmap("pole.png");
  60.                     g.DrawImage(pole, 710, 0);
  61.  
  62.                     break;
  63.                 case 3:
  64.                     g.DrawString(
  65.                         " Классическое игровое поле представляет собой матрицы 3х3, 4х4, 5х5 клеток, на котором по порядку (слева - направо и сверху\n " +
  66.                         "  - вниз) располагаются пазлы картинки. Последний пазл – пустой. Пазлы перемешиваются определенным образом, и задача\n" +
  67.                         "  игрока состоит в том, чтобы восстановить их первоначальное правильное расположение. Делать это можно лишь путем\n" +
  68.                         " перемещения на пустой пазл другой, соседний с ним пазл (расположенный слева, справа, сверху или снизу от пустой).\n"
  69.                         , new Font("Arial", 11), new SolidBrush(Color.Black), 10, 10);
  70.                     g.DrawString("Назад", new Font("Arial", 11), new SolidBrush(Color.Black), 420, 100);
  71.                     break;
  72.                 case 4:
  73.                     g.DrawString("3x3", new Font("Arial black", 40), new SolidBrush(Color.Black), 420, 100);
  74.                     g.DrawString("4x4", new Font("Arial black", 40), new SolidBrush(Color.Black), 420, 150);
  75.                     g.DrawString("5x5", new Font("Arial black", 40), new SolidBrush(Color.Black), 420, 200);
  76.                     break;
  77.                 case 5:
  78.                     for (var i = 0; i < countOfBlocks; i++)
  79.                     {
  80.                         listBitMap.Add(new Bitmap(place + i + ".jpg"));
  81.                     }
  82.  
  83.                     for (height = 0; height < 3; height++)
  84.                         for (width = 0; width < 3; width++)
  85.                         {
  86.                             listPoint.Add(new Point(233 * width, 141 * height));
  87.                         }
  88.  
  89.                     for (int i = 0; i < countOfBlocks; i++)
  90.                     {
  91.                         if (listPoint.ElementAt(i) != null)
  92.                         {
  93.                             g.DrawImage(listBitMap[i], listPoint[i]);
  94.                         }
  95.                     }
  96.                     Bitmap pole2 = new Bitmap("pole.png");
  97.                     g.DrawImage(pole2, 710, 0);
  98.                     state = 2;
  99.                     break;
  100.                 case 6:
  101.                     for (var i = 0; i < countOfBlocks; i++)
  102.                     {
  103.                         listBitMap.Add(new Bitmap(place + i + ".jpg"));
  104.                     }
  105.  
  106.                     for (height = 0; height < 5; height++)
  107.                         for (width = 0; width < 5; width++)
  108.                         {
  109.                             listPoint.Add(new Point(140 * width, 85 * height));
  110.                         }
  111.  
  112.                     for (int i = 0; i < countOfBlocks; i++)
  113.                     {
  114.                         if (listPoint.ElementAt(i) != null)
  115.                         {
  116.                             g.DrawImage(listBitMap[i], listPoint[i]);
  117.                         }
  118.                     }
  119.                     Bitmap pole1 = new Bitmap("pole.png");
  120.                     g.DrawImage(pole1, 710, 0);
  121.                     state = 2;
  122.                     break;
  123.             }
  124.         }
  125.  
  126.         private void Form1_Load(object sender, EventArgs e)
  127.         {
  128.  
  129.         }
  130.  
  131.         int firstClick = -1;
  132.         int secondClick = -1;
  133.  
  134.         public void Form1_MouseClick(object sender, MouseEventArgs e)
  135.         {
  136.             switch (state)
  137.             {
  138.                 case 1:
  139.                     if (e.X >= 295 && e.X <= 635 && e.Y >= 100 && e.Y <= 150)
  140.                     {
  141.                         state = 4;
  142.                         this.Invalidate();
  143.                     }
  144.                     if (e.X >= 265 && e.X <= 660 && e.Y >= 200 && e.Y <= 250)
  145.                     {
  146.                         state = 3;
  147.                         this.Invalidate();
  148.                     }
  149.                     break;
  150.                 case 2:
  151.                     for (int i = 0; i < listPoint.Count; i++)
  152.                     {
  153.                         if (e.X >= listPoint[i].X && e.X <= (listPoint[i].X + 174) && e.Y >= listPoint[i].Y && e.Y <= (listPoint[i].Y + 105))
  154.                         {
  155.  
  156.                             if (firstClick < 0)
  157.                             {
  158.                                 firstClick = i;
  159.                             }
  160.                             else
  161.                             {
  162.                                 secondClick = i;
  163.                                 if (firstClick == secondClick)
  164.                                 {
  165.                                     secondClick = -1;
  166.                                 }
  167.                                 else
  168.                                 {
  169.                                     if (Math.Abs(firstClick - secondClick) == 1 || Math.Abs(firstClick - secondClick) == mode)
  170.                                     {
  171.                                         var g = this.CreateGraphics();
  172.                                         if (g != null)
  173.                                         {
  174.                                             listBitMap[firstClick] = new Bitmap(place + secondClick + ".jpg");
  175.                                             listBitMap[secondClick] = new Bitmap(place + firstClick + ".jpg");
  176.                                             g.DrawImage(listBitMap[firstClick], listPoint[firstClick]);
  177.                                             g.DrawImage(listBitMap[secondClick], listPoint[secondClick]);
  178.                                             firstClick = secondClick = -1;
  179.                                             movement++;
  180.                                             g.Dispose();
  181.                                         }
  182.                                     }
  183.                                 }
  184.                             }
  185.                         }
  186.                     }
  187.                     if (e.X >= 200 && e.X <= 260 && e.Y >= 400 && e.Y <= 450)
  188.                     {
  189.                         this.Invalidate();
  190.                     }
  191.                     break;
  192.                 case 3:
  193.                     if (e.X >= 420 && e.X <= 470 && e.Y >= 100 && e.Y <= 120)
  194.                     {
  195.                         state = 1;
  196.                         this.Invalidate();
  197.                     }
  198.                     break;
  199.                 case 4:
  200.                     if (e.X >= 420 && e.X <= 535 && e.Y >= 120 && e.Y <= 160)
  201.                     {
  202.                         countOfBlocks = 9;
  203.                         place = "3х3";
  204.                         mode = 3;
  205.                         state = 5;
  206.                         this.Invalidate();
  207.                     }
  208.  
  209.                     if (e.X >= 420 && e.X <= 535 && e.Y >= 170 && e.Y <= 210)
  210.                     {
  211.                         countOfBlocks = 16;
  212.                         place = "4x4";
  213.                         mode = 4;
  214.                         state = 2;
  215.                         this.Invalidate();
  216.                     }
  217.  
  218.                     if (e.X >= 420 && e.X <= 535 && e.Y >= 220 && e.Y <= 260)
  219.                     {
  220.                         countOfBlocks = 25;
  221.                         place = "5х5";
  222.                         mode = 5;
  223.                         state = 6;
  224.                         this.Invalidate();
  225.                     }
  226.                     break;
  227.  
  228.             }
  229.  
  230.         }
  231.     }
  232. }

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


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

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

10   голосов , оценка 4 из 5

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

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

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