1.3.2.11 Рестарт
Восстановления данных при программном или аппаратном сбоях не
предусматривается.
1.3.2.12 Мобильность
Программа должна свободно переноситься с одного компьютера на другой при помощи соответствующих носителей информации.
1.3.2.13 Требования к программной документации
Программная документация должна разрабатываться согласно ЕСПД, ГОСТ 19.701-90, ГОСТ 2.304-88.
Программная документация должна включать следующие документы:
· Техническое задание;
· Рабочий проект.
В приложении к документу «Рабочий проект» должен быть приведен листинг исходных текстов программы и блок-схемы алгоритмов.
Выполнение разработки должно включать две стадии:
На стадии «Техническое задание» проводится постановка задачи, разработка требований к программному изделию, изучение литературы по задаче и оформление документа «Техническое задание».
На стадии «Рабочий проект» проводится разработка схем алгоритмов для каждого из функциональных модулей, физическое проектирование программного изделия, разработка тестов, тестирование и отладка программных модулей. В заключение данного этапа оформляется документ «Рабочий проект».
Тесты должны быть разработаны на этапе рабочего проектирования программного изделия.
Приемка программного изделия осуществляется при сдаче документально оформленных этапов разработки, передаче программного изделия и проведении испытаний на основе установленных тестов.
Приложение представляет собой игру «Мазайка», для которой не требуется особое оформление в связи с тем, что рабочее поле полностью закрывается загруженной картинкой. Игра затягивает пользователя, прежде всего популярностью близкой игры «Пятнашки», которая не так давно была очень популярна.
Данная программа должна работать автономно под управлением операционных систем Windows 95, Windows 98, Windows ME, NT 4.0, Windows 2000, Windows XP.
Для работы программного изделия требуется персональный компьютер, обладающий следующими параметрами:
· объем ОЗУ не менее 32 Мб;
· объем жесткого диска не менее 900 Мб;
· микропроцессор с тактовой частотой не менее 133 МГц;
· монитор с глубиной цвета 16 бит;
· дисковод floppy-дисков.
Для бесперебойной работы программы рекомендуем следующие параметры компьютера:
· объем ОЗУ 128 Мб;
· объем жесткого диска 3 Гб;
· микропроцессор с тактовой частотой 333 МГц.
· исполнительный файл программы Mazaika.exe;
· рабочие модули программы;
· программная документация на изделие.
Программа прошла функциональное тестирование и успешно отработала на всех тестах. Тесты разрабатывались на всех этапах выполнения проекта.
Программа содержит интуитивный интерфейс, позволяющий без дополнительных подсказок запустить игру.
Для копирования программы с дискеты на компьютер необходимо скопировать содержимое папки «Курсовик» на жесткий диск компьютера.
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 клетки
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;
f: string[20]; // файл загружаемой картинки
i,j: integer;
begin
f:='picture10.bmp';
try
pic.LoadFromFile(f);
except
on EFopenError do
ShowMessage('Ошибка загрузки файла');
Form1.Close;
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; // загрузка поля
// проверка на факт выигрыша
function GameOver: boolean;
rw,cl:integer;
i:integer;
rw:=1;
cl:=1;
GameOver:=True; // клети расставлены правильно
for i:=1 to 15 do
if pole[rw,cl]<>i then
GameOver:=False;
break;
if cl<4
then inc(cl)
else begin
inc(rw);
// ход в соседнюю пустую клетку
procedure Go(clickx,clicky:integer);
r:integer;
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
pole[4,4]:=16;
Form1.Load;
r:=MessageDlg('Вы выиграли!'+ #13+'Сыграем ещё?',mtInformation,[mbYes,mbNo],0);
if r=mrNo then Form1.Close;
Form1.New;
// клик по клетке
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X,Y:Integer);
clickx,clicky:integer; // координаты кликаемой клетки
clickx:=Trunc(X/widt)+1; // переведём щелчок мыши в координаты клетки
clicky:=Trunc(Y/heig)+1;
Go(clickx,clicky);
procedure TForm1.Load; // отвечает за загрузку поля
into,outof:Trect; // ввод и вывод
lx,ly:integer; // координаты верхнего левого угла ввода
i,j:integer;
for i:=1 to W do // отслеживает содержимое клеток
for j:=1 to H do
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);
procedure TForm1.refresh; // "тусует" фрагменты картинки
x1,y1:integer; // координаты пустой клетки
x2,y2:integer; // взять картинку из этой координаты и поменять её с пустой
n:integer; // направление возможного хода
x1:=4;
y1:=4;
randomize;
for i:=1 to 150 do // варианты расстановки
repeat
x2:=x1;
y2:=y1;
n:=random(4)+1;
case n of
1:dec(x2);
2:inc(x2);
3:dec(y2);
4:inc(y2);
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;
zx:=x1; // координаты пустой клетки
zy:=y1;
procedure TForm1.FormCreate(Sender: TObject);
pic:=TBitMap.Create;
New;
procedure TForm1.FormPaint(Sender: TObject);
procedure TForm1.N3Click(Sender: TObject);
close;
procedure TForm1.N2Click(Sender: TObject);
var i,j: integer;
procedure TForm1.C1Click(Sender: TObject);
showmessage('Программа к курсовому проекту');
procedure TForm1.N5Click(Sender: TObject);
openpicturedialog1.Execute;
pic.LoadFromFile(openpicturedialog1.FileName);
end.
Страницы: 1, 2