Разработка приложения Игра Морской Бой

Автор работы: Пользователь скрыл имя, 15 Апреля 2014 в 21:31, курсовая работа

Краткое описание

Целью моей курсовой работы является программирование с помощью Delphi 5. Прежде чем начать выполнять свое задание рассмотрим эту систему программирования, в общем.
Delphi - это греческий город, где жил дельфийский оракул. И этим именем был назван новый программный продукт с феноменальными характеристиками.

Вложенные файлы: 1 файл

kursovaya_po_delphi.doc

— 487.00 Кб (Скачать файл)

Расстановка кораблей противника происходит от 4х палубного к одно палубному.

Координаты четырехпалубного корабль выбираются случайно(переменная m и переменная n) случайно лишь с условием того чтобы он не выходил за границы поля при этом выбирается случайное горизонтальное или вертикальное положение (переменная z). При этом координаты корабля помечаются цифрами «2» в матрице.

Трехпалубные и двухпалубные корабли расстанавливаются точно также только дополнительно идет сравнение на пересечение и соприкосновение кораблей друг с другом.

Однопалубным кораблям незачем проверка выхода за границы поля, поэтому проверка происходит только на пересечение и соприкосновение.

К тому же расстановка трехпалубных кораблей происходит в цикле до тех пор пока не будет расстановлено два корабля, двухпалубные – пока не буду расстановлены три корабля, и однопалубные – пока не будут расстановлены четыре корабля.

Первоначально на форму выводится сообщение «Расставьте корабли», это означает что игроку следует расставить свои корабли перед началом работы.

Процедура rastkor.

При передвижении мыши по полю игрока ячейкам матрицы (в зависимости от расстанавливаемого корабля) присваивается значение 1. При этом при каждом изменении происходит прорисовка матрицы, для того чтобы пользователь мог видеть происходящие изменения.

При изменении ячейка матрицы со значением «0» рисуется белым квадратом, со значением «1» желтым.

При нажатии правой клавиши мыши происходит ротация корабля, проверка на ротацию происходит перед движением мыши.

 

Расстановка корабля происходит по нажатии левой клавиши мыши на поле игрока.

Процедура nash

Расстановка происходит лишь в том случае если расстанавливаемый корабль не выходит за рамки поля, не пересекается и не соприкасается не с одним из расстанавливаемых кораблей.

Также каждый из кораблей расстанавливается в зависимости от количества его палуб, т.е. четырехпалубный – один, трехпалубных – два, двухпалубных – три, однопалубных – четыре.

При этом ячейке матрицы поля игрока присваивается значение «2». После каждого нажатия происходит прорисовка поля игрока, для этого каждая ячейка с цифрой «2» закрашивается серым.

 

После того как все корабли расставлены (k11<0) начинается обмен выстрелами с компьютером.

Процедура vistrel.

Выстрел производится при нажатии на одну из клеток поля компьютера. Если ячейка имеет значение «0»(пустая клетка) то ячейке присваивается значение «3», ячейка имеет значение «2» то ячейке присваивается значение «4».

Затем происходит прорисовка поля компьютера. Клетка которой соответствует ячейка со значением «3» рисуется маленький квадрат, клетка которой соответствует ячейка со значением «4» проверяется ранен или убит корабль если убит то рисуется красный квадрат, если ранен то рисуется серый квадрат перечеркнутый красным крестом.

После происходит проверка выиграл ли игрок или нет, для этого матрица компьютера сканируется и если не находится ни одной ячейки со значением «2» то выходит сообщение –

 

«Поздравляю!

Вы победили.»

 

Если не находится то проверяется если игрок опал в ячейку со значением «2» то ему предоставляется ещё один выстрел, и т. д. пока игрок не попадет в ячейку со значением «0».

Тогда наступает очередь хода компьютера.

Компьютер выбирает произвольную клетку из поля игрока и если её значение равно «0» то значение становится равным «3», если значение равно «2» от значение клетки становится равным «4».

Затем происходит прорисовка поля компьютера. Клетка которой соответствует ячейка со значением «3» рисуется маленький квадрат, клетка которой соответствует ячейка со значением «4» проверяется ранен или убит корабль если убит то рисуется красный квадрат, если ранен то рисуется серый квадрат перечеркнутый красным крестом.

Компьютер стреляет до тех пор пека не попадет в клетку со значением «0».

После происходит проверка проиграл ли игрок или нет, для этого матрица игрока сканируется и если не находится ни одной ячейки со значением «2» то выходит сообщение –

 

«Вы проиграли.

Попробуйте ещёраз!»

 

Более подробно смотрите исходный текст программы Приложение 1.

 

Реализация справочной информации

Справочная информация (правила игры) реализована с помощью программы Microsoft Help WorkShop. Эта программа позволяет создать файл справочной информации для Windows, используя текст формата Rich Edit Text. В процессе работы этой программы создается файл проекта справки *.hpj, который впоследствии может быть откомпилирован в файл справки (*.hlp).

