using System; using Cairo; using Gdk; using Gtk; class Area : DrawingArea { protected override bool OnDrawn(Context g) // малювання { int nx = 6, // кількість плиток по горизонталі ny = 6, // кількість плиток по вертикалі a = 80, // сторона плитки r = 20; // радіус заокруглення int[] x = new int[8], // координати кінців відрізків 1 y = new int[8]; // з такою нумерацією точок: 5 // 0 4 6 2 // 7 if (r * 4 > a) r = a / 4;// 3 var rand = new Random(); // створення породжувача випадкових чисел for (int j = 0; j < nx; j++) for (int k = 0; k < ny; k++) { // координати кінців відрізків і дуг x[0]=j*a; y[0]=k*a+a/2; x[4]=j*a+a/2-r; y[4]=k*a+a/2; x[2]=(j+1)*a; y[2]=k*a+a/2; x[6]=j*a+a/2+r; y[6]=k*a+a/2; y[1]=k*a; x[1]=j*a+a/2; y[5]=k*a+a/2-r; x[5]=j*a+a/2; y[3]=(k+1)*a; x[3]=j*a+a/2; y[7]=k*a+a/2+r; x[7]=j*a+a/2; if (rand.Next(2) == 0) { g.MoveTo(x[0], y[0]); g.LineTo(x[4], y[4]); g.Arc(x[4], y[7], r, -Math.PI / 2, 0); g.LineTo(x[3], y[3]); g.MoveTo(x[1], y[1]); g.LineTo(x[5], y[5]); g.ArcNegative(x[6], y[5], r, Math.PI, Math.PI / 2); g.LineTo(x[2], y[2]); } else { g.MoveTo(x[0], y[0]); g.LineTo(x[4], y[4]); g.ArcNegative(x[4], y[5], r, Math.PI / 2, 0); g.LineTo(x[1], y[1]); g.MoveTo(x[3], y[3]); g.LineTo(x[7], y[7]); g.Arc(x[6], y[7], r, -Math.PI, -Math.PI / 2); g.LineTo(x[2], y[2]); } } g.SetSourceColor(new Cairo.Color(0, 1, 0, 1)); g.LineWidth = 8; g.Stroke(); return true; } } class OwnWindow : Gtk.Window // клас вікна застосунку { public OwnWindow() : base("Плитки Труше") { Resize(480, 480); Add(new Area()); // додавання області малювання } protected override bool OnDeleteEvent(Event e) { Application.Quit(); return true; } } class Example { static void Main() { Application.Init(); OwnWindow w = new OwnWindow(); w.ShowAll(); Application.Run(); } }