using System; using System.Drawing; using Cairo; using Gdk; using Gtk; class Area : DrawingArea { private static int igame = 0, // стан гри idir = 0, // напрям руху xb = 0, // найбільше досягнуте значення абсциси jb = 0, // номер точки траєкторії з найбільшим // досягнутим значенням абсциси jt = 0, // поточний номер точки траєкторії при поверненні // у точку "відриву" за найменшу кількість кроків s = 2, // крок переміщення круга по горизонталі чи вертикалі ntr=0, // кількість запам'ятованих точок траєкторії j0,j1,k0,k1;// межі значень екранних координат аналізованих пікселів private int[,] tr = new int[10000,2];//траєкторія центрів круга private bool incjt = true; // зростання поточного номера точки траєкторії // при поверненні у "точку відриву від перешкоди" // за найменшу кількість кроків // can[j] - чи можна рухатися у напрямку j private bool[] can = new bool [4] { true, true, true, true }; public int r = 8, // радіус рухомого круга xmax, // розміри поля по горизонталі ymax, // розміри поля по вертикалі x, // поточна абсциса центра круга y; // поточна ордината центра круга public ImageSurface surface;// поверхня для відображення public Bitmap bm; // зображення в оперативній пам'яті public bool timer = true; // чи потрібна перемальовувати? protected override bool OnDrawn(Context cr) // малювання { cr.SetSourceSurface(surface, 0, 0); cr.Paint(); cr.SetSourceColor(new Cairo.Color(1, 1, 1, 1)); cr.Arc(x, y, r, 0, 2 * Math.PI); cr.Fill(); return true; } // # 4 Визначення координат центра круга й // відображення нового його розташування public void Move() { //x += s; // Прямоліний рівномірний рух праворуч // # 6 Втілення алгоритму оминання перешкод if (x+r+s