В данной курсовой работе был создан файл проекта справки morb.hpj, который был откомпилирован с помощью программы Microsoft Help WorkShop в файл morb.hlp (рис.3).

Более подробно см. Приложение 2.

Описание пользовательского интерфейса

Игра – Новая игра (горячая клавиша F2) – начать новую игру после окончания.

Игра – Выход – выход из программы.

Помощь – Справка (горячая клавиша F1) – Вызов справки.

Помощь – О программе – Короткая информация о программе.

 

ЗАКЛЮЧЕНИЕ

 

В результате выполнения данной курсовой работы был получен игровой программный продукт, названный «Морской бой». Было проведено исследование компонентов программной среды Borland Delphi 6.0, которые использовались при создании игры.

В результате исследования были выявлены следующие недостатки полученного программного продукта:

  1. Низкий исскуственный интеллект, т.е. ход компьютера осуществляется случайным образом, что делает маловероятным победу компьютера;
  2. Невозможность возврата на несколько ходов назад;
  3. Работоспособность приложения только в среде Windows;
  4. Невозможность автоматической расстановки кораблей игрока.

Однако, помимо недостатков, есть и достоинства у этого программного продукта:

  1. Создана интерактивная справка с правилами игры;
  2. Программный продукт малотребователен к системным ресурсам компьютера. Минимальная конфигурация: процессор – не ниже Pentium, оперативная память – не ниже 16 Mb, операционная система – Windows 95 / 98/ Me / NT / 2000 / XP.

В результате учета всех сделанных выше замечаний возможно улучшение созданного программного продукта, на которое потребуется минимум изменений исходного кода программы.

 

Литература

  1. Фаронов В.В. Delphi 4. Учебный курс. –М.: Нолидж, 1999. -447с.
  2. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. –М.:Нолидж, 1997. -616с.

 

Приложение 1

Исходный текст

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ExtCtrls, StdCtrls, Menus, XPMan;

 

