520100 ДФ 230102 КР 01 ПЗ Содержание
Введение……………………………………………………………………..4 1. Техническое задание……………………………………………………..5 2. Программная документация.....................................................................10 2.1 Руководство программиста.....................................................................10 2.2 Руководство пользователя......................................................................14 Заключение…………………………………………………………………18 Литература …………………………………………………………………19 ПРИЛОЖЕНИЕ А Текст модуля Main……………………………………20
Введение
Главная цель данной работы, разработать приложение «Сетевой игры «Морской бой» в среде разработки Borland Delphi. Игра может применяться для развлечения. Для ее использования не требуется специальных знаний в области компьютерных технологий, достаточно лишь наличие начальных умений в использовании компьютера и знания правил игры «Морской бой», благодаря чему программой могут пользоваться представители различных возрастных категорий. В представленной работе рассмотрена одна из популярных сетевых игр. В данной пояснительной записки была рассмотрены такие разделы как программная документация, состоящая из руководства пользователя и программиста, представлен текст основного модуля Main. Данные пункты необходимые для разработки программы и дальнейшего её усовершенствования. Раздел «Руководство пользователя» содержит краткие сведения по управлению игровым процессом. В разделе «Руководство программиста» кратко описаны основные подпрограммы главного модуля Main и все переменные, используемые в программе, краткое описание программы и внешнего вида приложения.
1. Техническое задание
1.1 Наименование, область применения
Полное наименование приложения: «Сетевая игра «Морской бой».
1.2 Основание для разработки
В соответствии с учебным планом необходимо выполнить курсовую работу по дисциплине «Сетевые технологии».
1.3 Назначение разработки
Функциональным назначением является разработка приложения сетевой игры, а эксплуатационное - демонстрационный материал для учебных курсов по сетевым технологиям и сетевому программированию.
1.4 Технические требования к программе, программному изделию
1.4.1 Требование к функциональным характеристикам
Программа должна выполнять следующие функции: работать как на одном компьютере, так и на различных; осуществлять подсчёт очков; выдавать подсказки для игры; Меню программы содержит следующие пункты: файл: - новая игра; - выход; настройки; - настройки клиента; - настройки сервера; - создать игру; - подключиться к игре. Входными данными являются: нажатие клавиши, расстановка кораблей, позиция выстрела, результат выстрела, порт и адрес компьютера. Выходными данными являются: результат выстрела, позиция выстрела, счёт игры.
1.4.2 Требования к надёжности
Приложение поддерживает диалоговый режим и выдаёт сообщения при выигрыше или проигрыше игрока.
1.4.3 Условие эксплуатации
Данное приложение может использоваться для проведения свободного времени, т.е. развлечения, и рассматриваться как демонстрационный материал для учебных курсов по сетевым технологиям и сетевому программированию. Условие эксплуатации приложения совпадают с условиями эксплуатации ПЭВМ IBM PC.
1.4.4 Требования к параметрам и составу технических средств
Персональный компьютер, на котором может быть установлена система Borland Delphi 7, должен удовлетворять определенным требованиям. Базовый комплект технических средств включает: системный блок: - процессор Pentium III с частотой 300 МГц или выше; - оперативная память - 64 Мбайт (рекомендуется 128 Мбайт или больше); - объем дискового пространства - 300 Мбайт (минимум); - видеокарта - минимальное разрешение 800x600 при 256 цветах (рекомендуется разрешение 1024x768); - сетевая карта - для сетевой версии AutoCAD 2000; цветной монитор - диагональ 17" - 19", частота не менее 85 Гц; алфавитно-цифровую клавиатуру (АЦК); манипулятор типа «мышь» (рекомендуется Microsoft IntelliMouse). Для получения твердой копии пояснительной записки необходим принтер.
1.4.5 Требования к информационной и программной совместимости
Для написания программы должен использоваться язык программирования Object Pascal среды разработки Borland Delphi. Системные программные средства, используемые программой, должны быть представлены лицензионной локализованной версией одной из операционных систем Microsoft Windows 98/NT/2000/XP/Vista.
1.4.6 Требования к маркировке и упаковке, требованию и хранению
Приложения поставляются в электронном виде на переносном носителе.
1.4.7 Специальные требования
Специальные требования не предъявляются.
1.5 Технико-экономические показатели
Приложение разрабатывается для собственных нужд и соответственно не даст экономического эффекта.
1.6 Стадии и этапы разработки
1.6.1 Техническое задание
Данная стадия разработки содержит в себе следующие этапы работ: a) обоснование необходимости разработки приложения, в этот этап входят следующие работы: - постановка задачи; - сбор исходных материалов; - выбор и обоснование критериев эффективности и качества разрабатываемого приложения; - обоснование необходимости проведения научно-исследовательских работ. b) научно-исследовательские работы, в данный этап входят работы: - предварительный выбор методов решения задач; - обоснование целесообразности применения ранее разработанных программ; - определение требований к техническим средствам; - обоснование принципиальной возможности решения поставленной задачи. c) разработка и утверждение технического задания, в этом этапе присутствуют следующие работы: - определение требований к изделию; - разработка технико-экономического обоснования разработки приложения; - определение стадий, этапов и сроков разработки пояснительной записки; - выбор среды разработки; - определение необходимости проведения научно-исследовательских работ на последующих стадиях; - согласование и утверждение технического задания.
1.6.2 Эскизный проект
Эта стадия разработки содержит в себе следующие этапы работ: a) разработка эскизного проекта, в данный этап входят следующие работы: - уточнение методов решения задачи; - разработка общего описания алгоритма решения задачи; - разработка технико-экономического обоснования. b) утверждение эскизного проекта, в этом этапе необходимы следующие работы: - разработка пояснительной записки; - согласование и утверждение эскизного проекта.
1.6.3 Технический проект
В этой стадии разработки присутствуют следующие этапы работ: a) разработка технического проекта, в этот этап входят следующие работы: - определение формы представления выходных данных; - разработка структуры изделия; - окончательное определение конфигурации технических средств. b) утверждение технического проекта, в этом этапе имеются следующие работы: - разработка плана мероприятий по разработке и внедрению приложения; - разработка пояснительной записки; - согласование и утверждение технического проекта.
1.6.4 Рабочий проект
На этом этапе необходимы следующие этапы работ: a) разработка приложения, на этом этапе содержатся следующие работы: - работы по созданию приложения; - тестирование и отладка программы. b) разработка программных документов - разработка пояснительной записки.
1.7 Порядок контроля приёмки
Поставляется на переносном носителе в срок до 10.04.08, вместе с пояснительной запиской.
2. Программная документация
2.1 Руководство программиста
Для создания сетевой игры «Морской бой» была использована интегрированная среда разработки Borland Delphi 2007. Приложение реализовано на основе одного не блокирующегося сокета UDP. В программе клиент является и сервером, т.е. он сам обрабатывает события. Внешний вид программы после ее запуска представлен на рисунке 1.
Рисунок 1 – Внешний вид программы «Сетевая игра «Морской бой»
Для удобства управления работой программы было создано главное меню, содержащее два пункта: «Файл» и «Настройки». Пункт меню «Файл» содержит два подпункта: a) новая игра; b) выход. Пункт меню «Настройки» содержит четыре подпункта: настройки клиента; настройки сервера; создать игру; подключиться к игре. В программе предусмотрено, чтобы подпункты меню «Настройки»: «Создать игру» и «Подключиться к игре» были активными только после того, как игрок создаст поле игры и расставит все корабли. Но после того как Игроки подключаться к игре они снова становятся не активными. Для настройки клиента необходим адрес и порт, а для сервера – порт. Окна настроек появляются посередине игрового окна. Поле игрока и соперника создаются с помощью объектов типа Shape, размером 25 на 25. В программе имеются подсказки, которые показываются в статусной строке и говорят, о том кто должен стрелять, а кто ждать. В игре предусмотрен подсчёт счёт. Счёт ведётся как количество убитых вами кораблей и количество убитых у вас кораблей. При проигрыше или выигрыше игрока выводятся сообщения об этом. Приложение «Сетевая игра «Морской бой» состоит из одного программного модуля Main. Main – основная функциональная часть программы, в котором реализуются основные функции приложения. Модуль Main содержит подпрограммы для конфигурирования формы приложения и ее элементов, организации игрового процесса, обработки нажатий клавиш и вызовов пунктов меню. В главном модуле были реализованы следующие процедуры: Procedure TForm1.LoadGame; Procedure TForm1.SetColorOnShape1; Procedure TForm1.SetColorOnShape2; Procedure TForm1.EndGame; Procedure TForm1.RecvSock; Procedure TForm1.SendSock; Procedure TForm1.N6Click; Procedure TForm1.N7Click; Procedure TForm1.FormDestroy; Procedure TForm1.N8Click; Procedure TForm1.FormCreate; Procedure TForm1.N2Click; Procedure TForm1.N4Click; Procedure TForm1.N5Click. Спецификация подпрограмм главного модуля программы приведена в таблице 1.
Таблица 1 – Спецификация функций модуля Main Процедура | Назначение | Procedure TForm1.LoadGame | Процедура необходима, для создания новой игры, для создания поля игрока и соперника | Procedure TForm1.SetColorOnShape1 | Процедура нужна для расстановки кораблей на поле игрока | Procedure TForm1.SetColorOnShape2 | Процедура выстрела | Procedure TForm1.EndGame | Процедура для завершения игры | Procedure TForm1.RecvSock | Процедура для приёма и обработки данных из сокета |
Продолжение таблицы 1 Процедура | Назначение | Procedure TForm1.SendSock | Процедура для отправки данных через сокет | Procedure TForm1.N6Click | Процедура создания сокета и привязки его к порту, делает сокет не блокирующимся | Procedure TForm1.N7Click | Процедура создания сокета и перевода его в не блокирующееся состояние | Procedure TForm1.FormDestroy | Процедура для уничтожения сокета после выхода из игры | Procedure TForm1.N8Click | Процедура создания новой игры | Procedure TForm1.FormCreate | Настройка переменных для работы приложения по сети | Procedure TForm1.N2Click | Процедура выхода | Procedure TForm1.N4Click | Процедура настройки клиента | Procedure TForm1.N5Click | Процедура настройки сервера |
Все используемые, в главном модуле Main, переменные описаны в таблице 2.
Таблица 2 – Спецификация переменных Имя | Назначение | Тип | Главная программа Main
| InetAddr | Структура адреса, соединение сервера | SOCKADDR_IN | InetAddrOut | Структура адреса, адрес куда необходимо ответить | SOCKADDR_IN | sock | Сокет | TSocket | bPriem | Переменная для распознавания следующих приходящих данных (может принимать следующие значения: данные не нужны, их обрабатывать не надо, переменная готова для приёма данных, переменная готова для передачи данных) | (prnot, prinout, proutin) | Pole1 | Массив для создания поля игрока | TShape | Pole2 | Массив для создания поля противника | TShape | bShips | Переменная, ограничивающая количество кораблей, которые можно расставить на игровом поле | Byte | bShipsPlaced | Переменная для подсчёта расставленных кораблей | Byte |
Продолжение таблицы 2 Имя | Назначение | Тип | Главная программа Main
| bShipsYouKilled | Переменная для подсчёта убитых игроком кораблей | Byte | bShipsHeKilled | Переменная для подсчёта убитых у игрока кораблей | Byte | vx | Позиция по X, в какую точку стреляли | Byte | vy | Позиция по Y, в какую точку стреляли | Byte | blVystrel | Переменная выстрела | Boolean | blGameStatus | Статус игры | Boolean | iLocalPort | Сервера порт | Integer | sServerAddr: | Адрес компьютера | String | iServerPort | Соединение клиента с сервером | Integer | Procedure TForm1.LoadGame | i | Переменная счётчик | Integer | j | Переменная счётчик | Integer | h | Переменная для смещения поля сверху | Integer | w | Переменная для смещения поля слева | Integer | Procedure TForm1.SetColorOnShape1 | i | Переменная счётчик | Integer | j | Переменная счётчик | Integer | f | Переменная для проверки кораблей, при расстановке, чтобы они не стояли по диагонали | Boolean | Procedure TForm1.SetColorOnShape2 | i | Переменная счётчик | Integer | j | Переменная счётчик | Integer | Procedure TForm1.EndGame | on_off_sock | Переменная для перевода сокета в блокирующее состояние | Longint | i | Переменная счётчик | Integer | j | Переменная счётчик | Integer | Procedure TForm1.RecvSock | Buffer | Переменная для записи данных | Str | iStruckSize | Размер структуры адреса | Integer | i | Переменная счётчик | Integer | j | Переменная счётчик | Integer | Procedure TForm1.SendSock | Buffer | Переменная для записи данных | Str |
Продолжение таблицы 2 Имя | Назначение | Тип | Procedure TForm1.N6Click | ws | Данные для версии библиотеки | TWSADATA | on_off_sock | Переменная для перевода сокета в неблокирующее состояние | Longint | Procedure TForm1.N7Click | ws | Данные для версии библиотеки | TWSADATA | on_off_sock | Переменная для перевода сокета в неблокирующее состояние | Longint | Procedure TForm1.FormDestroy | Не имеет переменных | Procedure TForm1.N8Click |
Не имеет переменных | Procedure TForm1.FormCreate | Не имеет переменных | Procedure TForm1.N2Click | Не имеет переменных | Procedure TForm1.N4Click | Не имеет переменных | Procedure TForm1.N5Click | Не имеет переменных |
Текст главного модуля Main приведен в приложении А.
2.2 Руководство пользователя
Главное меню игры содержит два пункта: «Файл» и «Настройки». Пункт меню «Файл» содержит два подпункта: «Новая игра» для начала новой игры и «Выход» для выхода из программы, пункт «Настройки» включает в себя четыре подпункта: «Настройки клиента» для настройки клиентского соединения, «Настройки сервера» для настройки сервера, «Создать игру» для создания игры, «Подключиться к игре» для подключения к игре второго игрока. После того как пользователь запустит приложение «Project1.exe», появиться окно программа, представленное на рисунке 2.
Рисунок 2 – Вид окно при запуске
После запуска клиенту необходимо настроить клиента и сервера. Для настройки клиента необходимо нажать подпункт «Настройки клиента» меню «Настройки», появиться окно представленное на рисунке 3.
Рисунок 3 – Вид окна настроек клиента
Необходимо ввести номер адреса для соединения и номер порта. После ввода нажмите «ОК». Для настройки сервера необходимо нажать подпункт «Настройки сервера» меню «Настройки», появиться окно представленное на рисунке 4.
Рисунок 4 – Вид окна настроек сервера
Необходимо ввести номер порта для соединения. После ввода нажмите «ОК». После того как настроили клиента и сервера нажимаем «Новая игра» меню «Файл». В игровом окне появиться поле игрока, синим цветом, и поле соперника, белым цветом. Корабли на поле игрока расставляются с помощью курсора мыши, они будут изображены чёрным цветом. После расстановки кораблей игрок может нажимать подпункт «Создать игру», а соперник «Подключиться к игре». Начинается игра. Внизу в строке состояния игроки могут видеть счёт игры и в строке состояния появляются подсказки, о том кто должен стрелять, а кто ждать. Это можно посмотреть на рисунках 5 и 6.
Рисунок 5 – Вид окна игрока стреляющего
Рисунок 6 –Вид окна игрока ждущего выстрел
При попадании в корабль соперника, корабль перекрашивается в красный цвет, и у игрока есть ещё один шанс выстрелить, а при промахе – в зелёный. Это представлено на рисунке 7.
Рисунок 7 – Вид окна при попадании и промахе игрока
Внизу ведётся счёт, это видно на рисунке 7, первое – количество убитых вами кораблей, а второе – количество убитых кораблей у вас. После того как игрок убьёт у противника все корабли у него появится сообщение, показанное на рисунке 8.
Рисунок 8 – Сообщение при победе игрока
А у проигравшего игрока будет сообщение, расположенное на рисунке 9.
Рисунок 9 – Сообщение при проигрыше игрока
После нажатия кнопки «ОК» на появившемся сообщении, окно игры очиститься и для начала новой игры нужно будет нажать «Новая игра». Для выхода игрока из игры можно нажать подпункт «Выход» меню «Файл» или нажать на «крестик» игрового окна.
Заключение
Пользуясь собственными знаниями и литературой, была проделана работа по созданию приложения «Сетевая игра «Морской бой», в среде разработки Borland Delphi. В результате получилась сетевая игра «Морской бой», в которой ведётся подсчёт потопленных кораблей. В результате проделанной работы были получены новые знания о возможности использования сокетов, а именно об использовании неблокирующих сокетов протокола без логического соединения (UDP). Использование данной игры не требует особых знаний и усилий со стороны пользователя и больших затрат ресурсов компьютера. Поэтому она может использоваться широким кругом пользователей
Литература Дарахвелидзе П.Г., Марков Е.П. Программирование в Delphi 7. – СПб.: БВХ-Петербург, 2003. – 784 с.: ил.
Приложение А
Текст модуля Main
unit main;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, WinSock, StdCtrls, Menus, ExtCtrls, ComCtrls, dl1, dl2;
const WM_MYSOCKET = WM_USER + 1;
type str = array[0..255] of char; TForm1 = class(TForm) MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; N7: TMenuItem; Shape1: TShape; N8: TMenuItem; StatusBar1: TStatusBar; procedure N6Click(Sender: TObject); procedure N7Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure SetColorOnShape1(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SetColorOnShape2(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure N8Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure N2Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure N5Click(Sender: TObject); private { Private declarations } procedure RecvSock(var Msg:TMessage); message WM_MYSOCKET; procedure SendSock(Mes: string); procedure LoadGame(); procedure EndGame(); public { Public declarations } end;
var Form1: TForm1; InetAddr, InetAddrOut: SOCKADDR_IN; sock: TSocket; bPriem: (prnot, prinout, proutin); Pole1: array[0..9, 0..9] of TShape; Pole2: array[0..9, 0..9] of TShape; bShips: byte; bShipsPlaced: byte; bShipsYouKilled: byte; bShipsHeKilled: byte; vx, vy : byte; blVystrel: boolean; blGameStatus: boolean; iLocalPort: integer; sServerAddr: string; iServerPort: integer;
implementation
{$R *.dfm} {Новая игра} procedure TForm1.LoadGame(); var i,j,h,w:integer; begin bShips := 7; h:=10; w:=10; {Поле игрока} for i:=0 to 9 do begin for j:=0 to 9 do begin Pole1[i,j]:=TShape.Create(Self); Pole1[i,j].Parent:=Self; Pole1[i,j].Left:=w+25*j; Pole1[i,j].Top:=h+25*i; Pole1[i,j].Height:=25; Pole1[i,j].Width:=25; Pole1[i,j].Brush.Color:=clSkyBlue; Pole1[i,j].OnMouseUp:= SetColorOnShape1; end; end; w:=266; {Поле соперника} for i:=0 to 9 do begin for j:=0 to 9 do begin Pole2[i,j]:=TShape.Create(Self); Pole2[i,j].Parent:=Self; Pole2[i,j].Left:=w+25*j; Pole2[i,j].Top:=h+25*i; Pole2[i,j].Height:=25; Pole2[i,j].Width:=25; Pole2[i,j].OnMouseUp:= SetColorOnShape2; end; end; end;
procedure TForm1.SetColorOnShape1(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i,j:integer; f:Boolean; begin f:=false; for i:=0 to 9 do for j:=0 to 9 do if Not blGameStatus then if Sender = Pole1[i,j] then if bShipsPlaced < bShips then begin if Pole1[i,j].Brush.Color = clBlack then f := true; if Pole1[i-1,j+1].Brush.Color = clBlack then f := true; if Pole1[i+1,j-1].Brush.Color = clBlack then f := true; if Pole1[i+1,j+1].Brush.Color = clBlack then f := true; if Pole1[i-1,j-1].Brush.Color = clBlack then f := true; if Not f then begin Pole1[i,j].Brush.Color:=clBlack; inc(bShipsPlaced); end end else begin blGameStatus:=true; N6.Enabled:=true; N7.Enabled:=true; end; end;
procedure TForm1.SetColorOnShape2(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i,j:integer; begin if blVystrel then for i:=0 to 9 do for j:=0 to 9 do if Sender = Pole2[i,j] then if Pole2[i,j].Brush.Color = clWhite then begin vx:=i; vy:=j; SendSock(IntToStr(10*i+j)); bPriem := proutin; end; end;
{Конец игры} procedure TForm1.EndGame(); var on_off_sock: longint; i, j: byte; begin for i:=0 to 9 do for j:=0 to 9 do begin try Pole1[i,j].Destroy; Pole2[i,j].Destroy; except end; end; bShipsPlaced:=0; bShipsYouKilled:=0; bShipsHeKilled:=0; blGameStatus:=false; on_off_sock:=0; ioctlsocket(sock, FIONBIO, on_off_sock); closesocket(sock); WSACleanup; N8.Enabled:=true; end;
{Прием данных из сокета} procedure TForm1.RecvSock(var Msg:TMessage); var Buffer: str; iStruckSize: integer; i, j: byte; begin if ((Msg.Msg = WM_MYSOCKET) and (Msg.lParam = FD_READ)) then begin {IF 1} ZeroMemory(@Buffer, SizeOf(str)); if recvfrom(sock, Buffer, 256, 0, InetAddrOut, iStruckSize) > 0 then begin {IF 2} case bPriem of {CASE 1} prinout: begin {prinout} i := StrToInt(Buffer) div 10; j:= StrToInt(Buffer) mod 10; if Pole1[i,j].Brush.Color = clBlack then begin SendSock('popal'); Pole1[i,j].Brush.Color := clRed; blVystrel := false; bPriem := prinout; inc(bShipsHeKilled); StatusBar1.Panels[1].Text := 'Ждите...'; end else begin SendSock('nepopal'); Pole1[i,j].Brush.Color := clHighlight; blVystrel := true; bPriem := prnot; StatusBar1.Panels[1].Text := 'Стреляйте...'; end; StatusBar1.Panels[0].Text := 'Счет: ' + IntToStr(bShipsYouKilled) + '-' + IntToStr(bShipsHeKilled); if bShipsYouKilled = bShips then begin ShowMessage('Вы выиграли!'); StatusBar1.Panels[1].Text := ''; EndGame(); end; if bShipsHeKilled = bShips then begin ShowMessage('Вы проиграли!'); StatusBar1.Panels[1].Text := ''; EndGame(); end; end; {END prinout} proutin: begin {proutin} if StrComp(Buffer, PChar('popal')) = 0 then begin Pole2[vx,vy].Brush.Color := clRed; inc(bShipsYouKilled); StatusBar1.Panels[1].Text := 'Стреляйте...'; end; if StrComp(Buffer, PChar('nepopal')) = 0 then begin Pole2[vx,vy].Brush.Color := clHighlight; StatusBar1.Panels[1].Text := 'Ждите...'; end; bPriem:= prinout; StatusBar1.Panels[0].Text := 'Счет: ' + IntToStr(bShipsYouKilled) + '-' + IntToStr(bShipsHeKilled); if bShipsYouKilled = bShips then begin ShowMessage('Вы выиграли!'); StatusBar1.Panels[1].Text := ''; EndGame(); end; if bShipsHeKilled = bShips then begin ShowMessage('Вы проиграли!'); StatusBar1.Panels[1].Text := ''; EndGame(); end; end; {END proutin} prnot: end; {END CASE 1} end; {END IF 2} end; {EDN IF 1} end;
procedure TForm1.SendSock(Mes: string); var Buffer: str; begin ZeroMemory(@Buffer, SizeOf(str)); StrCopy(Buffer, PChar(Mes)); sendto(sock, Buffer, StrLen(Buffer) + 1, 0, InetAddrOut, SizeOf(InetAddrOut)); end;
//Сервер procedure TForm1.N6Click(Sender: TObject); var ws: TWSADATA; on_off_sock: longint; begin if WSAStartup($0202, ws)=0 then begin InetAddr.sin_family := AF_INET; InetAddr.sin_addr.s_addr := INADDR_ANY; InetAddr.sin_port := htons (iLocalPort); sock := socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (sock <> INVALID_SOCKET) then begin if bind(sock, InetAddr, sizeof(InetAddr)) <> SOCKET_ERROR then begin N7.Enabled:=false; N6.Enabled:=false; on_off_sock:=1; ioctlsocket(sock, FIONBIO, on_off_sock); WSAAsyncSelect(sock, Form1.Handle, WM_MYSOCKET, FD_READ); bPriem := prinout; blVystrel:=false; StatusBar1.Panels[1].Text := 'Ждите...'; end else ShowMessage('bind () с ошибкой ' + IntToStr(GetLastError)); end else ShowMessage('Ошибка создания сокета ' + IntToStr(WSAGetLastError)); end else ShowMessage('Невозможно загрузить библиотеку WinSock2'); end;
//Клиент procedure TForm1.N7Click(Sender: TObject); var ws: TWSADATA; on_off_sock: longint; begin if WSAStartup($0202, ws)=0 then begin InetAddr.sin_family := AF_INET; InetAddr.sin_addr.s_addr := inet_addr(PChar(sServerAddr)); InetAddr.sin_port := htons(iServerPort); sock := socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); //-- if (sock <> INVALID_SOCKET) then begin N7.Enabled:=false; N6.Enabled:=false; InetAddrOut := InetAddr; on_off_sock :=1; ioctlsocket(sock, FIONBIO, on_off_sock); WSAAsyncSelect(sock, Form1.Handle, WM_MYSOCKET, FD_READ); bPriem := prnot; blVystrel:=true; StatusBar1.Panels[1].Text := 'Стреляйте...'; end else ShowMessage('Oshibka sozdaniya soketa ' + IntToStr(WSAGetLastError)); end else ShowMessage('Невозможно загрузить библиотеку WinSock2'); end;
procedure TForm1.FormDestroy(Sender: TObject); begin EndGame(); end;
procedure TForm1.N8Click(Sender: TObject); begin LoadGame(); N8.Enabled:=false; end;
procedure TForm1.FormCreate(Sender: TObject); begin iLocalPort:=50; sServerAddr:='127.0.0.1'; iServerPort:=50; end;
procedure TForm1.N2Click(Sender: TObject); begin Application.Terminate; end;
procedure TForm1.N4Click(Sender: TObject); begin Form3.Left := Form1.Left + (Form1.Width - Form3.Width) div 2; Form3.Top := Form1.Top + (Form1.Height - Form3.Height) div 2; Form3.Edit1.Text := sServerAddr; Form3.Edit2.Text := IntToStr(iServerPort); if Form3.ShowModal = mrOK then begin sServerAddr:= Form3.Edit1.Text; iServerPort := StrToInt(Form3.Edit2.Text); end; end;
procedure TForm1.N5Click(Sender: TObject); begin Form2.Left := Form1.Left + (Form1.Width - Form2.Width) div 2; Form2.Top := Form1.Top + (Form1.Height - Form2.Height) div 2; Form2.Edit1.Text:=IntToStr(iLocalPort); if Form2.ShowModal = mrOK then begin iLocalPort:=StrToInt(Form2.Edit1.Text); end; end;
end. 28 520100 ДФ 230102 КР 18 ПЗ ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования
СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ Усть-Илимский филиал Индустриальный факультет
Кафедра информатики
КУРСОВАЯ РАБОТА
По предмету: Сетевые технологии
Разработка приложения «Сетевая игра «Морской бой». Выполнил студент гр. АОИ-04 | Филимонова А.В. |
| Оценка: |
| Проверил | Кузнецов А.С. |
| Дата защиты: |
|
|
2008 год ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования
СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ Усть-Илимский филиал
Индустриальный факультет Кафедра информатики
ЗАДАНИЕ на курсовую работу
По дисциплине: Сетевые технологии Студенту Филимоновой Анны Витальевны гр. АОИ-04 Задание: Разработать приложение «Сетевая игра «Морской бой». Средством разработки является среда разработки Borland Delphi.
Дата выдачи: 28.01.08. Срок сдачи: 11.04.08.
Календарный план
Номер п/п | Наименование разделов | Сроки | Процент выполнения | Дата контроля |
|
| Начало | Конец | План | Факт |
| 1 | Выбор темы | 28.01.08 | 04.02.08 | 4 |
|
| 2 | Составление плана работы | 04.02.08 | 11.02.08. | 20 |
|
| 3 | Изучение теоретического материала | 11.02.08 | 31.03.08. | 30 |
|
| 4 | Стадии и этапы разработки | 11.02.08. | 31.04.08 | 80 |
|
| 4.1 | Техническое задание | 11.02.08 | 25.02.08 | +10 |
|
| 4.2 | Разработка программы | 25.02.08 | 24.04.08 | +25 |
|
| 4.3 | Тестирование и отладка | 24.04.08 | 31.04.08 | +15 |
|
| 5 | Оформление отсчета | 31.04.08 | 10.04.08 | 90 |
|
| 6 | Норма контроль | 10.04.08 | 11.04.08 | 93 |
|
| 7 | Защита |
| 11.04.08 | 100 |
|
|
Задание принял: Филимонова А.В. 28.01.08
Оценка ____Руководитель: _____________Кузнецов А.С. «__» _________ 200 __ г. |