Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

Invalidate ( );

protected override void OnPalnt(PalntEventArgs e)

{

base.OnPaint (e);

e.Graphics.DrawEllipse(new Pen(b.Color,2), x, 50, 20, 20);

>

>

class Near

{

// Выполнить основной поток

static void Main ( )

<

Wind wl= new Wind ( ); // Создать первое окно

Wind w2= new Wind ( ); // Создать второе окно

wl.b.ev+ = new Del(w2.b.BaIIHandler);

w2.b.ev+= new DeI(wl.b.BaliHandler);

Application.Run (wl);

>

>

12.3. Задание 3

Программа содержит прикладное окно с кнопкой, при каждом нажатии

на которую появляется движущийся шар голубого цвета. Шары отталкива-

ются от границ окна. При отталкивании от границы каждого шара вспыхива-

ет специальный желтый шар, неподвижно размещённый в окне.

Примечание. Объекты шаров создаются из класса, содержащего поток, перемещающий

эти шары. Также этот поток генерирует события (уведомления), обработчики которых осуществ-

ляют перерисовку окна и "поджигают" желтый шар. Удобно хранить объекты шаров в списке, что

облегчает их совместную обработку.

///////////////

// Java Шары поджигают специальный объект

Importjava.Awt.*;

Import java.Awt.Event.*;

Importjava.Util.*;

// Класс потокового объекта

class Ball extends Observable implements Runnable

{

private int x, y; // Координаты шара

public int w, h; // Ширина и высота области клиента

public int dx, dy; // Приращения координат шара

private Thread t; // Ссылка на поток

private boolean life; // Признак существования потока

// Свойство X

public int getX ( ) {return x;}

p/u/ bСliвc оiйnсt тgвeоt YY ( ) {return у;>

// Конструктор

public Ball (lnt X, int Y, int Dx, lnt Dy, int W, int H)

{

w= w; h= H; x= X; y= Y; dx= Dx; dy= Dy;

// Создать и стартовать поток

life= true;

t= new Thread (this);

t.start ();

>

public void Finish ( )

{

life= false;

try

{

t.joln ( );

>

catch(InterruptedException e) { >

>

public void run ()

{

while (llfe)

{

x += dx; у += dy;

if (x>w || x<0)

{

dx= -dx;

// Уведомить o6 отскакивании шара

setChanged ( );

notifyObservers (new Boolean (true));

>

if(y>h || y<0)

{

dy= -dy;

// Уведомить об отскакивании шара

setChanged ( );

notifyObservers (new Boolean (true));

>

// Уведомить о перерисовке окна

setChanged ( );

notifyObservers (new Boolean (false));

try

{

Thread.sleep (100);

>

catch (InterruptedException e) { >

>

>

>

// Класс специального объекта

class SpecialBall implements Runnable, Observer

int x, у;

intd=l;

Thread t;

boolean running;

// Координаты шара

// Ширина пера

// Ссылка на поток

// Признак выполнения потока

// Свойство X

public int getX ( ) {return x;}

/p/u bСiвicо йinсtт вgоe tYY ( ) {return у;>

// Свойство D (толщина спей, шара для перерисовки)

public int getD ( ) {return d;}

// Конструктор

public SpecialBall (int X, int Y)

{

running= false;

x= X; y= Y;

>

// Обработать уведомление от шаров

public void update (Observable obs, Object obj)

{

boolean bool= ((Boolean) obj).booleanValue();

If(bool) Start ();

>

// Выполнить поток для заполнения овала шара желтым цветом

public void run ()

{

d= 4; // Овал шара заполнить желтым цветом

try

{

Thread.sleep (200);

>

catch (InterruptedException e) { >

d= 1; // Овал шара нарисовать пером желтого цвета

running= false;

// Создать и стартовать поток для заполнения овала шара цветом

public vold Start ( )

{