Автор работы: Пользователь скрыл имя, 15 Апреля 2014 в 21:31, курсовая работа
Целью моей курсовой работы является программирование с помощью Delphi 5. Прежде чем начать выполнять свое задание рассмотрим эту систему программирования, в общем.
Delphi - это греческий город, где жил дельфийский оракул. И этим именем был назван новый программный продукт с феноменальными характеристиками.
For i:=1 to 10 do //рисует желтым цветом корабль(ещё не поставленный)
for j:=1 to 10 do
begin
if (b1[i,j]=1) then
begin
image1.Canvas.Brush.Color:=
image1.Canvas.Rectangle(20*i-
end;
end;
end;
end;
end
else
if rot=false then begin //ставит корабль по горизонтали
case k11 of //смотрит какой корабль ставить
0: case x1 of //смотрит есть
ли рядом с однопалубным
1: if (b1[x1,y1]<>2) and
(b1[x1+1,y1+1]<>2) and
(b1[x1,y1+1]<>2) and
(b1[x1,y1-1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+1,y1]<>2) then
begin
b1[x1,y1]:=2;
riad:=true
end
else
riad:=false;
2..10: if (b1[x1,y1]<>2) and
(b1[x1+1,y1+1]<>2) and
(b1[x1,y1+1]<>2) and
(b1[x1-1,y1+1]<>2) and
(b1[x1-1,y1]<>2)and
(b1[x1-1,y1-1]<>2)and
(b1[x1,y1-1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+1,y1]<>2) then begin
b1[x1,y1]:=2;
riad:=true
end
else
riad:=false;
end;
1: case x1 of //смотрит есть ли рядом с двупалубным кораблём другие корабли
1:if(b1[x1,y1]<>2) and
(b1[x1+1,y1+1]<>2) and
(b1[x1,y1+1]<>2) and
(b1[x1,y1-1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+2,y1-1]<>2) and
(b1[x1+2,y1+1]<>2) and
(b1[x1+2,y1]<>2) and (x1+1<11)
then
for i:=0 to k11 do
begin
b1[x1+i,y1]:=2;
riad:=true
end
else
riad:=false;
2..10: if (b1[x1,y1]<>2) and
(b1[x1+1,y1+1]<>2) and
(b1[x1,y1+1]<>2) and
(b1[x1-1,y1+1]<>2) and
(b1[x1-1,y1]<>2)and
(b1[x1-1,y1-1]<>2)and
(b1[x1,y1-1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+2,y1-1]<>2) and
(b1[x1+2,y1+1]<>2) and
(b1[x1+2,y1]<>2) and (x1+1<11) then
for i:=0 to k11 do begin
b1[x1+i,y1]:=2;
riad:=true
end
else
riad:=false;
end;
2: case x1 of //смотрит есть ли рядом с трехпалубным кораблём другие корабли
1: if (b1[x1,y1]<>2) and
(b1[x1+1,y1+1]<>2) and
(b1[x1,y1+1]<>2) and
(b1[x1,y1-1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+2,y1-1]<>2) and
(b1[x1+2,y1+1]<>2) and
(b1[x1+3,y1-1]<>2) and
(b1[x1+3,y1+1]<>2) and
(b1[x1+3,y1]<>2) and (x1+2<11) then
for i:=0 to k11 do begin
b1[x1+i,y1]:=2;
riad:=true
end
else
riad:=false;
2..10:
if (b1[x1,y1]<>2) and
(b1[x1+1,y1+1]<>2) and
(b1[x1,y1+1]<>2) and
(b1[x1-1,y1+1]<>2) and
(b1[x1-1,y1]<>2)and
(b1[x1-1,y1-1]<>2)and
(b1[x1,y1-1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+2,y1-1]<>2) and
(b1[x1+2,y1+1]<>2) and
(b1[x1+3,y1-1]<>2) and
(b1[x1+3,y1+1]<>2) and
(b1[x1+3,y1]<>2) and (x1+2<11) then
for i:=0 to k11 do begin
b1[x1+i,y1]:=2;
riad:=true
end
else
riad:=false
end;
3: if x1+3<11 then //ставит четырехпалубный корабль
begin
for i:=0 to k11 do
b1[x1+i,y1]:=2;
riad:=true
end
else
riad:=false;
end;
if riad=true then begin //смотрит если корабль поставлен то уменьшает счетчик
if (k11=3) then
begin;
k11:=k11-1;
end;
if (k11=2) and (k33=0) then
begin
k11:=k11-1;
k33:=k33-1
end
else
k33:=k33-1;
if (k11=1) and (k32=0) then
begin
k11:=k11-1;
k32:=k32-1
end
else
k32:=k32-1;
if (k11=0) and (k31=0) then
begin
k11:=k11-1;
k31:=k31-1
end
else
k31:=k31-1;
end;
end
else
//ставит корабль по
begin
case k11 of //смотрит какой корабль ставить
0: case x1 of //смотрит есть ли рядом с однопалубным кораблём другие корабли
1: if (b1[x1,y1]<>2) and
(b1[x1+1,y1+1]<>2) and
(b1[x1,y1+1]<>2) and
(b1[x1,y1-1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+1,y1]<>2) then
begin
b1[x1,y1]:=2;
riad:=true
end
else
riad:=false;
2..10: if
(b1[x1,y1]<>2) and
(b1[x1+1,y1+1]<>2) and
(b1[x1,y1+1]<>2) and
(b1[x1-1,y1+1]<>2) and
(b1[x1-1,y1]<>2)and
(b1[x1-1,y1-1]<>2)and
(b1[x1,y1-1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+1,y1]<>2) then begin
b1[x1,y1]:=2;
riad:=true
end
else
riad:=false;
end;
1: case x1 of //смотрит есть ли рядом с двупалубным кораблём другие корабли
1: if (b1[x1,y1]<>2) and
(b1[x1,y1-1]<>2)and
(b1[x1+1,y1+1]<>2)and
(b1[x1+1,y1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+1,y1+2]<>2) and
(b1[x1,y1+2]<>2) and (y1+1<11) then
for i:=0 to k11 do begin
b1[x1,y1+i]:=2;
riad:=true
end
else
riad:=false;
2..10:
if (b1[x1,y1]<>2) and
(b1[x1-1,y1-1]<>2) and
(b1[x1-1,y1]<>2) and
(b1[x1-1,y1+1]<>2) and
(b1[x1,y1-1]<>2)and
(b1[x1+1,y1+1]<>2)and
(b1[x1+1,y1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+1,y1+2]<>2) and
(b1[x1-1,y1+2]<>2) and
(b1[x1,y1+2]<>2) and (y1+1<11) then
for i:=0 to k11 do begin
b1[x1,y1+i]:=2;
riad:=true
end
else
riad:=false
end;
2: case x1 of //смотрит есть ли рядом с двупалубным кораблём другие корабли
1:if (b1[x1,y1]<>2) and
(b1[x1,y1-1]<>2)and
(b1[x1+1,y1+1]<>2)and
(b1[x1+1,y1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+1,y1+2]<>2) and
(b1[x1+1,y1+3]<>2) and
(b1[x1,y1+3]<>2) and (y1+2<11) then
for i:=0 to k11 do begin
b1[x1,y1+i]:=2;
riad:=true
end
else
riad:=false;
2..10:
if (b1[x1,y1]<>2) and
(b1[x1-1,y1-1]<>2) and
(b1[x1-1,y1]<>2) and
(b1[x1-1,y1+1]<>2) and
(b1[x1,y1-1]<>2)and
(b1[x1+1,y1+1]<>2)and
(b1[x1+1,y1]<>2) and
(b1[x1+1,y1-1]<>2) and
(b1[x1+1,y1+2]<>2) and
(b1[x1-1,y1+2]<>2) and
(b1[x1+1,y1+3]<>2) and
(b1[x1-1,y1+3]<>2) and
(b1[x1,y1+3]<>2) and (y1+2<11) then
for i:=0 to k11 do begin
b1[x1,y1+i]:=2;
riad:=true
end
else
riad:=false
end;
3: if y1+3<11 then
begin
for i:=0 to k11 do
b1[x1,y1+i]:=2;
riad:=true
end
else
riad:=false
end;
if riad=true then begin //смотрит если корабль поставлен то уменьшает счетчик
if (k11=3) then
begin;
k11:=k11-1;
end;
if (k11=2) and (k33=0) then
begin
k11:=k11-1;
k33:=k33-1
end
else
k33:=k33-1;
if (k11=1) and (k32=0) then
begin
k11:=k11-1;
k32:=k32-1
end
else
k32:=k32-1;
if (k11=0) and (k31=0) then
begin
k11:=k11-1;
k31:=k31-1
end
else
k31:=k31-1;
end;
end;
For i:=1 to 10 do
//закрашивает поставленные
for j:=1 to 10 do
begin
if b1[i,j]=2 then
begin
image1.Canvas.Brush.Color:=
image1.Canvas.Rectangle(20*i-
end;
end;
if k11<0 then begin //проверяет поставлены ли все корабли, если "да" то начинает игру с компьютером
label12.Height:=0;
label13.Height:=13;
label14.Height:=13;
label15.Height:=13;
label16.Height:=13;
label17.Height:=13;
label18.Height:=13;
label19.Height:=13;
label20.Height:=13;
label21.Height:=13;
label22.Height:=13;
label23.Height:=13;
label26.Height:=13;
image2.Height:=200;
image2.Width:=200;
for i:=1 to 10 do //ресует белую сетку поля компьютера
for j:=1 to 10 do begin
image2.Canvas.Brush.Color:=
image2.Canvas.Rectangle(20*i-
end
end;
end;
procedure TForm1.N2Click(Sender: TObject); //начинает новыю игру
begin
image1.Canvas.Brush.Color:=
rot:=false;
k11:=3;
k33:=2;
k32:=5;
k31:=9;
label12.Height:=62;
image2.Height:=0;
For i:=1 to 10 do //обнуляет массивы
for j:=1 to 10 do
begin
b1[i,j]:=0;
b2[i,j]:=0;
image1.Canvas.Rectangle(20*i-
end;
FormCreate(self); //использует процедуру создания формы
end;
procedure TForm1.vistrel(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); //процедура обмена выстрелов
begin
x1:=(X div 20)+1;
y1:=(Y div 20)+1;
if kon=false then begin //проверка закончилась игра или нет
case b2[x1,y1] of
0: b2[x1,y1]:=3; //если попал в пустую клетка становится - просреленной пустой
2: b2[x1,y1]:=4;
//если попал в клетку с
3,4: exit; //если попал в клетку в которую уже стрелял то ничего не происходит
end;
for i:=1 to 10 do
//рисуется графическое поле
for j:=1 to 10 do
begin
case b2[i,j] of
4: begin //клетка в котрой стоит подбитый или не доконца подбитый корабль
if ((b2[i+1,j]=2) //не доконца подбитый корабль
or(b2[i,j+1]=2)
or(b2[i-1,j]=2)
or(b2[i,j-1]=2))
or (((b2[i+1,j]=4)and(b2[i+2,j]=
or((b2[i,j+1]=4)and(b2[i,j+2]=
or((b2[i-1,j]=4)and(b2[i-2,j]=
or((b2[i,j-1]=4)and(b2[i,j-2]=
or(((b2[i+1,j]=4)and(b2[i+2,j]
or((b2[i,j+1]=4)and(b2[i,j+2]=
or((b2[i-1,j]=4)and(b2[i-2,j]=
or((b2[i,j-1]=4)and(b2[i,j-2]=
then
begin
image2.Canvas.Brush.Color:=
image2.Canvas.Rectangle(20*i-
image2.Canvas.pen.Color:=
image2.Canvas.MoveTo(20*i-19,
image2.Canvas.LineTo(20*i-1,
image2.Canvas.MoveTo(20*i-1,
image2.Canvas.LineTo(20*i-19,
image2.Canvas.pen.Color:=
end
else
begin
image2.Canvas.Brush.Color:=
image2.Canvas.Rectangle(20*i-
end;
end;
3: begin
image2.Canvas.Brush.Color:=
image2.Canvas.Rectangle(20*i-
end;
end;
end;
win:=true;
For i:=1 to 10 do //если
находится хотябы один
for j:=1 to 10 do
if b2[i,j]=2 then
win:=false;
if win=true then //вывод сообщения при победе
begin
showmessage ('Поздравляю!'+#13+'Вы победили.');
kon:=true;
exit
end;
if b2[x1,y1]=4 then //если игрок попал то компьютер не ходит
exit;
bum:=false;
cokil:=true;
while (bum=false) or (cokil=true) do //стрел-ть до тех пор пока не попал в клетку в которую не стрылял и если она пустая
begin
m:=random(10)+1;
n:=random(10)+1;
case b1[m,n] of
0: begin
b1[m,n]:=3;
bum:=true;
cokil:=false
end;
2: begin
b1[m,n]:=4;
bum:=true;
cokil:=true
end
end;
For i:=1 to 10 do
//рисуется графическое поле
for j:=1 to 10 do
begin
case b1[i,j] of
3: begin //простреленая пустая клетка
image1.Canvas.Brush.Color:=
image1.Canvas.Rectangle(20*i-
end;
4:begin
//клетка в котрой стоит
if ((b1[i+1,j]=2)
or(b1[i,j+1]=2)
or(b1[i-1,j]=2)
or(b1[i,j-1]=2))
or(((b1[i+1,j]=4)and(b1[i+2,j]
or((b1[i,j+1]=4)and(b1[i,j+2]=
or((b1[i-1,j]=4)and(b1[i-2,j]=
or((b1[i,j-1]=4)and(b1[i,j-2]=
or(((b1[i+1,j]=4)and(b1[i+2,j]
or((b1[i,j+1]=4)and(b1[i,j+2]=
or((b1[i-1,j]=4)and(b1[i-2,j]=
or((b1[i,j-1]=4)and(b1[i,j-2]=
then begin
image1.Canvas.pen.Color:=
image1.Canvas.MoveTo(20*i-19,
image1.Canvas.LineTo(20*i-1,
image1.Canvas.MoveTo(20*i-1,
image1.Canvas.LineTo(20*i-19,
image1.Canvas.pen.Color:=
end
else
begin
image1.Canvas.Brush.Color:=
image1.Canvas.Rectangle(20*i-
end;
end;
end;
end;
end;
lose:=true;
For i:=1 to 10 do
//если находится хотябы один
неподбитый корабль то
for j:=1 to 10 do
if b1[i,j]=2 then
lose:=false;
if lose=true then
begin
kon:=true;
showmessage ('Вы проиграли.'+#13+'
exit
end;
end;
end;
procedure TForm1.N3Click(Sender: TObject); //процедура нажатия на кнопку "выход"
begin
close
end;
procedure TForm1.N5Click(Sender: TObject); //процедура нажатия на кнопку "О программе..."
begin
form2.ShowModal
end;
procedure TForm1.N6Click(Sender: TObject);
begin
winhelp(Form1.Handle,'morb.
end;
end.
Руководство пользователя
Правила
Морской бой –игра известная всем с детства.
Условия победы – уничтожить все корабли противника.
Условия поражения – потеря всех своих кораблей.
В начале игры перед вами пустое поле(рис. 1)
Рис. 1
для начала игры вы должны расставить свои корабли (расстановка начинается с 4палубного корабля и далее по уменьшению палуб) для этого переведите курсор мыши на поле с пустыми белыми клетками, при этом под курсором появиться желтое изображения корабля (рис. 2)
Рис. 2
при нажатии на правую кнопку мыши происходит ротация корабля (рис. 3)