Чтение онлайн

на главную

Жанры

Интернет-журнал "Домашняя лаборатория", 2007 №9
Шрифт:

{

// маленький круг радиуса 4

}

}

}

Класс Rect

Этот класс является еще одним прямым потомком класса Figure:

using System;

using System.Drawing;

namespace Shapes

{

/// <summary>

/// Класс Rect — потомок класса Figure.

/// </summary>

public class Rect: Figure

{

int sideA, sideB;

Rectangle rect;

public Rect(int sideA,int sideB, int x, int y): base(x,y)

{

this.sideA = sideA; this.sideB = sideB;

rect =Init;

}

public override void Show(Graphics g, Pen pen, Brush brush)

{

rect = Init ;

g. DrawRectangle(pen,rect);

g. FillRectangle(brush,rect);

}

public override Rectangle Region_Capture

{

rect = Init ;

return rect;

}

Rectangle Init

{

int a =Convert.ToInt32(sideA*scale);

int b =Convert.ToInt32(sideB*scale);

int leftupX = center.X — a/2;

int leftupY = center.Y — b/2;

return (new Rectangle(leftupX,leftupY,a,b));

}

}

}

Класс Square

Квадрат —

это частный случай прямоугольника. Соответствующий класс является потомком класса Rect:

using System;

namespace Shapes

{

/// <summary>

/// Класс Square — потомок класса Rect.

/// </summary>

public class Square: Rect

{

public Square(int side, int x, int y): base(side,side,x,у)

{

//квадрат — это прямоугольник с равными сторонами

}

}

}

Класс Person

Этот класс является прямым потомком класса Figure. Вместе с тем, класс является клиентом трех других классов семейства — Circle, Rect и LittleCircle, поскольку элементы фигуры, составляющие человечка, являются объектами этих классов%

namespace Shapes

{

/// <summary>

/// Класс Person — потомок класса Figure,

/// клиент классов Circle, Rect, LittleCircle.

/// </summary>

public class Person: Figure

{

int head_h;

Circle head;

Rect body;

LittleCircle nose;

public Person (int head_h, int x, int y): base(x,y)

{

// head_h — радиус головы, x,y — ее центр.

// остальные размеры исчисляются относительно

// размера головы.

this.head_h = head_h;

head = new Circle(head_h,x,у);

int body_x = x;

int body_y =

у + 3*head_h;

int body_w =2*head_h;

int body_h = 4*head_h;

body = new Rect(body_w, body_h, body_x,body_y);

nose = new LittleCircle (x+head_h +2, y);

}

public override void Show(System.Drawing.Graphics g,

System.Drawing.Pen pen, System.Drawing.Brush brush)

{

int h = Convert.ToInt32(head_h*scale);

//head

int top_x = center.X — h;

int top_y = center.Y — h;

g. DrawEllipse(pen, top_x,top_y, 2*h,2*h);

g. FillEllipse(brush, top_x,top_y, 2*h,2*h);

//body

top_y += 2*h;

g. DrawRectangle(pen, top_x,top_y, 2*h,4*h);

g. FillRectangle(brush, top_x,top_y, 2*h,4*h);

//nose

top_y — =h; top_x += 2*h;

g. DrawEllipse(pen, top_x,top_y, 8,8);

g. FillEllipse(brush, top_x,top_y, 8,8);

}

public override System.Drawing.Rectangle

Region_Capture

{

int h = Convert.ToInt32(head_h*scale);

int top_x = center.X — h;

int top_y = center.Y — h;

return new

System.Drawing.Rectangle(top_x,top_y,2*h,2*h);

}

}

}

Список с курсором. Динамические структуры данных

Добавим в проект классы, задающие динамические структуры данных. Конечно, можно было бы воспользоваться стандартными… Но для обучения крайне полезно уметь создавать собственные задающие такие структуры данных. Список с курсором — один из важнейших образцов подобных классов:

using System;

namespace Shapes {

/// <summary>

/// Класс TwoWayList(G) описывает двусвязный список с

/// курсором. Элементами списка являются объекты

/// TwoLinkable, хранящие, помимо указателей на двух

/// преемников, объекты типа G.Курсор будет определять

/// текущий (активный) элемент списка. Класс будет

/// определять симметричные операции по отношению к курсору.

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

/// Конструктор без параметров будет создавать пустой список

/// Запросы:

/// empty: require: true; возвращает true для пустого списка

/// item: require: not empty; возвращает активный элемент типа G;

/// require: true; возвращает число элементов списка;

/// count: count in[0,n] (count == 0) eqviv empty ;

/// index: require: not empty; возвращает индекс активного элемента.

/// search_res: require: true; возвращает true, если последний поиск был успешным.

/// Команды:

/// put_left(elem): require: true;

Поделиться:
Популярные книги

Бастард Императора

Орлов Андрей Юрьевич
1. Бастард Императора
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Бастард Императора

На границе империй. Том 10. Часть 1

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 1

Имя нам Легион. Том 7

Дорничев Дмитрий
7. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 7

Измена. Вторая жена мужа

Караева Алсу
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Вторая жена мужа

Буря империи

Сай Ярослав
6. Медорфенов
Фантастика:
аниме
фэнтези
фантастика: прочее
эпическая фантастика
5.00
рейтинг книги
Буря империи

Пенсия для морского дьявола

Чиркунов Игорь
1. Первый в касте бездны
Фантастика:
попаданцы
5.29
рейтинг книги
Пенсия для морского дьявола

На изломе чувств

Юнина Наталья
Любовные романы:
современные любовные романы
6.83
рейтинг книги
На изломе чувств

Тринадцатый II

NikL
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый II

Сирота

Шмаков Алексей Семенович
1. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Сирота

Законы Рода. Том 9

Flow Ascold
9. Граф Берестьев
Фантастика:
городское фэнтези
попаданцы
аниме
дорама
фэнтези
фантастика: прочее
5.00
рейтинг книги
Законы Рода. Том 9

Красноармеец

Поселягин Владимир Геннадьевич
1. Красноармеец
Фантастика:
боевая фантастика
попаданцы
4.60
рейтинг книги
Красноармеец

Огненный князь 4

Машуков Тимур
4. Багряный восход
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 4

Начальник милиции. Книга 5

Дамиров Рафаэль
5. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 5

Инкарнатор

Прокофьев Роман Юрьевич
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Инкарнатор