using System; using Cairo; using Gdk; using Gtk; class Area : DrawingArea { public int d = 38, // відстань від області малювання до верхньої частини екрану w = 800, // ширина ігрового поля h = 450; // висота ігрового поля public double t = 0, // час dt =0.05,// приріст часу між послі довними викликами таймера x0 = 0, // початкова абсциса зображення ядра y0 =450, // початкова ордината зображення ядра x, // поточна абсциса зображення ядра y, // поточна ордината зображення ядра r = 6, // радіус зображення ядра r_ = 6, // радіус зображення цілі x_ = 720,// абсциса цілі y_ = 383,// ордината цілі v0x = 0, // початкова швидкість ядра по горизонталі v0y = 0, // початкова швидкість ядра по вертикалі g = 9.8; // прискорення земного тяжіння public bool p = false, // чи є потреба перемальовувати? boom = false, // чи влучено у ціль? fault= false; // чи центр чорного круга перетнув нижню або праву межу вікна програми? public ImageSurface surface = new ImageSurface("boom.png"); // зображення вибуху protected override bool OnDrawn(Context c) { c.Rectangle (0, 0, w, h); c.SetSourceColor(new Cairo.Color (0.58824, 0.78125, 1,1)); c.Fill(); // # 4 Визначення координат центра ядра, відображення ядра й цілі x = x0 + v0x*t; y = y0 - v0y*t + g*t*t/2; if ((x-x_)*(x-x_)+(y-y_)*(y-y_) > (r+r_)*(r+r_)) { c.Arc(x, y, r, 0, 2*Math.PI); c.SetSourceColor(new Cairo.Color(0,0,0,1)); c.Fill(); c.Arc(x_, y_, r_, 0, 2*Math.PI); c.SetSourceColor(new Cairo.Color(1,0,0,1)); c.Fill(); fault = (x>w) || (h