Advertisement
Guest User

test

a guest
Apr 18th, 2014
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 13.77 KB | None | 0 0
  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 _64_app
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         PictureBox[,] pictureGrid = new PictureBox[4, 4];
  16.         Game coreGame = new Game();
  17.  
  18.         public Form1()
  19.         {
  20.             InitializeComponent();
  21.         }
  22.  
  23.         private void Form1_Load(object sender, EventArgs e)
  24.         {
  25.             // Создание массива пикчебоксов
  26.             for (int row = 0; row < 4; row++)
  27.             {
  28.                 for (int column = 0; column < 4; column++)
  29.                 {
  30.                     pictureGrid[row, column] = new PictureBox();
  31.                     pictureGrid[row, column].Location = new Point((12 + column * 70), (12 + row * 70));
  32.                     pictureGrid[row, column].Name = "imgBox" + row.ToString() + column.ToString();
  33.                     pictureGrid[row, column].Size = new System.Drawing.Size(64, 64);
  34.                     pictureGrid[row, column].TabIndex = row + column;
  35.  
  36.                     Controls.Add(pictureGrid[row, column]);
  37.                 }
  38.             }
  39.  
  40.             // Заполнение пикчебоксов
  41.             coreGame.FillPictureGrid(this);
  42.         }
  43.  
  44.         public void SetPictureGrid(int row, int column, int countOfNumber)
  45.         {
  46.             switch (countOfNumber)
  47.             {
  48.                 case 0:
  49.                     pictureGrid[row, column].Image = _64_app.Properties.Resources.zero;
  50.                     break;
  51.                 case 2:
  52.                     pictureGrid[row, column].Image = _64_app.Properties.Resources._2;
  53.                     break;
  54.                 case 4:
  55.                     pictureGrid[row, column].Image = _64_app.Properties.Resources._4;
  56.                     break;
  57.                 case 8:
  58.                     pictureGrid[row, column].Image = _64_app.Properties.Resources._8;
  59.                     break;
  60.                 case 16:
  61.                     pictureGrid[row, column].Image = _64_app.Properties.Resources._16;
  62.                     break;
  63.                 case 32:
  64.                     pictureGrid[row, column].Image = _64_app.Properties.Resources._32;
  65.                     break;
  66.                 case 64:
  67.                     pictureGrid[row, column].Image = _64_app.Properties.Resources._64;
  68.                     break;
  69.                 case 128:
  70.                     pictureGrid[row, column].Image = _64_app.Properties.Resources._128;
  71.                     break;
  72.                 case 256:
  73.                     pictureGrid[row, column].Image = _64_app.Properties.Resources._256;
  74.                     break;
  75.                 case 512:
  76.                     pictureGrid[row, column].Image = _64_app.Properties.Resources._512;
  77.                     break;
  78.                 case 1024:
  79.                     pictureGrid[row, column].Image = _64_app.Properties.Resources._1024;
  80.                     break;
  81.                 case 2048:
  82.                     pictureGrid[row, column].Image = _64_app.Properties.Resources._2048;
  83.                     break;
  84.                 default: break;
  85.             }
  86.         }
  87.  
  88.         public void ClearPictureGrid()
  89.         {
  90.             for (int row = 0; row < 4; row++)
  91.             {
  92.                 for (int column = 0; column < 4; column++)
  93.                 {
  94.                     pictureGrid[row, column].Image = null;
  95.                 }
  96.             }
  97.         }
  98.  
  99.         private void button1_Click(object sender, EventArgs e)
  100.         {
  101.             coreGame.MoveRowOfArrayDown();
  102.             ClearPictureGrid();
  103.             coreGame.FillPictureGrid(this);
  104.         }
  105.  
  106.         private void button2_Click(object sender, EventArgs e)
  107.         {
  108.             coreGame.MoveRowOfArrayUp();
  109.             ClearPictureGrid();
  110.             coreGame.FillPictureGrid(this);
  111.         }
  112.  
  113.         private void button3_Click(object sender, EventArgs e)
  114.         {
  115.             coreGame.MoveRowOfArrayRight();
  116.             ClearPictureGrid();
  117.             coreGame.FillPictureGrid(this);
  118.         }
  119.  
  120.         private void button4_Click(object sender, EventArgs e)
  121.         {
  122.             coreGame.MoveRowOfArrayLeft();
  123.             ClearPictureGrid();
  124.             coreGame.FillPictureGrid(this);
  125.         }
  126.     }
  127.  
  128.     public class Game
  129.     {
  130.         // Свойства
  131.         int[,] array;
  132.         int sizeOfArray;
  133.         Random randomNumberForArray;
  134.  
  135.         // Конструктор
  136.         public Game()
  137.         {
  138.             randomNumberForArray = new Random();
  139.  
  140.             // Создание массива
  141.             sizeOfArray = 4;
  142.             array = new int[sizeOfArray, sizeOfArray];
  143.  
  144.             for (int row = 0; row < sizeOfArray; row++)
  145.             {
  146.                 for (int column = 0; column < sizeOfArray; column++)
  147.                 {
  148.                     array[row, column] = 0;
  149.                 }
  150.             }
  151.  
  152.  
  153.             // Заполнение массива "0" и "2"
  154.             int overflow_array = 1;
  155.             do
  156.             {
  157.                 array[randomNumberForArray.Next(4), randomNumberForArray.Next(4)] = 2;
  158.                 overflow_array++;
  159.             } while (overflow_array < sizeOfArray);
  160.         }
  161.  
  162.         // Функция, для загрузки в пикчебоксы картинок
  163.         public void FillPictureGrid(Form1 form1)
  164.         {
  165.             // Генерация пикчебоксов
  166.             for (int row = 0; row < sizeOfArray; row++)
  167.             {
  168.                 for (int column = 0; column < sizeOfArray; column++)
  169.                 {
  170.                     switch (array[row, column])
  171.                     {
  172.                         case 0:
  173.                             form1.SetPictureGrid(row, column, 0);
  174.                             break;
  175.                         case 2:
  176.                             form1.SetPictureGrid(row, column, 2);
  177.                             break;
  178.                         case 4:
  179.                             form1.SetPictureGrid(row, column, 4);
  180.                             break;
  181.                         case 8:
  182.                             form1.SetPictureGrid(row, column, 8);
  183.                             break;
  184.                         case 16:
  185.                             form1.SetPictureGrid(row, column, 16);
  186.                             break;
  187.                         case 32:
  188.                             form1.SetPictureGrid(row, column, 32);
  189.                             break;
  190.                         case 64:
  191.                             form1.SetPictureGrid(row, column, 64);
  192.                             break;
  193.                         case 128:
  194.                             form1.SetPictureGrid(row, column, 128);
  195.                             break;
  196.                         case 256:
  197.                             form1.SetPictureGrid(row, column, 256);
  198.                             break;
  199.                         case 512:
  200.                             form1.SetPictureGrid(row, column, 512);
  201.                             break;
  202.                         case 1024:
  203.                             form1.SetPictureGrid(row, column, 1024);
  204.                             break;
  205.                         case 2048:
  206.                             form1.SetPictureGrid(row, column, 2048);
  207.                             break;
  208.                         default: break;
  209.                     }
  210.                 }
  211.             }
  212.         }
  213.  
  214.         // Функция для сдвига массива вниз
  215.         public void MoveRowOfArrayDown()
  216.         {
  217.             bool flag = false;
  218.             // Собсно сдвиг
  219.             for (int row = 0; row < sizeOfArray - 1; row++)
  220.             {
  221.                 for (int column = 0; column < sizeOfArray; column++)
  222.                 {
  223.                     // Сдвиг
  224.                     if (array[row + 1, column] == 0 & (array[row, column] != 0))
  225.                     {
  226.                         array[row + 1, column] = array[row, column];
  227.                         array[row, column] = 0;
  228.                         flag = true;
  229.                     }
  230.  
  231.                     // Складывание
  232.                     if (array[row + 1, column] == array[row, column] & (array[row, column] != 0))
  233.                     {
  234.                         array[row + 1, column] *= 2;
  235.                         array[row, column] = 0;
  236.                         flag = true;
  237.                     }
  238.                 }
  239.             }
  240.             // есть поставить параметр true, то не будет ограничений на генерацию рандомных двоек
  241.             GenerateRandomNumberInArray(flag);
  242.         }
  243.  
  244.         // Функция для сдвига массива вверх
  245.         public void MoveRowOfArrayUp()
  246.         {
  247.             bool flag = false;
  248.             // Собсно сдвиг
  249.             for (int row = 3; row < sizeOfArray & row > 0; row--)
  250.             {
  251.                 for (int column = 0; column < sizeOfArray; column++)
  252.                 {
  253.                     // Сдвиг
  254.                     if (array[row - 1, column] == 0 & (array[row, column] != 0))
  255.                     {
  256.                         array[row - 1, column] = array[row, column];
  257.                         array[row, column] = 0;
  258.                         flag = true;
  259.                     }
  260.  
  261.                     // Складывание
  262.                     if (array[row, column] == array[row - 1, column] & (array[row, column] != 0))
  263.                     {
  264.                         array[row - 1, column] *= 2;
  265.                         array[row, column] = 0;
  266.                         flag = true;
  267.                     }
  268.                 }
  269.             }
  270.             // есть поставить параметр true, то не будет ограничений на генерацию рандомных двоек
  271.             GenerateRandomNumberInArray(flag);
  272.         }
  273.  
  274.         // Функция для сдвига массива вправо
  275.         public void MoveRowOfArrayRight()
  276.         {
  277.             bool flag = false;
  278.             // Собсно сдвиг
  279.             for (int column = 0; column < sizeOfArray - 1; column++)
  280.             {
  281.                 for (int row = 0; row < sizeOfArray; row++)
  282.                 {
  283.                     // Сдвиг
  284.                     if (array[row, column + 1] == 0 & (array[row, column] != 0))
  285.                     {
  286.                         array[row, column + 1] = array[row, column];
  287.                         array[row, column] = 0;
  288.                         flag = true;
  289.                     }
  290.  
  291.                     // Складывание
  292.                     if (array[row, column + 1] == array[row, column] & (array[row, column] != 0))
  293.                     {
  294.                         array[row, column + 1] *= 2;
  295.                         array[row, column] = 0;
  296.                         flag = true;
  297.                     }
  298.                 }
  299.             }
  300.             // есть поставить параметр true, то не будет ограничений на генерацию рандомных двоек
  301.             GenerateRandomNumberInArray(flag);
  302.         }
  303.  
  304.         // Функция для сдвига массива вправо
  305.         public void MoveRowOfArrayLeft()
  306.         {
  307.             bool flag = false;
  308.             // Собсно сдвиг
  309.             for (int column = 3; column < sizeOfArray & column > 0; column--)
  310.             {
  311.                 for (int row = 0; row < sizeOfArray; row++)
  312.                 {
  313.                     // Сдвиг
  314.                     if (array[row, column - 1] == 0 & (array[row, column] != 0))
  315.                     {
  316.                         array[row, column - 1] = array[row, column];
  317.                         array[row, column] = 0;
  318.                         flag = true;
  319.                     }
  320.  
  321.                     // Складывание
  322.                     if (array[row, column - 1] == array[row, column] & (array[row, column] != 0))
  323.                     {
  324.                         array[row, column - 1] *= 2;
  325.                         array[row, column] = 0;
  326.                         flag = true;
  327.                     }
  328.                 }
  329.             }
  330.             // есть поставить параметр true, то не будет ограничений на генерацию рандомных двоек
  331.             GenerateRandomNumberInArray(flag);
  332.         }
  333.  
  334.         private void GenerateRandomNumberInArray(bool flag)
  335.         {
  336.             // Генерате
  337.             if (flag)
  338.             {
  339.                 int randomRow = randomNumberForArray.Next(4);
  340.                 int randomColumn = randomNumberForArray.Next(4);
  341.                 int isGenerated = 0;
  342.  
  343.                 while (isGenerated == 0 && ArrayIsNotFull() == true)
  344.                 {
  345.                     if (array[randomRow, randomColumn] == 0)
  346.                     {
  347.                         array[randomRow, randomColumn] = 2;
  348.                         isGenerated = 1;
  349.                     }
  350.                     else
  351.                     {
  352.                         randomRow = randomNumberForArray.Next(4);
  353.                         randomColumn = randomNumberForArray.Next(4);
  354.                     }
  355.                 }
  356.             }
  357.         }
  358.  
  359.         private bool ArrayIsNotFull()
  360.         {
  361.             bool flag = false;
  362.  
  363.             for (int row = 0; row < sizeOfArray; row++)
  364.             {
  365.                 for (int column = 0; column < sizeOfArray; column++)
  366.                 {
  367.                     if (array[row, column] == 0)
  368.                     {
  369.                         flag = true;
  370.                     }
  371.                 }
  372.             }
  373.             return flag;
  374.         }
  375.     }
  376. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement