Вход

Морской бой

Рекомендуемая категория для самостоятельной подготовки:
Курсовая работа*
Код 97407
Дата создания 2016
Страниц 15
Мы сможем обработать ваш заказ (!) 29 марта в 18:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
2 030руб.
КУПИТЬ

Содержание

Задание
Необходимо реализовать программу-игру Морской Бой
Анализ задача
В данной задаче необходимо реализовать игру Морской Бой.
Это игра на двух полях 10х10 клеток, одно из них видно одному игроку, второе – видно второму. Каждый игрок расставляет на своем поле корабли, после чего начинается собственно сама игра – игроки по очереди стреляют по вражескому полю, пытаясь попасть в корабли. При попадании игрок может сделать еще один ход.
Для реализации данной задачи в программе созданы следующие классы:
Класс координат

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

ship_len[i];foreach (Coord c in under_cells(x, y, l, orient)) cells[c.x, c.y] = CellType.ctShip; last_ships += l; }// Перебрать все соседние ячейкиIEnumerable<Coord> near_cells(int x, int y, int len, Orient orient, bool outer_cells = false) {int fx_end, fy_end, fx, fy; fx_end = x + 1; fy_end = y + 1;if (orient == Orient.oHor) fx_end += len - 1;else fy_end += len - 1;for (fy = y - 1; fy <= fy_end; fy++)for (fx = x - 1; fx <= fx_end; fx++)if (in_field(fx,fy) | outer_cells)yieldreturnnewCoord(fx, fy, in_field(fx, fy)); }// Перебрать все ячейки под кораблемIEnumerable<Coord> under_cells(int x, int y, int len, Orient orient, bool outer_cells = false) {int fx = x, fy = y;for (int i = 0; i < len; i++) {if (in_field(x, y) | outer_cells)yieldreturnnewCoord(fx, fy, in_field(fx, fy));if (orient == Orient.oHor) fx++;else fy++; } }publicbool can_place;publicvoid hl(int x, int y, int len, Orient orient) { can_place = true;foreach( Coord c in near_cells(x,y,len,orient))if (cells[c.x, c.y] == CellType.ctShip) { highlight[c.x, c.y] = Highlight.hRed; can_place = false; }else highlight[c.x, c.y] = Highlight.hGreen;foreach (Coord c in under_cells(x, y, len, orient, true)) {if (!c.in_field) can_place = false;else highlight[c.x, c.y] = Highlight.gGreen2; } }publicvoid reset_hl() {for (int y = 0; y < 10; y++)for (int x = 0; x < 10; x++) highlight[x, y] = Highlight.hNone; }publicvoid reset(CellType ct) {for (int y = 0; y < 10; y++)for (int x = 0; x < 10; x++) cells[x, y] = ct; }publicstaticint cell_size = 20;Pen hl_to_color(Highlight hl) {if (hl == Highlight.hGreen)returnPens.Olive;if (hl == Highlight.gGreen2)returnPens.Green;if (hl == Highlight.hRed)returnPens.Red;returnPens.Black; }publicbool player_field;publicvoid DrawField(Graphics gr, Point pt) { gr.DrawRectangle(Pens.Black, pt.X -2, pt.Y - 2, cell_size * 10 + 4, cell_size * 10 + 4);int px, py;for (int y = 0; y < 10; y++)for (int x = 0; x < 10; x++) { px = pt.X + x * cell_size; py = pt.Y + y * cell_size;if (((cells[x, y] == CellType.ctShip) & player_field) | (cells[x,y] == CellType.ctShipBombed) ) gr.FillRectangle(Brushes.BlueViolet, px, py, cell_size, cell_size);if (cells[x, y] == CellType.ctShipBombed) { gr.DrawLine(Pens.Red, px + 3, py + 3, px + cell_size - 6, py + cell_size - 6); gr.DrawLine(Pens.Red, px + cell_size - 6, py + 3, px + 3, py + cell_size - 6); }if (cells[x, y] == CellType.ctMiss) { gr.DrawLine(Pens.Blue, px + 5, py + 5, px + cell_size - 5, py + cell_size - 5); gr.DrawLine(Pens.Blue, px + cell_size - 5, py + 5, px + 5, py + cell_size - 5); } }// Подсветкаfor (int y = 0; y < 10; y++)for (int x = 0; x < 10; x++) {if (highlight[x, y] != Highlight.hNone) { gr.DrawRectangle(hl_to_color(highlight[x, y]), pt.X + x * cell_size + 2, pt.Y + y * cell_size + 2, cell_size - 4, cell_size - 4); } } } }publicclassCoord {publicint x, y;publicbool in_field; public Coord( int _x, int _y, bool _in_field ) { x = _x; y = _y; in_field = _in_field; } }}
Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00469
© Рефератбанк, 2002 - 2024