"Морской бой": разработка программы

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

Для того чтобы скачать эту работу.
1. Подтвердите что Вы не робот:
2. И нажмите на эту кнопку.
закрыть



183;Prorisovka(short x, short y) - функция виртуального метода прорисовки._potomok - класс производный от Base_Korabl:

Свойства:

Razmer - размер корабля,

X - позиция по X,

Y - позиция по Y,

Polojenie - положение (горизонтальное или вертикальное),

KOL_RANENIY - количество ранений.

Методы:

Kor_potomok(short Razmer, short x, short y, short Polojenie) - конструктор,

void Prorisovka(int sdvX, int sdvY) - функция переопределёного метода прорисовки,

int Vistrel(int x, int y) - функция выстрел,

int Ranenie() - функция ранение,

void Vistrel_v_kletkus(Kletka *kletka[10][10]) - функция обстрела всех клеток вокруг корабля, если он убит,

void Rasstanovka(Kletka *kletka[10][10]) - функция расставляет корабли.

Связь между базовым классом Base_Korabl и производным классам Kor_potomok представлена на схеме 1. Класс Kletka - независимый класс.

 

Схема 1. Связь между классами

 

4. Программирование задачи

 

Синтаксис объявления класса в языке С++ имеет следующий вид:

class

{

элементы класса

};

Листинг объявления класса Kletka:

class Kletka {:Pustaya_kletka, Vistrel, X, Y;:(int x, int y);Vistrel_v_kletku(int vistrel = 1);Vistrel_ili_net();Korabl_v_kletku(int Pustaya_kletka);Pustaya_ili_net();Prorisovka(int sdvX, int sdvY);

}

В данном листинге все свойства скрыты с помощью метки видимости private, так как работа со свойствами осуществляется с помощью интерфейса. Это один из трех принципов объектно-ориентированного программирования - инкапсуляция. Объединение данных с функциями их обработки в сочетании со скрытием ненужной для использования этих данных информации называется инкапсуляцией. Также имеется конструктор, который инициализирует начальные данные. Конструктор не возвращает значение, даже типа void, и должен называться также как и класс. Конструкторов может быть несколько с разными параметрами.

Листинг объявления класса Base_Korabl:

class Base_Korabl {:Color;:_Korabl();Prorisovka(short x, short y);

}

В этом листинге в производном классе был переопределён метод Prorisovka() для прорисовки кораблей разного размера. Этот принцип объектно-ориентированного программирования называется полиморфизмом - возможностью использовать в различных классах иерархии одно имя для обозначения сходных по смыслу действий и гибко выбирать требуемое действие во время выполнения программы.

Листинг объявления класса Kor_potomok:

class Kor_potomok: Base_Korabl {Razmer, X, Y, Polojenie, KOL_RANENIY;:_potomok(short Razmer, short x, short y, short Polojenie);Prorisovka(int sdvX, int sdvY);Vistrel(int x, int y);Ranenie();Vistrel_v_kletkus(Kletka *kletka[10][10]);Rasstanovka(Kletka *kletka[10][10]);

}

Класс Kor_potomok является производным от класса Base_Korabl. Он наследует все свойства и методы базового класса и добавляет новые. Это еще один принцип объектно-ориентированного программирования - наследование. Наследование - это возможность создания иерархии классов, когда потомки наследуют все свойства своих предков, могут их изменять и добавлять новые.

Также к программе подключены следующие заголовочные файлы:

isotream - заголовочный файл подключается для получения доступа к функциям потокового ввода/вывод

stdlib - заголовочный файл стандартной библиотеки общего назначения. Использованы функции:- функция устанавливающая случайный порядок выбора псевдослучайных чисел функцией- функция возвращающая случайного число из указанного диапазона.

conio - заголовочный файл объявляет несколько библиотечных функций для работы с консольным вводом и выводом программы. При помощи него были решены проблемы связанные с формированием внешнего вида программы. Использованы функции:

gotoxy - перемещает курсор в текстовом окне на указанную позицию курсора. Прототип функции void gotoxy(int x, int y).- определяет текстовое окно на экране. Прототип функции void window(int left,int top,int right,int bottom).

textbackground - задает цвет фона в текстовом режиме. Прототип функции void textbackground(int newcolor).

textcolor - Устанавливает цвет символов в текстовом режиме. Прототип функции void textcolor(int newcolor).

clrscr - очищает текущее текстовое окно и перемещает курсор в верхний левый угол экрана. Прототип функции void clrscr(void).

getch - читает один символ, непосредственно с консоли, без вывода его на экран. Прототип функции int getch(void).

dos.h - используется для подключения следующих функции delay .

При вызове функции delay выполнение программы приостанавливается на время, определяемое параметром milliseconds. Прототип функции void delay (unsigned milliseconds).

