VladikOtez

Untitled

Oct 15th, 2016
162
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. namespace WindowsFormsApplication13
  2. {
  3.     public partial class Form1 : Form
  4.     {
  5.         const int nw = 4;
  6.         const int nh = 4;
  7.         const int np = (nw * nh) / 2;
  8.         System.Drawing.Graphics g;//
  9.         Bitmap pics;// картинки
  10.         int cw, ch;//размер клетки
  11.         int[,] field = new int[nw, nh];
  12.         // field[i,j] == 1 ... k клетка закрыта ( k-номер картинки)
  13.         //field[i,j] ==101..(100+k) клетка открыта(видна игроку)
  14.         // field[i,j]== 201... (200+k) клетка закрыта( игрок не видит)
  15.         int nOpened = 0;// количество открытых( найденных пар)
  16.  
  17.         int cOpened = 0;// кол-во открытых
  18.         int[] open1 = new int[2];// координаты первой открытой клетки
  19.         int[] open2 = new int[2];//координаты второй открытой клетки
  20.         System.Windows.Forms.Timer timer1; // таймер
  21.         private void cell(int i, int j)
  22.         {
  23.             MenuStrip menuStrip1 = new MenuStrip();
  24.             int x, y; // координаты левого верхнего угла клетки
  25.             x = i * (cw + 2);
  26.             y = j * (ch + 2) + menuStrip1.Height;
  27.             if (field[i, j] > 200)
  28.                 g.FillRectangle(SystemBrushes.Control, x, y, cw + 2, ch + 2);
  29.             if ((field[i, j] > 100) && (field[i, j] < 200))
  30.             {
  31.                 g.DrawImage(pics, new Rectangle(x + 1, y + 1, cw, ch),
  32.                 new Rectangle((field[i, j] - 101) * cw, 0, cw, ch),
  33.                 GraphicsUnit.Pixel);
  34.                 g.DrawRectangle(Pens.Black, x + 1, y + 1, cw, ch);
  35.  
  36.             }
  37.             if ((field[i, j] > 0) && (field[i, j] < 100))
  38.             {
  39.                 g.FillRectangle(SystemBrushes.Control, x + 1, y + 1, cw, ch);
  40.             }
  41.  
  42.  
  43.         }
  44.  
  45.         private void drawField()
  46.         {
  47.             for (int i = 0; i < nw; i++)
  48.                 for (int j = 0; j < nh; j++) ;
  49.             this.cell(i, j);
  50.  
  51.         }
  52.         private void newGame()
  53.         {
  54.             Random rnd = new Random();
  55.             int[] buf = new int[np];//генерим массив картинок
  56.             for (int i = 0; i < nw; i++)// np- кол-во картинок
  57.                 for (int j = 0; j < nh; j++)
  58.                 {
  59.                     do
  60.                     {
  61.                         int rndN = rnd.Next(np) + 1;
  62.                     }
  63.                     while (buf[rndN - 1] == 2);
  64.                         field[i, j] = rndN;
  65.                         buf[rndN - 1]++;
  66.                    
  67.                 }
  68.             nOpened = 0;
  69.             cOpened = 0;
  70.             this.drawField();
  71.         }
  72.         public Form1()
  73.  
  74.         {
  75.             InitializeComponent();
  76.  
  77.  
  78.  
  79.             try
  80.             {
  81.                 // грузим файл с картинками
  82.                 pics = new Bitmap("pictures.bmp");
  83.             }
  84.             catch (Exception exc)
  85.             {
  86.                 MessageBox.Show("Файл не найден.\n" +
  87.                     exc.ToString(), "Парные картинки", MessageBoxButtons.OK, MessageBoxIcon.Error);
  88.                 this.Close();
  89.                 return;
  90.             }
  91.  
  92.             cw = (int)(pics.Width / np);
  93.             ch = pics.Height;
  94.             this.ClientSize = new System.Drawing.Size(nw * (cw + 2) + 1, nh * (ch + 2) + 1 + menuStrip1.Height);
  95.             g = this.CreateGraphics();
  96.             timer1 = new Timer();
  97.             timer1.Tick += new System.EventHandler(this.timer1.Tick);
  98.             timer1.Interval = 200;
  99.             newGame();
  100.         }
  101.  
  102.         private void Form1_Load(object sender, EventArgs e)
  103.         {
  104.  
  105.         }
  106.  
  107.         private void Form1_MouseClick(object sender, MouseEventArgs e)
  108.         {
  109.             {
  110.                 int i, j;// индексы элемента массива field , соответствующего клетке, в которой сделан щелчок
  111.                 i = e.X / (cw + 3);
  112.                 j = (e.Y - menuStrip1.Height) / (ch + 3); //
  113.                 if ((timer1.Enabled) && (field[i, j] > 200))
  114.                     {
  115.                     return;
  116.                 }
  117.                 if (field[i, j] > 200)
  118.                     return;
  119.  
  120.  
  121.             }
  122.             if (field[i, j] > 200) return;
  123.             if (cOpened == 0)
  124.             {
  125.                 cOpened++;
  126.                 open1[0] = i;
  127.                 open1[1] = j;
  128.                 field[i, j] += 100;
  129.                 this.cell(i, j);
  130.                 return;
  131.  
  132.             }
  133.             if (cOpened == 1)
  134.             {
  135.                 open2[0] = i;
  136.                 open2[1] = j;
  137.                 if ((open1[0] == open2[0]) && (open1[1] == open2[1]))
  138.                     return;
  139.                 else
  140.                 {
  141.                     cOpened++;
  142.                     field[i, j] += 100;
  143.                     this.cell(i, j);
  144.                     if (field[open1[0], open2[1]] ==
  145.                             field[open2[0], open2[1]])
  146.                     {
  147.                         nOpened++;
  148.                         field[open1[0], open1[1]] += 100;
  149.                         field[open2[0], open2[1]] += 100;
  150.                         cOpened = 0;
  151.                         timer1.Enabled = true;
  152.                     }
  153.  
  154.                 }
  155.                 return;
  156.             }
  157.             if (cOpened == 2)
  158.             {
  159.                 //закрываем открытые клетки
  160.                 field[open1[0], open1[1]] -= 100;
  161.                 field[open2[0], open2[1]] -= 100;
  162.                 this.cell(open1[0], open1[1]);
  163.                 this.cell(open2[0], open2[1]);
  164.                 open1[0] = i;
  165.                 open1[1] = j;
  166.                 cOpened = 1;
  167.                 field[i, j] += 100;
  168.                 this.cell(i, j);
  169.             }
  170.         }
  171.     }
  172.     private void newGameToolStripMenuItem_Click(object sender, EventArgs e)
  173.     {
  174.         newGame();
  175.     }
  176.     private void timer1_Click(object sender, System.EventArgs e)
  177.     {
  178.         this.cell(Open1[0], Open1[1]);
  179.         this.cell(Open2[0], Open2[1]);
  180.         timer1.Enabled = false;
  181.         if (nOpened == np) ;
  182.         MessageBox.Show("Win");
  183.     }
  184. }
  185. private void Form1_Paint(object sender, PaintEventArgs e)
  186. {
  187.     drawField();
  188. }
RAW Paste Data