Рефераты. Игра "Мозайка" на Делфи (Delphi)

1.3.2.11      Рестарт

Восстановления данных при программном или аппаратном сбоях не

предусматривается.

1.3.2.12      Мобильность

Программа должна свободно переноситься с одного компьютера на другой при помощи соответствующих носителей информации.

1.3.2.13      Требования к программной документации

Программная документация должна разрабатываться согласно ЕСПД, ГОСТ 19.701-90, ГОСТ 2.304-88.

Программная документация должна включать следующие документы:

·        Техническое задание;

·        Рабочий проект.

В приложении к документу «Рабочий проект» должен быть приведен листинг исходных текстов программы и блок-схемы алгоритмов.

1.4              Стадии и этапы разработки

Выполнение разработки должно включать две стадии:

·        Техническое задание;

·        Рабочий проект.

На стадии «Техническое задание» проводится постановка задачи, разработка требований к программному изделию, изучение литературы по задаче и оформление документа «Техническое задание».

На стадии «Рабочий проект» проводится разработка схем алгоритмов для каждого из функциональных модулей, физическое проектирование программного изделия, разработка тестов, тестирование и отладка программных модулей. В заключение данного этапа оформляется документ «Рабочий проект».

1.5              Порядок контроля и приемки

Тесты должны быть разработаны на этапе рабочего проектирования программного изделия.

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

2.РАБОЧИЙ ПРОЕКТ

2.1              Введение

Приложение представляет собой игру «Мазайка», для которой не требуется особое оформление в связи с тем, что рабочее поле полностью закрывается загруженной картинкой. Игра затягивает пользователя, прежде всего популярностью близкой игры «Пятнашки», которая не так давно была очень популярна. 

2.2              Функциональные и эксплуатационные характеристики изделия

2.2.1      Программные ограничения

         Данная программа должна работать автономно под управлением операционных систем Windows 95, Windows 98, Windows ME, NT 4.0, Windows 2000, Windows XP.


2.2.2      Требования к составу и параметрам технических средств

         Для работы программного изделия требуется персональный компьютер, обладающий следующими параметрами:

·        объем ОЗУ не менее 32 Мб;

·        объем жесткого диска не менее 900 Мб;

·        микропроцессор с тактовой частотой не менее 133 МГц;

·        монитор с глубиной цвета 16 бит;

·        дисковод floppy-дисков.


Для бесперебойной работы программы рекомендуем следующие параметры компьютера:

·        объем ОЗУ 128 Мб;

·        объем жесткого диска 3 Гб;

·        микропроцессор с тактовой частотой 333 МГц.

2.2.3      Результирующие компоненты изделия

·        исполнительный файл программы Mazaika.exe;

·        рабочие модули программы;

·        программная документация на изделие.

2.2.4      Требования к надежности

Программа прошла функциональное тестирование и успешно отработала на всех тестах. Тесты разрабатывались на всех этапах выполнения проекта.

2.2.5      Удобство эксплуатации

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

2.2.6      Мобильность

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





2.3    Описание модулей

2.3.1      Модуль Unit1

2.3.1.1           Таблица компонентов

Название

Страница палитры компонентов

Изменяемые свойства

Значение

1

Form1

-

Caption

Мазайка

AutoSize

false

2

MainMenu1

Standard

Items

Файл

     Открыть

     Новая игра

     Выход


О программе

3

OpenPictureDialog1

Dialogs

 

 


2.3.1.2           Внешний вид формы

 

2.3.1.2           Входные данные

         положение фишек;

2.3.1.3           Промежуточные данные

         проверка на наличие «собранности» мозайки;

2.3.1.4           Выходные данные

результат игры.

2.3.1.5           Блок-схемы алгоритмов

         Приложение А, стр. 13

2.3.1.6           Текст модуля

Приложение Б, стр. 25

 

















ПРИЛОЖЕНИЯ

Приложение А


 

 

 

 

 

 

 


Приложение Б

 

Листинг модуля Unit1

unit Unit1;


interface


uses

  Windows, Messages, SysUtils, Variants, Classes,

  Graphics, Controls, Forms, Dialogs, ExtDlgs, Menus;


type

  TForm1 = class(TForm)

    MainMenu1: TMainMenu;

    N2: TMenuItem;

    N3: TMenuItem;

    N4: TMenuItem;

    C1: TMenuItem;

    N5: TMenuItem;

    OpenPictureDialog1: TOpenPictureDialog;

    procedure FormCreate(Sender: TObject);

    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure FormPaint(Sender: TObject);

    procedure Load;

    procedure Refresh;

    procedure New;

    procedure N3Click(Sender: TObject);

    procedure N2Click(Sender: TObject);

    procedure C1Click(Sender: TObject);

    procedure N5Click(Sender: TObject);


  private

    { Private declarations }

  public

    { Public declarations }

  end;


var

  Form1: TForm1;


implementation


{$R *.dfm}


const

H=4;

W=4;   // размер поля 4*4 клетки

var

widt,heig:integer; // ширина и высота одной клетки

pole:array[1..H,1..W] of byte;   // свойства поля

zx,zy:integer; // координаты пустой клетки

pos:array[1..H, 1..W] of byte =(( 1, 2, 3, 4),( 5, 6, 7, 8),( 9,10,11,12),(13,14,15, 0));         // выигрышный вариант

pic:TBitmap;   // сама картинка


procedure TForm1.New;

var

f: string[20]; // файл загружаемой картинки

i,j: integer;