Полный листинг программы смотрите в приложении 1.

 

 

Заключение

 

В данной работе была разработана игра Морской бой. В программе использовались классы, наследование, виртуальные методы. В качестве языка программирования был выбран язык С++. Этот язык является прямым преемником языка С и фактически включает его как подмножество. Тем самым, С++ целиком содержит хорошо зарекомендовавшую себя традиционную модель вычислений языка С, и предоставляет мощные средства работы с объектами. Было спроектировано три класса: Kletka - класс клетка, содержащий свойство позиция и метод прорисовки; Base_Korabl - базовый класс корабль со свойствам цвет методом прорисовки; Kor_potomok - класс производный от класса Base_Korabl, к которому помимо свойств базового класса добавляются свойства позиция, размер, положение, и в котором переопределён метод прорисовки, чтобы прорисовывать корабли разного размера. Все свойства классов закрыты с помощью метки видимости private, а доступ к ним осуществляется с помощью общедоступных методов работающими со свойствами. Такой подход позволяет скрыть от особенности организации класса, предоставив пользователю интерфейс работы с классом.

При разработке программы я получил практические навыки в работы с классами и закрепил теоретические знания по объектно-ориентированному программированию.

Особых трудностей в написании работы не возникло.

Дальнейшую модификацию программы вижу в усложнении логики игры компьютера таким образом, чтобы сначала он стрелял по тем клеткам, в которых могут располагаться большие корабли.

Цель работы заключалась в изучении принципов объектно-ориентированного программирования, и эта цель была достигнута.

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

 

.С/С++. Программирование на языке высокого уровня. Павловская Т.А. Санкт - Петербург Питер 2004 г;

.C/C++. Объектно-ориентированное программирование. Практикум. Павловская Т.А. Санкт - Петербург Питер 2004 г;

.C/C++. Структурное программирование. Практикум. Павловская Т.А., Щупак Ю.А. Санкт - Петербург Питер 2005 г;

.Конспект лекций по дисциплине Объектно-ориентированное программирование;

 

 

Приложения

 

Приложение 1 (листинг программы)

 

#include

#include

#include

#include Kletka {:Pustaya_kletka, Vistrel, X, Y;:(int x, int y) {Vistrel = 0; Pustaya_kletka = 0; X = x; Y = y;}Vistrel_v_kletku(int vistrel = 1) {Vistrel = vistrel;}Vistrel_ili_net() {return Vistrel;}Korabl_v_kletku(int pustaya_kletka) {Pustaya_kletka = pustaya_kletka;}Pustaya_ili_net() {return Pustaya_kletka;}Prorisovka(int sdvX, int sdvY) {(3*(sdvX+X), 2*(sdvY+Y), 3*(sdvX+X)+2, 2*(sdvY+Y)+1);color;(Pustaya_kletka == 2) {(Vistrel) color = RED;color = GREEN;

}if (Vistrel) color = BLUE;color = BLUE;(color);();(color == CYAN) {(2, 2);

}(Vistrel) {<<"*";(WHITE);

}

}

};Base_Korabl {:Color;:_Korabl() {Color = 0;}Prorisovka(short x, short y) {(3*x, 2*y, 3*x+2, 2*y+1);(Color);();

}

};Kor_potomok: Base_Korabl { short Razmer, X, Y, Polojenie, KOL_RANENIY;:_potomok(short razmer, short x, short y, short polojenie) {= razmer; X = x; Y = y; Polojenie = polojenie; KOL_RANENIY = 0;

}Prorisovka(int sdvX, int sdvY) {(Polojenie) for (int a = X; a < X + Razmer; a++) Base_Korabl::Prorisovka(sdvX+a, sdvY+Y);for (int a = Y; a < Y + Razmer; a++) Base_Korabl::Prorisovka(sdvX+X, sdvY+a);

}Vistrel(int x, int y) {(Polojenie) for (int a = X; a < X + Razmer; a++) {((x == a) && (Y == y)) return 1;

}for (int a = Y; a < Y + Razmer; a++) {((x == X) && (y == a)) return 1;

}0;

}Ranenie() {KOL_RANENIY++; if (KOL_RANENIY == Razmer) return 1; else return 0;}Vistrel_v_kletkus(Kletka *kletka[10][10]) {xm, ym;(Polojenie) {xm = X + Razmer; ym = Y + 1;}{xm = X + 1; ym = Y + Razmer;}(int i = X - 1; i Vistrel_v_kletku(1);

}Rasstanovka(Kletka *kletka[10][10]) {xm, ym;(Polojenie) {xm = X + Razmer; ym = Y + 1;}{xm = X + 1; ym = Y + Razmer;}(int i = X - 1; i Korabl_v_kletku(1);

}

}

}

};New_Korabl(Kor_po