VladikOtez

Untitled

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