Среда программирования:
Microsoft Visual Studio 2010 Express
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace demo3 { public partial class Form1 : Form { Bitmap myBitmap;//объявляем bitmap Graphics g;//и графику SolidBrush fon = new SolidBrush(Color.DeepSkyBlue);//цвет фона будет голубым SolidBrush fil1 = new SolidBrush(Color.BlueViolet);//цвет заливки одних квадратов будет фиолетовым SolidBrush fil2 = new SolidBrush(Color.Black);//других будет черным int perem;// введем переменную, она с ходом таймера будет изменяться, //и в зависимости от присвоенного ей значение будет выполняться определенный тип перемещения квадратов int k;//на это значение мы будем изменять координаты public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { timer1.Start();//в данной функции вызвается таймер } private void Squares()//функция изменения фигуры { myBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);//создаем битмап Graphics g = Graphics.FromImage(myBitmap);//и графику g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//избавляемся от пиксельности по краям g.FillRectangle(fon, 0, 0, 600, 600);//заливаем фон if (perem == 0)//если переменная равна нулю { for (int i = 0; i < 750; i += 70) { for (int j = 0; j < 750; j += 70)//мы рисуем массив квадратов, таких что { g.FillRectangle(fil1, -65 + i + k, -65 + j, 30, 30);//одни квадраты будут фиолетовые и будут изменять иксовую координату, двигаясь вправо g.FillRectangle(fil2, -30 + i + k, -65 + j, 30, 30);//квадраты другого цвета будут так же двигаться вправо g.FillRectangle(fil1, -30 + i - k, -30 + j, 30, 30);//в других строках фиолетовые будут перемещаться влево g.FillRectangle(fil2, -65 + i - k, -30 + j, 30, 30);//и черные тоже влево } } k+=2;//переменную смещения увеличиваем на двойку if (k >= 35)//и когда квадраты завершат первый цикл(для этого достаточно 17 смещений) { k = 0;//мы обнуляем к perem = 1;// и переменной присваиваем новое значение, чтоб она выполнился следующий цикл } } if (perem == 1)//здесь все аналогично, только теперь мы будем смещать полосы по вертикали { for (int i = 0; i < 750; i += 70) { for (int j = 0; j < 750; j += 70) { g.FillRectangle(fil1, -30 + i, -65 + j + k, 30, 30);// одни столбцы вниз g.FillRectangle(fil2, -30 + i, -30 + j + k, 30, 30); g.FillRectangle(fil1, -65 + i, -30 + j - k, 30, 30);//другие вверх g.FillRectangle(fil2, -65 + i, -65 + j - k, 30, 30); } } k+=2; if (k >= 35)//когда смести квадраты на один { k = 0;//снова обнуляем perem = 2;//и присваиваем переменной новое значение } } if (perem == 2)//аналогично { for (int i = 0; i < 750; i += 70) { for (int j = 0; j < 750; j += 70)// смещаем ряды квадратов горизонтально, только на этот раз так { g.FillRectangle(fil1, -30 + i - k, -30 + j, 30, 30);//чтоб те ряды, которые в первом цикле перемещались вправо g.FillRectangle(fil2, -65 + i - k, -30 + j, 30, 30);//теперь перемещались влево g.FillRectangle(fil1, -65 + i + k, -65 + j, 30, 30);//а другие - вправо g.FillRectangle(fil2, -30 + i + k, -65 + j, 30, 30); } } k+=2; if (k >= 35) { k = 0;//опять обнуляем perem = 3;// и присваиваем новое значение } } if (perem == 3) { for (int i = 0; i < 750; i += 70) { for (int j = 0; j < 750; j += 70) { g.FillRectangle(fil1, -65 + i, -30 + j - k, 30, 30);//те ряды, которые во втором цикле перемещались вниз g.FillRectangle(fil2, -65 + i, -65 + j - k, 30, 30);//теперь будут двигаться вверх g.FillRectangle(fil1, -30 + i, -65 + j + k, 30, 30);// а остальные - вверх g.FillRectangle(fil2, -30 + i, -30 + j + k, 30, 30); } } k+=2; if (k >= 35) { k = 0;//обнуляем perem = 0;//таким образом цикл завершился и каждый из квадратиков прошел //по квадратной(простите за тавтологию) траектории, и переместился в исходное положение. //мы снова присваиваем переменной 0, чтоб квадратики заново начали движение по необходимой траектории } } pictureBox1.BackgroundImage = myBitmap;//и отображаем Bitmap на pictureBox } private void timer1_Tick(object sender, EventArgs e) { Squares();//в функции таймера вызываем нашу функцию прорисовки квадратов } } }
Прикрепленный файл | Размер |
---|---|
KozlovaE_Marching_squares.zip | 43.39 кб |