using System; using Cairo; using Gdk; using Gtk; class Area : DrawingArea { // # 3а Надання значень властивостям області малювання public int i=0, // стан гри il=0, // кількість очок на рахунку програми ir=0, // кількість очок на рахунку гравця w=780, // ширина вікна програми та ігрового поля h=500, // висота ігрового поля a=10, // ширини прямокутника — зображення ракетки b=100, // висота прямокутника — зображення ракетки, r=10, // радіус круга — зображення м'яча, d_=8, // приріст ординати ракетки на одне оновлення екрану (3), dx, // приріст поточної величини абсциси круга за 1 такт оновлення екрану dy, // приріст поточної величини ординати круга за 1 такт оновлення екрану dx_=9, // модуль приросту абсциси круга за 1 такт оновлення екрану dy_=7, // верхня межа приросту ординати круга за 1 такт оновлення екрану x =390,// поточна абсциса центра зображення м'яча y =250,// поточна ордината центра зображення м'яча yl=200,// ордината верхнього краю прямокутника-ракетки ліворуч, керованого програмою yr=200;// ордината верхнього краю прямокутника-ракетки праворуч, керованого людиною public bool up = false, // потрібно рухати жовтий прямокутник догори down = false, // потрібно рухати жовтий прямокутник донизу timer = true; // # 3a Кінець protected override bool OnDrawn(Context cr) // малювання { // # 6 Зміна стану гри за 1 крок Random rand = new Random(); switch(i) { case 0: x = w/2; y = h/2; dx = - dx_; dy = rand.Next(-dy_,dy_); i = 1; break; case 1: yl = y-b/2; if (yl<0) yl=0; if (h-bh-r) {y=2*(h-r)-y; dy=-dy;} // відбиття від нижньої межі if (x