BESofБиблиотека рефератов и курсовых

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

Обновлено

23

Министерство образования и науки Российской Федерации

Курский государственный технический университет

Кафедра ПО и ВТ

КУРСОВАЯ РАБОТА

по дисциплине «Программирование на языках высокого уровня»

ИГРА «МОЗАЙКА»

Выполнил: студентка группы ПО-51

Елизавета Королева

студентка группы ПО-51

Анастасия Зиновьева

Проверил: преподаватель Петрик Е. А.

Курск 2006

СОДЕРЖАНИЕ

  • 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ 4
    • 1.1 Введение 4
    • 1.2 Основания для разработки 4
    • 1.3 Назначение разработки 4
      • 1.3.1 Функциональное и эксплуатационное назначение изделия 4
        • 1.3.1.1 Перечень требований пользователя к программному обеспечению 4
        • 1.3.1.2 Рассмотренные альтернативы 4
      • 1.3.2 Требования к программе или программному изделию 5
        • 1.3.2.1 Стандарты 5
        • 1.3.2.2 Программная совместимость 5
        • 1.3.2.3 Требования к составу и параметрам технических средств 5
        • 1.3.2.4 Входные данные 5
        • 1.3.2.5 Процесс обработки 6
        • 1.3.2.6 Выходные данные 6
        • 1.3.2.7 Результирующие компоненты изделия 6
        • 1.3.2.8 Носители информации 6
        • 1.3.2.9 Безопасность и секретность 7
        • 1.3.2.10 Требования к надежности 7
        • 1.3.2.11 Рестарт 7
        • 1.3.2.12 Мобильность 7
        • 1.3.2.13 Требования к программной документации 7
    • 1.4 Стадии и этапы разработки 7
    • 1.5 Порядок контроля и приемки 8
  • 2.РАБОЧИЙ ПРОЕКТ 8
    • 2.1 Введение 8
    • 2.2 Функциональные и эксплуатационные характеристики изделия 8
      • 2.2.1 Программные ограничения 8
      • 2.2.2 Требования к составу и параметрам технических средств 9
      • 2.2.3 Результирующие компоненты изделия 9
      • 2.2.4 Требования к надежности 9
      • 2.2.5 Удобство эксплуатации 9
      • 2.2.6 Мобильность 10
    • 2.3 Описание модулей 10
      • 2.3.1 Модуль Unit1 10
        • 2.3.1.1 Таблица компонентов 10
        • 2.3.1.2 Внешний вид формы 10
        • 2.3.1.2 Входные данные 11
        • 2.3.1.3 Промежуточные данные 11
        • 2.3.1.4 Выходные данные 11
        • 2.3.1.5 Блок-схемы алгоритмов 11
        • 2.3.1.6 Текст модуля 11
      • 2.3.2 Модуль Unit2 12
        • 2.3.2.1 Входные данные 12
        • 2.3.2.2 Промежуточные данные 12
        • 2.3.2.3 Выходные данные 12
        • 2.3.2.4 Блок-схемы алгоритмов 12
        • 2.3.2.5 Текст модуля 12
  • ПРИЛОЖЕНИЯ 13
  • СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ 37
1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ1.1 ВведениеРазработка собственных приложений в настоящее время вызывает интерес у многих людей, чьи умения в сфере разработки позволяют осуществить поставленную задачу. Я решил написать игровое приложение, главная задача которого заставить пользователя отвлечься от проблем повседневных, т.е. развлечься, что, собственно, является задачей всех игр.1.2 Основания для разработки Основанием для разработки программы является задание к курсовой работе по предмету «Программирование на языках высокого уровня». 1.3 Назначение разработки1.3.1 Функциональное и эксплуатационное назначение изделия1.3.1.1 Перечень требований пользователя к программному обеспечениюИгра «Мазайка» должна обеспечивать следующее:- если картинка собрана полностью, выводится сообщение о завершении игры;- имеется возможность выбирать картинки;- можно начинать игру заново.

1.3.1.2 Рассмотренные альтернативы

При постановке задачи на разработку программы «Мазайка» были рассмотрены следующие альтернативы:

- Программная платформа.

Рассматривались операционные системы Windows и Linux. Была выбрана система Windows в связи с широчайшим ее распространением, доступностью и наличием гибких средств разработки программного обеспечения под эту платформу.

- Средства разработки. Были рассмотрены следующие средства разработки: Delphi и С++ Builder. Был выбран Borland Delphi7. Выбор обоснован популярностью и доступностью данного программного обеспечения.

1.3.2 Требования к программе или программному изделию

1.3.2.1 Стандарты

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

1.3.2.2 Программная совместимость

Данная программа должна работать автономно под управлением

операционных систем Windows 98, Windows ME, Windows 2000, Windows XP.

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

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

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

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

· микропроцессор Intel Celeron 400 МГц;

· монитор 17” с разрешением 1024*768;

· звуковая карта.

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

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

· выбранная картинка;

· сигналы манипулятора «мышь»;

1.3.2.5 Процесс обработки

· При запуске программного изделия должно происходить открытие программной оболочки (формы).

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

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

· сообщение о выигрыше, если картинка собрана.

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

В комплект поставки программного продукта должны входить следующие

компоненты:

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

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

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

1.3.2.8 Носители информации

Программа поставляется на дискете размером 3,5 дюйма и объемом 1,44 Мб.

1.3.2.9 Безопасность и секретность

Информация, содержащаяся в изделии, не является секретной, поэтому программа не требует защиты.

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

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

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

ПРИЛОЖЕНИЯПриложение АПриложение БЛистинг модуля Unit1unit Unit1;interfaceuses 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}constH=4;W=4; // размер поля 4*4 клеткиvarwidt,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;varf: 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;varrw,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);varr: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);varclickx,clicky:integer; // координаты кликаемой клеткиbegin clickx:=Trunc(X/widt)+1; // переведём щелчок мыши в координаты клетки clicky:=Trunc(Y/heig)+1; Go(clickx,clicky);end;procedure TForm1.Load; // отвечает за загрузку поляvarinto,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; // "тусует" фрагменты картинкиvarx1,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);beginpic:=TBitMap.Create;New;end;procedure TForm1.FormPaint(Sender: TObject);beginForm1.Load;end;procedure TForm1.N3Click(Sender: TObject);beginclose;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);beginshowmessage('Программа к курсовому проекту');end;procedure TForm1.N5Click(Sender: TObject);varf: 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.