Учебная работа. Реферат: Сетевая игра на Delphi Морской бой
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 Мбайт (минимум);
— видеоплата — малое разрешение 800×600 при 256 цветах (рекомендуется разрешение 1024×768);
— сетевая карта — для сетевой версии 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. приложение реализовано на базе 1-го не блокирующегося сокета UDP. В программке клиент является и сервером, т.е. он сам обрабатывает действия.
Наружный вид программки опосля ее пуска представлен на рисунке 1.
Набросок 1 – Наружный вид программки «Сетевая игра «Морской бой»
Для удобства управления работой программки было сотворено основное меню, содержащее два пт: «Файл» и «Опции».
Пункт меню «Файл» содержит два подпункта:
a) новенькая игра;
b) выход.
Пункт меню «Опции» содержит четыре подпункта:
опции клиента;
опции сервера;
сделать игру;
подключиться к игре.
В программке предвидено, чтоб подпункты меню «Опции»: «Сделать игру» и «Подключиться к игре» были активными лишь опосля того, как игрок создаст поле игры и расставит все корабли. Но опосля того как Игроки подключаться к игре они опять стают не активными.
Для опции клиента нужен адресок и порт, а для сервера – порт. Окна опций возникают в центре игрового окна.
Поле игрока и конкурента создаются при помощи объектов типа Shape, размером 25 на 25.
В программке имеются подсказки, которые показываются в статусной строке и молвят, о том кто должен стрелять, а кто ожидать.
В игре предусмотрен подсчёт счёт. Счёт ведётся как количество убитых вами кораблей и количество убитых у вас кораблей. При проигрыше либо выигрыше игрока выводятся сообщения о этом.
приложение «Сетевая игра «Морской бой» состоит из 1-го программного модуля 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, 1-ое – количество убитых вами кораблей, а 2-ое – количество убитых кораблей у вас.
Опосля того как игрок убьёт у противника все корабли у него покажется сообщение, показанное на рисунке 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(bShipsYouKilledactiveXIntToStr(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(bShipsYouKilledactiveXIntToStr(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 __ г.
]]>