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(); ((IDisposable) c).Dispose(); return true; } } class OwnWindow : Gtk.Window { public Area a = new Area(); public OwnWindow() : base("Гра «Гармата»") { VBox vbox = new VBox(false, 2); HBox hbox = new HBox(false, 8); Label l1 = new Label("Координати цілі"); Label l2 = new Label("Кут"); Label l3 = new Label("Швидкість"); Entry e1 = new Entry("720"); Entry e2 = new Entry("383"); Entry e3 = new Entry("50"); Entry e4 = new Entry("88"); Button bt = new Button("Вогонь!"); a = new Area(); e1.WidthChars = 3; e2.WidthChars = 3; e3.WidthChars = 2; e4.WidthChars = 3; hbox.PackStart(l1, false, false, 9); hbox.PackStart(e1, false, false, 0); hbox.PackStart(e2, false, false, 0); hbox.PackStart(l2, false, false, 9); hbox.PackStart(e3, false, false, 0); hbox.PackStart(l3, false, false, 9); hbox.PackStart(e4, false, false, 0); hbox.PackStart(bt, false, false, 9); vbox.PackStart(hbox,false, false, 1); vbox.PackStart(a, true, true, 1); // # 2 Обробник події натискання кнопки на формі bt.Clicked += delegate { a.t = 0; a.x0 = 0; a.y0 = a.h; a.x_ = Convert.ToDouble(e1.Text); a.y_ = Convert.ToDouble(e2.Text); double alpha = Convert.ToDouble(e3.Text)*Math.PI/180; // кут double v0 = Convert.ToDouble(e4.Text); // початкова швидкість a.v0x = v0 * Math.Cos(alpha); a.v0y = v0 * Math.Sin(alpha); a.p =true; a.boom = false; a.fault = false; }; // # 2 Кінець Resize(a.w, a.h+a.d);// змінити розмір QueueDraw(); // перемалювати Add(vbox); // Додавання контейнера у вікно ShowAll(); // Показ всього долученого у вікно } protected override bool OnDeleteEvent(Event e) { Application.Quit(); return true; } } class Example { static void Main() { Application.Init(); OwnWindow w = new OwnWindow(); Application.Run(); } }