begin

 f:='picture10.bmp';

  try

  pic.LoadFromFile(f);

   except

    on EFopenError do

     begin

      ShowMessage('Ошибка загрузки файла');

      Form1.Close;

     end;

   end;

    heig:=Pic.Height div H;         // Размер клетки

    widt:=Pic.Width div W;

    ClientWidth:=widt*W;     //Размер формы по размеру картинки

    ClientHeight:=heig*H;

     for i:=1 to H do

      for j:=1 to W do

      pole[i,j]:=pos[i,j];

      Form1.Refresh;    // перемещение клеток

      Form1.Load; // загрузка поля

end;


// проверка на факт выигрыша

function GameOver: boolean;

var

rw,cl:integer;

i:integer;

begin

 rw:=1;

 cl:=1;

 GameOver:=True; // клети расставлены правильно

  for i:=1 to 15 do

   begin

    if pole[rw,cl]<>i then

     begin

      GameOver:=False;

      break;

     end;

      if cl<4

      then inc(cl)

      else begin

       cl:=1;

       inc(rw);

      end;

   end;

end;


// ход в соседнюю пустую клетку

procedure Go(clickx,clicky:integer);

var

r:integer;

begin

 if not ((abs(clickx-zx)=1) and (clicky-zy=0) or  // проверка на возможность хода

 (abs(clicky-zy)=1) and (clickx-zx=0))

 then exit;

  pole[zy,zx]:=Pole[clicky,clickx];     // осуществим переход из [x,y] в [zx,zy]

  pole[clicky,clickx]:=0;

  zx:=clickx;

  zy:=clicky;

  Form1.Load;             // перерисовка поля

   if GameOver then

    begin

     pole[4,4]:=16;

     Form1.Load;

     r:=MessageDlg('Вы выиграли!'+ #13+'Сыграем ещё?',mtInformation,[mbYes,mbNo],0);

      if r=mrNo then Form1.Close;

       Form1.New;

    end;

end;


// клик по клетке

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X,Y:Integer);

var

clickx,clicky:integer; // координаты кликаемой клетки

begin

 clickx:=Trunc(X/widt)+1;       // переведём щелчок мыши в координаты клетки

 clicky:=Trunc(Y/heig)+1;

 Go(clickx,clicky);

end;


procedure TForm1.Load;         // отвечает за загрузку поля

var

into,outof:Trect; // ввод и вывод

lx,ly:integer;      // координаты верхнего левого угла ввода

i,j:integer;

begin

 for i:=1 to W do            // отслеживает содержимое клеток

  for j:=1 to H do

   begin

    ly:=((pole[i,j]-1) div W) * heig;          // присвоим координатам верхнего левого угла ввода номер картинки

    lx:=((pole[i,j]-1) mod W) * widt;

    into:=Bounds(lx,ly,widt,heig);

    outof:=Bounds((j-1)*widt,(i-1)*heig,widt,heig);

     if pole[i,j]<>0

     then Canvas.CopyRect(outof,pic.Canvas,into)

     else Canvas.Rectangle((j-1)*widt,(i-1)*heig,j*widt,i*heig);

   end;

end;


procedure TForm1.refresh;          // "тусует" фрагменты картинки

var

x1,y1:integer;             // координаты пустой клетки

x2,y2:integer;             // взять картинку из этой координаты и поменять её с пустой

n:integer;                 // направление возможного хода

i:integer;

begin

 x1:=4;

 y1:=4;

 randomize;

  for i:=1 to 150 do       // варианты расстановки

   begin

    repeat

     x2:=x1;

     y2:=y1;

     n:=random(4)+1;

      case n of

       1:dec(x2);

       2:inc(x2);

       3:dec(y2);

       4:inc(y2);

   end;

    until (x2>=1) and (x2<=4) and (y2>=1) and (y2<=4);

     pole[y1,x1]:=pole[y2,x2];    // определим фрагмент перемещения

     pole[y2,x2]:=0;

     x1:=x2;

     y1:=y2;

    end;

     zx:=x1;        // координаты пустой клетки

     zy:=y1;

end;


procedure TForm1.FormCreate(Sender: TObject);

begin

pic:=TBitMap.Create;

New;

end;


procedure TForm1.FormPaint(Sender: TObject);

begin

Form1.Load;

end;


procedure TForm1.N3Click(Sender: TObject);

begin

close;

end;


procedure TForm1.N2Click(Sender: TObject);

var i,j: integer;

begin

    heig:=Pic.Height div H;         // Размер клетки

    widt:=Pic.Width div W;

    ClientWidth:=widt*W;     //Размер формы по размеру картинки

    ClientHeight:=heig*H;

     for i:=1 to H do

      for j:=1 to W do

      pole[i,j]:=pos[i,j];

      Form1.Refresh;    // перемещение клеток

      Form1.Load; // загрузка поля

end;


procedure TForm1.C1Click(Sender: TObject);

begin

showmessage('Программа к курсовому проекту');

end;


procedure TForm1.N5Click(Sender: TObject);

var

f: string[20]; // файл загружаемой картинки

i,j: integer;

begin

 openpicturedialog1.Execute;

  try

  pic.LoadFromFile(openpicturedialog1.FileName);

   except

    on EFopenError do

     begin

      ShowMessage('Ошибка загрузки файла');

      Form1.Close;

     end;

   end;

    heig:=Pic.Height div H;         // Размер клетки

    widt:=Pic.Width div W;

    ClientWidth:=widt*W;     //Размер формы по размеру картинки

    ClientHeight:=heig*H;

     for i:=1 to H do

      for j:=1 to W do

      pole[i,j]:=pos[i,j];

      Form1.Refresh;    // перемещение клеток

      Form1.Load; // загрузка поля

end;


end.


Страницы: 1, 2



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.