Учебная работа. Реферат: Сетевая игра на Delphi Морской бой

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Контрольные рефераты

Учебная работа. Реферат: Сетевая игра на 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 __ г.

]]>