type

  TForm1 = class(TForm)

    Panel1: TPanel;

    Image1: TImage;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    Label5: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    Label8: TLabel;

    Label9: TLabel;

    Label10: TLabel;

    Label11: TLabel;

    Label25: TLabel;

    Panel2: TPanel;

    Image2: TImage;

    Label13: TLabel;

    Label14: TLabel;

    Label15: TLabel;

    Label16: TLabel;

    Label17: TLabel;

    Label18: TLabel;

    Label19: TLabel;

    Label20: TLabel;

    Label21: TLabel;

    Label22: TLabel;

    Label23: TLabel;

    Label26: TLabel;

    MainMenu1: TMainMenu;

    N1: TMenuItem;

    N2: TMenuItem;

    N3: TMenuItem;

    N4: TMenuItem;

    N6: TMenuItem;

    N5: TMenuItem;

    Label12: TLabel;

    Label24: TLabel;

    Label27: TLabel;

    Label28: TLabel;

    Label29: TLabel;

    procedure FormCreate(Sender: TObject);

    procedure rastkor(Sender: TObject; Shift: TShiftState; X, Y: Integer);

    procedure nash(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure N2Click(Sender: TObject);

    procedure vistrel(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure N3Click(Sender: TObject);

    procedure N5Click(Sender: TObject);

    procedure N6Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

  i,j,g,x1,y1,k11,k21,

  k33,k32,k31,m3,m2,m1,           //кол-во 3х 2х 1х кораблей

  m,n,z:integer;

  rot,                   //ротация кораблей

  riad,rnd,              //для того что бы рядом не  ставились,нужна для рандомирования

  win,lose,              //проверка на победу или поражение

  bum,                   //проверка выстрела компьютера

  kon,                   //проверка конца игры

  cokil: boolean;          //попал ли комрьютер

  b1,b2:Array[1..14,1..14] of integer;

implementation

 

uses Unit2;

 

{$R *.dfm}

 

procedure TForm1.FormCreate(Sender: TObject);

begin

rot:=false;   //заполнение переменных

kon:=false;

k11:=3;

k33:=2;

k32:=5;

k31:=9;

m3:=0;

m2:=0;

m1:=0;

label13.Height:=0;

label14.Height:=0;

label15.Height:=0;

label16.Height:=0;

label17.Height:=0;

label18.Height:=0;

label19.Height:=0;

label20.Height:=0;

label21.Height:=0;

label22.Height:=0;

label23.Height:=0;

label26.Height:=0;

 

label12.Caption:='Расставьте корабли';

For i:=1 to 10 do  //рисует сетку поля игрока

  for j:=1 to 10 do

    begin

      b1[i,j]:=0;

      image1.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j);

    end;

randomize;

m:=random(10)+1;

n:=random(10)+1;

 z:=(random(100) mod 2);

 

//расстановка клораблей компьютера

 

//четырехпалубный

case n of

  1..7:

    case m of

      1..7: for i:=0 to 3 do

              if z=0 then

                b2[m+i,n]:=2

              else

                b2[m,n+i]:=2;

 

      8..10: for i:=0 to 3 do

              if z=0 then

                b2[m-i,n]:=2

              else

                b2[m,n+i]:=2;

     end;

   8..10:

     case m of

      1..7: for i:=0 to 3 do

              if z=0 then

                b2[m+i,n]:=2

              else

                b2[m,n-i]:=2;

 

      8..10: for i:=0 to 3 do

              if z=0 then

                b2[m-i,n]:=2

              else

                b2[m,n-i]:=2;

 

      end;

 

end;

                //трехпалубные

while m3<2 do begin

  m:=random(10)+1;

  n:=random(10)+1;

  z:=(random(100) mod 2);

 

 

case n of

  1..7:

    case m of

      1..7: case z of

                 0:    if  (b2[m,n]<>2) and

                           (b2[m-1,n-1]<>2) and

                           (b2[m-1,n]<>2) and

                           (b2[m-1,n+1]<>2) and

                           (b2[m,n-1]<>2)and

                           (b2[m+1,n+1]<>2)and

                           (b2[m+1,n]<>2) and

                           (b2[m+1,n-1]<>2) and

                           (b2[m,n+1]<>2) and

 

                           (b2[m+1,n+2]<>2) and

                           (b2[m-1,n+2]<>2) and

                           (b2[m,n+2]<>2) and

 

 

                           (b2[m+1,n+3]<>2) and

                           (b2[m-1,n+3]<>2) and

                           (b2[m,n+3]<>2) and

 

                           (b2[m,n+3]<>2)  then

                              begin

 

                          for i:=0 to 2 do

                          b2[m,n+i]:=2;

                            m3:=m3+1

                              end;

                   1:  if  (b2[m,n]<>2) and

                           (b2[m+1,n+1]<>2) and

                           (b2[m,n+1]<>2) and

                           (b2[m-1,n+1]<>2) and

                           (b2[m-1,n]<>2)and

                           (b2[m-1,n-1]<>2)and

                           (b2[m,n-1]<>2) and

                           (b2[m+1,n-1]<>2) and

                           (b2[m+1,n]<>2) and

 

                           (b2[m+2,n-1]<>2) and

                           (b2[m+2,n+1]<>2) and

                           (b2[m+2,n]<>2) and

 

                           (b2[m+3,n-1]<>2) and

                           (b2[m+3,n+1]<>2) and

                           (b2[m+3,n]<>2) and

 

                           (b2[m+3,n]<>2)  then  begin

                          for i:=0 to 2 do

                             b2[m+i,n]:=2;

                             m3:=m3+1

                                                  end

            end;

      8..10: case z of

                 0: if     (b2[m,n]<>2) and

                           (b2[m+1,n+1]<>2) and

                           (b2[m,n+1]<>2) and

                           (b2[m-1,n+1]<>2) and

                           (b2[m-1,n]<>2)and

                           (b2[m-1,n-1]<>2)and

                           (b2[m,n-1]<>2) and

                           (b2[m+1,n-1]<>2) and

 

                           (b2[m-2,n-1]<>2) and

                           (b2[m-2,n+1]<>2) and

                           (b2[m-2,n]<>2) and

 

                           (b2[m-3,n-1]<>2) and

                           (b2[m-3,n+1]<>2) and

 

                           (b2[m-3,n]<>2)  then

                       begin

                          for i:=0 to 2 do

                             b2[m-i,n]:=2;

                               m3:=m3+1

                      end;

 

                   1:    if  (b2[m,n]<>2) and

                           (b2[m-1,n-1]<>2) and

                           (b2[m-1,n]<>2) and

                           (b2[m-1,n+1]<>2) and

                           (b2[m,n-1]<>2)and

                           (b2[m+1,n+1]<>2)and

                           (b2[m+1,n]<>2) and

                           (b2[m+1,n-1]<>2) and

                           (b2[m,n+1]<>2) and

 

                           (b2[m+1,n+2]<>2) and

                           (b2[m-1,n+2]<>2) and

                           (b2[m,n+2]<>2) and

 

 

                           (b2[m+1,n+3]<>2) and

                           (b2[m-1,n+3]<>2) and

                           (b2[m,n+3]<>2) and

 

                           (b2[m,n+3]<>2)  then

                              begin

 

                          for i:=0 to 2 do

                          b2[m,n+i]:=2;

                            m3:=m3+1

                              end;

                  end

 

     end;

   8..10:

     case m of

      1..7: case z of

                 0:  if   (b2[m,n]<>2) and

                           (b2[m+1,n+1]<>2) and

                           (b2[m,n+1]<>2) and

                           (b2[m-1,n+1]<>2) and

                           (b2[m-1,n]<>2)and

                           (b2[m-1,n-1]<>2)and

Информация о работе Разработка приложения Игра Морской Бой