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

If(lrunnlng)

{

running= true;

t= new Thread (this);

t.start ();

>

// Класс прикладного окна

class Wlnd extends Frame implements Observer

{

public SpecialBall specialBall; // Ссылка на спец.объект

private Button butAdd; // Ссылка на кнопку

private ArrayList aL; // Ссылка на список

private Random r; // Ссылка на объект случайного числа

Object obj;

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

pubiic wind ()

{

setSize (300, 200);

setVisible (true);

specialBall= new SpecialBall (30, 30); // Создать спец.объект

aL= new ArrayList (); // Создать список

r= new Random (); // Создать объект случайного числа

butAdd= new Button("Add"); // Создать кнопку

butAdd.setLocatlon (100, 24); // Разместить кнопку

// Задать размер кнопки в области клиента окна

butAdd.setSize (32, 24);

add(butAdd);

obj=this;

// Подписать обработчик actionPerformed на событие кнопки

butAdd.addActionLlstener (new ActionListener()

{

public void actionPerformed (ActionEvent aE)

{

int х— r.nextInt(50)+10;

int y= r.nextInt(50)+10;

int dx= r.nextInt(10)+5;

int dy= r.nextInt(10)+5;

Ball b= new Ball( x, у, dx, dy, 300, 200);

b.addObserver ((Wind) obj);

b.addObserver (specialBall);

aL.add (b);

>

»;

// Подписать обработчик windowClosing на событие закрытия окна

this.addWindowListener(new WindowAdapter ()

{

public void windowClosing (WindowEvent wE)

{

for(lnt i= 0; i< aL.size(); I++)

{

Ball b= (Ball) aL.get(i);

b.Flnish ( );

>

System.exlt (0);

});

// Перерисовать

public void paint (Graphics g)

{

for (int i= 0; i < aL.size(); i++)

{

Ball b= (Bail) aL.get(i);

g.setColor (Co!or.blue);

g.drawOval (b.getX(), b.getY(), 20, 20);

>

g.setColor (Color.yellow);

g.drawOval (specialBall.getX(), specialBall.getY(), 20, 20);

if(specialBall.getD() == 4)

g.flllOval(specialBall.getX(), specialBall.getY(), 20, 20);

>

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

public void update (Observable obs, Object obj)

{

repaint ();

>

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

public static void main ()

{

Wind w= new Wind ();

>

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

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

using System;

using System.Drawing;

using System.Windows.Forms;

using System.Threading;

using System.Collections;

delegate void delEv ( ); // Делегат события

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

class Ball

{

public event delEv ev; // Объявление события

public event delEv evSpecial; // Объявление специального события

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

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

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

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

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

// Свойство X

public int X

{get{return х ; »

// Свойство Y

public int Y

{get{return у ; »

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

pubiic Baii (int X, int Y, int Dx, int Dy, int w, int H)

{

w= W; b= H;

x= X; y= Y; dx= Dx; dy= Dy;

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

life= true;

t= new Thread (new ThreadStart (BallFunc));

t.Start ();

>

public void Flnlsh ( )

{

life= false;

t.3oln ();

>

Void BallFunc ()

{

while (life)

{

x += dx; у += dy;

lf(x>w || x<0)

{

dx= -dx;

// Генерировать событие спец.объекту

If (evSpecial != null)

{

evSpecial ( );

>

>

if(y>h || y<0)

{

dy= -dy;

// Генерировать событие спец.объекту

if (evSpecial != null)

<

evSpecial ( );

>

>

// Генерировать событие перерисовки окна

if (ev 1= null)

{

e v ( ) ;

Thread.Sleep (100);

>

>

>

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

class SpecialBall

{

int x, у;

E ~ l J _ * .

III L U— X,

Thread t;

bool run;

и

И

II

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

//' шИрИНа Псра

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

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

public int X

{get{return х ; »

public intY

{get{return у ; »

public int D

<get{return d;>>

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

public SpecialBall (lnt X, intY)

{

run= false;

x= X; y= Y;

>

// Обработать событие

public void HandlerEvSpecial ( )

{

Start ( );

>

// Выполнить поток