Вход

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Рекомендуемая категория для самостоятельной подготовки:
Курсовая работа*
Код 95523
Дата создания 2015
Страниц 46
Мы сможем обработать ваш заказ (!) 1 апреля в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
2 770руб.
КУПИТЬ

Содержание

ВВЕДЕНИЕ 4
I. ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ 5
II. ТРЕБОВАНИЯ К СИСТЕМЕ 6
III. ДИАГРАММА КЛАССОВ 7
IV. ИСПОЛЬЗОВАННЫЕ ШАБЛОНЫ ПРОЕКТИРОВАНИЯ 9
4.1. Шаблоны проектирования порождающего типа 9
4.1.1. Фабричный метод 9
4.2. Шаблоны проектирования структурного типа 9
4.2.1. Декоратор 9
4.2.2 Фасад 20
4.3. Шаблоны проектирования поведенческого типа 29
4.3.1. Итератор 29
4.3.2. Инициализация при получении ресурса 30
V. ИНТЕРФЕЙС ПРИЛОЖЕНИЯ И ТЕСТИРОВАНИЕ 35
ВЫВОДЫ 46

Фрагмент работы для ознакомления

XYPole - 1)) {MyCr.Y += 1; } }returnMyCr; }if (napr == opt.Left || char.ToUpper(opt.Left) == napr) {if (draw.Hover2 == null) {MyCr = new Coords(0, 0); }else {if (draw.Hover2.X > 0) {MyCr.X -= 1; } }returnMyCr; }if (napr == opt.Right || char.ToUpper(opt.Right) == napr) {if (draw.Hover2 == null) {MyCr = new Coords(0, 0);MyCr.X += 1; }else {if (draw.Hover2.X < (opt.XYPole - 1)) {MyCr.X += 1; } }returnMyCr; }returnMyCr; } /// <summary> /// перерисовкаполя /// </summary>public void RedrawGamePole(Graphics e) {draw.RedrawPole(e); } /// <summary> /// изменение текущего поля с мыши/// </summary>public void Dhover(Coordscr) {draw.Hover(cr, true); } /// <summary>/// изменение текущего поля с клавиатуры /// </summary>public void Dhover( char napr) {draw.Hover(MoveClava(napr), false);Cursor.Position = new Point(0, 0); } /// <summary> /// ходмышью /// </summary>public bool GoCompite(Coordscr) {Coords temp = draw.Go(cr);if (hist.InserMove(temp)) {if (draw.TestToWin())return true; }return false; } /// <summary> /// ходклавиатурой /// </summary>public bool GoCompite() {Coords temp = draw.Goklava();if (hist.InserMove(temp)) {if (draw.TestToWin())return true;}returnfalse; } /// <summary> /// можно ли вернуть ход назад/// </summary>public bool CanBackMove() {if (hist.Colvo() == 0)return false;elsereturn true;} /// <summary> /// возврат хода назад /// </summary>public bool BackMove() {Coords temp = hist.BackMove();draw.BackMove(temp);if (temp == null)return false;return true; } /// <summary> /// обновлениеигровогосчёта /// </summary>publicCoordsUpdateCh(string R, string B) {Coords temp = draw.GetShet();if (temp.X == Convert.ToInt32(R) && temp.Y == Convert.ToInt32(B))return null;returndraw.GetShet();} /// <summary> /// определение итога игры возвращает строку с результатом/// </summary>public string GetWiner() {if (FishkaFigure.ColvoW > FishkaFigure.ColvoB)return "Красныевыйграли";if (FishkaFigure.ColvoW < FishkaFigure.ColvoB)return "Синиевыйграли";return "Ничья"; } /// <summary> /// Добавитьрекорсмена /// </summary>public void AddRec() {string cl = "Красные";int fish = FishkaFigure.ColvoW;if (FishkaFigure.ColvoW < FishkaFigure.ColvoB) {fish = FishkaFigure.ColvoB;cl = "Синие"; }if (Recs.TestToRecord(opt.XYPole, fish)!=-2) {AddRec form = new AddRec(cl, fish, (opt.XYPole-1)/2);form.ShowDialog();Recs.Add(form.Name, (opt.XYPole - 1) / 2, fish); } } /// <summary> /// Новаяигра /// </summary>public void NewGame(int L) {draw.SbrosCheta();draw = new DecorDrawGame(opt.GetMinH(L), opt.Altha, opt.XYPole);WorkFile = ""; } /// <summary> /// Сохранение в произвольный файл/// </summary>public void SaveGameAs() {string Text = "";SaveFileDialogmyDialog = new SaveFileDialog();myDialog.CheckFileExists = false;if (myDialog.ShowDialog() == DialogResult.OK) { Text = myDialog.FileName; }if (Text == "")return;FileStream fs = new FileStream(Text, FileMode.Create);BinaryFormatter formatter = new BinaryFormatter();formatter.Serialize(fs, draw.GetPole());formatter.Serialize(fs, hist);formatter.Serialize(fs, draw.Hod);fs.Close();WorkFile = Text; } /// <summary>/// сохранение в текущий файл /// </summary>public void SaveGame() {FileStream fs = new FileStream(workFile, FileMode.Create);BinaryFormatter formatter = new BinaryFormatter();formatter.Serialize(fs, draw.GetPole());formatter.Serialize(fs, hist);formatter.Serialize(fs, draw.Hod);fs.Close(); } /// <summary> /// открытиеигры /// </summary>public void OpenGame() { //hist = new History(); // draw.SetPole(pl, MyColor cl);string Text = "";OpenFileDialogmyDialog = new OpenFileDialog();myDialog.CheckFileExists = true;myDialog.Multiselect = true;if (myDialog.ShowDialog() == DialogResult.OK) { Text = myDialog.FileName; }if (Text == "")return;FileStream fs = new FileStream(Text, FileMode.Open);try {BinaryFormatter formatter = new BinaryFormatter(); Pole pl2 = (Pole)formatter.Deserialize(fs);hist = (History)formatter.Deserialize(fs);draw.SetPole(pl2, (MyColor)formatter.Deserialize(fs)); }catch (SerializationException e2) {Console.WriteLine("Failed to deserialize. Reason: " + e2.Message);throw; }finally {fs.Close();WorkFile = Text; } } /// <summary> /// открытиеокнанастроик /// </summary>public void Option() { Option1 forma = new Option1(opt.XYPole, opt.Altha, opt.Left, opt.Right, opt.Top, opt.Bottom, opt.Dohod);forma.ShowDialog();if (forma.flag == true) {if (forma.xYPole != opt.XYPole) {hist = new History();opt.SaveNewOption(forma.xYPole, forma.altha, forma.left, forma.right, forma.top, forma.bottom, forma.dohod);draw = new DecorDrawGame(opt.GetMinH(L), opt.Altha, opt.XYPole);return; }if (forma.altha != opt.Altha){hist = new History();opt.SaveNewOption(forma.xYPole, forma.altha, forma.left, forma.right, forma.top, forma.bottom, forma.dohod);draw.SetProporc(opt.GetMinH(L), opt.Altha);return; }opt.SaveNewOption(forma.xYPole, forma.altha, forma.left, forma.right, forma.top, forma.bottom, forma.dohod); } } /// <summary> /// окносрекордами /// </summary>public void Records() {fRecs forma = new fRecs(Recs);forma.Show(); }public bool GetColorMove() {if (draw.Hod == MyColor.Wite)return true;elsereturn false; } /// <summary> /// текущийфайл /// </summary>public string WorkFile{get {returnworkFile; }private set {workFile = value;EventArgseventArgs = new EventArgs();FileChange(this, eventArgs); } } }}4.3. Шаблоныпроектированияповеденческоготипа4.3.1. ИтераторШаблон Итератор обеспечивает последовательный доступ ко всем элементам коллекции, не раскрывая при этом её внутренней реализации.При разработке приложения был разработан итератор для обхода полей класса таким образом, чтобы учитывались только те поля на которых есть фишки. Кодитератора:/// <summary> /// возращает только клетки поля с фишками/// </summary>publicIEnumerableGetOshki() {FishkaFigure.ColvoB = 0;FishkaFigure.ColvoW = 0;for (inti = 0; i < yl; ++i) {for (int j = 0; j < xl; ++j) {if (mass[j,i].hasFigure()&& mass[j,i].Figura is FishkaFigure) {if (mass[j, i].Figura.Color == MyColor.Wite)yield return MyColor.Wite;elseyield return MyColor.Black;} } } }V. ИНТЕРФЕЙС ПРИЛОЖЕНИЯ И ТЕСТИРОВАНИЕИнтерфейс приложения представлен на рисунке 2.Рисунок 2. Интерфейс приложения.При клике мышкой по границам клеток полей добавляются линии – рисунок 3.Рисунок 3. Добавлении лини.Ходы поочерёдно переключаются, до тех пор, пока одна из сторон не окружит клетку, после этого окружившей стороне предоставляется право ходить второй раз – рисунок 4.Рисунок 4. Окруженный квадрат.При этом, как видно из рисунка изменяется показания счёта.В правой части экрана отображается информация об очереди ходаКорректно отрабатывают и ситуации при окружении сразу двух клеток за один ход – рисунки 5-6.Рисунок 5. Клетки не обрамлены.Рисунок 6. Обе клетки обрамлены.Возможна отмена ходов, путём нажатия одноимённой кнопки.Игру в любой момент можно сохранить или загрузить – рисунок 7.Рисунок 7. Сохранение игры.Игрой можно управлять с клавиатуры, для этого в левой части экрана есть поля, отображающие положение текущего активного поля в игре. При нажатии кнопки новая игра, поле очищается, счёт обнуляется, и игра начинается заново. Все кнопки формы продублированы горящими клавишами.При нажатии на кнопку опции открывается окно с настройками размера поля и клавиш управления. Можно менять размеры поля, рисунок 7-8.Рисунок 7. Окно настроек.Рисунок 8. Игровое поле из 5 полей.Ведётся учёт рекордов для каждого размера полей – рисунки 9-11Рисунок 9. Игра завершена, синие выигралиРисунок 10. Игрок синими установил рекордРисунок 11. РекордыУправлять игрой можно с клавиатуры, при этом текущее поле выделяется зелёным цветом (аналогично выделяется и при наведение мышкой) – рисунок 12.Рисунок 12. Управление с клавиатуры.ВЫВОДЫВ процессе создания приложения была разработана иерархия классов с применением шаблонов проектирования. Разработанной приложение работает корректно.

Список литературы

...
Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00471
© Рефератбанк, 2002 - 2024