Автор работы: Пользователь скрыл имя, 23 Июня 2011 в 00:44, курсовая работа
Цель курсовой работы – разработка приложения , моделирующего игру “Морской бой”.
Для выполнения поставленной задачи использовалась среда программирования ИСР Delphi 7.0.
ИСР Delphi – это среда разработки программ, ориентированных на работу в Windows. В основе идеологии Delphi лежит технология визуального проектирования и методология объектно-ориентированного программирования. Для представления программ в Delphi используется разработанный фирмой Borland язык Object Pascal, в основе которого лежит Turbo Pascal. Слово “Object” особо подчеркивает, что язык поддерживает концепцию объектно-ориентированного программирования.
ОСНОВНЫЕ ДАННЫЕ О РАБОТЕ 1
СОДЕРЖАНИЕ 2
ВВЕДЕНИЕ 3
1. РАЗРАБОТКА ЭСКИЗНОГО И ТЕХНИЧЕСКОГО ПРОЕКТОВ ПРОГРАММЫ 4
1.1. Назначение и область применения 4
1.2. Постановка задачи 4
1.3. Описание алгоритма 4
1.4. Организация входных и выходных данных 12
1.5. Выбор состава технических и программных средств 12
2. РАЗРАБОТКА РАБОЧЕГО ПРОЕКТА 13
2.1. Разработка программы 13
2.2 Спецификация программы 15
2.3 Текст программы 16
2.4 Описание программы 25
2.5 Тестирование программы 25
3. ВНЕДРЕНИЕ 26
ЗАКЛЮЧЕНИЕ 29
ГЛОССАРИЙ 30
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 32
If Proverka(mX,mY,Comppole,Comp) then
Begin
mX:=0;
mY:=0;
Goto 1;
End;
If Comp[mX,mY]=2 then
Begin
mX:=0;
mY:=0;
vX:=0;
vY:=0;
Exit;
End;
If (vX=0)and(vY=0) then Repeat
Case random(4) of
0:vY:=-1;
1:vX:=-1;
2:vX:=1;
3:vY:=1;
End;
If (Comp[mX+vX,mY+vY]>1)or(mX+vX=
or(mY+vY=11) Then
Begin
vX:=0;
vY:=0;
End;
Until Comp[mX+vX,mY+vY]<2;
Repeat
mX:=mX+vX;
mY:=mY+vY;
Draw(mX,mY,True,Comppole,Comp)
If Proverka(mX,mY,Comppole,Comp) then
Begin
mX:=0;
mY:=0;
vX:=0;
vY:=0;
Goto 1;
End
else If
((mX+vX=0)or(mX+vX=11)or(mY+
Begin
vX:=-vX;
vY:=-vY;
Goto 1;
End;
Until Comp[mX,mY]=2;
If (mX>0)or(mY>0) then
Begin
vX:=-vX;
vY:=-vY;
mX:=mX+vX;
mY:=mY+vY;
If (Comp[mX+vX,mY+vY]=2)or(mX+vX<
Begin
vX:=0;
vY:=0;
End;
End
Else
Begin
vX:=0;
vY:=0;
End;
End;
procedure TMainform.ManpoleClick(Sender: TObject);
// Процедура хода игрока
Begin
// Определение координат щелчка мыши
X:=Manpole.Selection.Right+1;
Y:=Manpole.Selection.Bottom+1;
// Если ячейка открыта, то выходим
If Man[X,Y] in [2,3] Then Exit;
Draw(X,Y,True,Manpole,Man);
Proverka(X,Y,Manpole,Man);
// Проверка на победу одной из сторон
If Win Then Exit;
// Если в ячейке ничего нет, то - ход компьютера
If Man[X,Y]=2 then CompRun;
end;
procedure TMainForm.Generate;
// Процедура расстановки кораблей компьютером
Label 1,2;
var napr:array [0..3] of byte;
// Сохраняет направления, которые были испробованы при постановке корабля на поле
t1:integer;
// Вспомогательная переменная
Begin
For x:=4 downto 1 do
For y:=x to 4 do
Begin
// Обнуления направлений
1:For Size:=0 to 3 do
Napr[Size]:=0;
// Случайный выбор координат
Repeat
mX:=random(10)+1;
mY:=random(10)+1;
Until Man[mX,mY]=0;
2:t1:=0;
// Проверка направлений
For Size:=0 to 3 do
t1:=t1+Napr[Size];
// Если все перебраны, то заново определяем координаты
If t1=4 then Goto 1;
Repeat
vY:=0; vX:=0;
// Случайное определение направления
Size:=random(4);
Case Size of
0:vX:=1;
1:vX:=-1;
2:vY:=-1;
3:vY:=1;
end;
Until Napr[Size]=0;
Napr[Size]:=1;
// Если направление выбрано по оси X, то...
If vX<>0 Then
Begin
If vX=1 Then vX:=mX+X-1
Else vX:=mX-X+1;
// Проверка преемственности размещения корабля
If (vX<1)or(vX>10) Then Goto 2;
If not ArRound(Man,mX,mY,vX,mY) Then Goto 2;
// Регистрация корабля в массиве
For mX:=mX To vX Do
Man[mX,mY]:=1;
End;
// Если направление выбрано по оси Y, то...
If vY<>0 Then
Begin
If vY=1 Then vY:=mY+X-1
Else vY:=mY-X+1;
// Проверка преемственности размещения корабля
If (vY<1)or(vY>10) Then Goto 2;
If not ArRound(Man,mX,mY,mX,vY) Then Goto 2;
// Размещение корабля в массиве
For mY:=mY To vY Do
Man[mX,mY]:=1;
End;
End;
End;
procedure TMainform.Menu2Click(Sender: TObject);
//
Выбор из главного
меню пункта "Начать
новую"
procedure Clear(Obj:TDrawGrid; var AR:Arr);
// Очистка графического поля и соответствующего этому полю массива
Begin
Obj.Canvas.Brush.Color:=
For x:=1 To 10 Do
For y:=1 To 10 do
Begin
Ar[x,y]:=0;
Obj.Canvas.FillRect(Rect(21*(
End;
End;
Begin
Clear(Comppole,Comp);
Clear(Manpole,Man);
Manpole.Enabled:=False;
Label1.Font.Color:=ClBlack;
Label1.Caption:='Корабль: 4-палубный';
Size:=1;
For x:=4 downto 1 do
For y:=x to 4 do
Begin
Boat[Size]:=x;
Inc(Size);
End;
Size:=1;
Comppole.Enabled:=True;
End;
procedure TMainform.ComppoleMouseDown(
Shift: TShiftState; X, Y: Integer);
// Координаты, при нажатии клавиши мыши (при расстановке кораблей игроком)
Begin
If Button<>MbLeft Then Exit;
mX:=Comppole.Selection.Right+
mY:=Comppole.Selection.Top+1;
End;
procedure TMainform.ComppoleMouseUp(
Shift: TShiftState; X, Y: Integer);
// Координаты при отпускании клавиши мыши (при расстановке кораблей игроком)
Begin
If Button<>MbLeft Then Exit;
X:=Comppole.Selection.Right+1;
Y:=Comppole.Selection.Top+1;
// Если направление установки корабля горизонтальное
If X=mx then
Begin
// Если количество выбранных клеток отлично от количества палуб корабля, то выход
If Boat[Size]<>abs(Y-my)+1 then exit;
// Проверка на пустоту соседних клеток
If not ArRound(Comp,X,mY,X,Y) Then Exit;
// Регистрация корабля в массиве и отображение его на игровом поле
For mY:=mY to Y do
Begin
Comp[X,mY]:=1;
Draw(X,mY,False,Comppole,Comp)
End;
End
// Если направление установки корабля вертикальное
Else If Y=my Then
Begin
// Если количество выбранных клеток отлично от количества палуб корабля, то выход
If Boat[Size]<>abs(X-mx)+1 then exit;
// Проверка на пустоту соседних клеток
If not ArRound(Comp,mX,Y,X,Y) Then exit;
// Запись корабля в массив и отображение его на игровом поле
For mX:=mX to X do
Begin
Comp[mX,Y]:=1;
Draw(mX,Y,False,Comppole,Comp)
End;
End
Else Exit;
Boat[Size]:=0;
// Проверка на расстановку всех кораблей
If Size<10 then
Begin
Inc(Size);
Label1.Caption:='Корабль:
'+inttostr(Boat[Size])+'-
End
Else
Begin
Size:=0;
// Вызов процедуры расстановки кораблей компьютером
Generate;
Label1.Font.Color:=ClLime;
Label1.Caption:='Ваше поле:';
Comppole.Enabled:=False;
Comppole.Tag:=20;
Manpole.Enabled:=True;
Manpole.Tag:=20;
mX:=0; mY:=0; vX:=0; vY:=0;
End;
End;
procedure TMainform.FormCreate(Sender: TObject);
Begin
Randomize;
vX:=0;
vY:=0;
mX:=0;