Автор работы: Пользователь скрыл имя, 22 Марта 2013 в 09:49, курсовая работа
Целью курсовой работы является получение опыта самостоятельной разработки в соответствии с заданием пользовательского приложения, работающего под управлением ОС Microsoft Windows, в среде разработки приложений Delphi 7, а также получение навыка составления пояснительной записки и оформления в соответствии с требованиями, принятыми на факультете «Информационные системы в управлении».
Задачами курсовой работы являются:
Разработка программы в соответствии с заданием;
Составление пояснительной записки в соответствии с требованиями.
Овладеть навыками самостоятельной работы;
Закрепить, углубить и расширить теоретические знания в соответствии с дисциплиной «Вычислительная математика».
Задание 3
Реферат 4
Введение 5
Правила игры 6
Описание программы 6
Теоретические основы 7
Обзор используемых в программе компонентов Borland Delphi 9
Блок-схема программы 14
Системные требования и необходимое оборудование 22
Заключение 23
Список литературы 24
Листинг программы 25
Свойство SimplePanel определяе
Каждая панель полосы состояния является объектом типа TStatusPanels. Свойства панелей вы можете задавать специальным редактором наборов.
Основное свойство каждой панели — Text, в который заносится отображаемый в панели текст. Его можно занести в процессе проектирования, а затем можно изменять программно во время выполнения. Другое существенное свойство панели — Width (ширина).
Программный доступ к текстам отдельных панелей можно осуществлять двумя способами: через индексированное свойство Panels или через его индексированное подсвойство Items.
Компонент TBitBtn
TBitBtn - кнопка вроде TButton, однако на ней можно разместить картинку (glyph). TBitBtn имеет несколько предопределенных типов (bkClose, bkOK и др), при выборе которых кнопка принимает соответствующий вид. Кроме того, нажатие кнопки на модальном окне (Form2.ShowModal) приводит к закрытию окна с соответствующим модальным результатом (Form2.ModalResult).
приводит к закрытию окна с соответствующим модальным результатом (Form2.ModalResult).
Этот компонент доступен из модуля BUTTONS, и находится на странице Палитры компонентов Additional.
Эта кнопка, будучи потомком TButton, может нести на себе пиктограмму и имеет рад дополнительных удобств в использовании. В Delphi уже определены стандартные виды кнопок:
(Pb) property Kind: TBitBtnKind;
TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bklgnore, bkAll);
Для каждой из них определены: передаваемый форме результат (ModalResult):
BitBtnModalResults: array[TBitBtnKind] of TModalResult =
(0, mrOk, mrCancel, 0, mrYes, mrNo, 0, mrAbort, mrRetry, mrlgnore, inrAll);
а также название и картинки для разных состояний. Достаточно установить значение свойства Kind, и кнопка сразу приобретет нужный вид. Более того, некоторые из видов кнопок при нажатии сразу совершают определенные действия. Так, bkHelp осуществляет инициализацию системы помощи со своим (или ближайшим ненулевым родительским) контекстом. Кнопка вида bkClose закрывает форму, которой она принадлежит, вызывая ее метод Close.
Блок-схема программы
Рисунок 1.1 – Блок-схема процедуры Delay
Рисунок 1.2 – Блок-схемы процедур: CheckPos
Рисунок 1.3 – Блок-схемы процедуры Convert
Рисунок 1.4 – Блок-схема процедуры CheckStatus
Демонстрация работы программы
Для начала работы с программой нужно запустить приложение Solitaire4L. Появится окно программы (рисунок 1.5).
Рисунок 1.5 – окно программы «Четыре линии»
Для загрузки новой игры нужно открыть раздел «Игра» и щелкнуть левой кнопкой мышки по подразделу «Новая игра» либо нажать f2.
Рисунок 1.6 – окно загруженной программы «Четыре линии»
При щелчке на подраздел «Содержание» раздела меню «?» появляется сообщение, содержащее описание цели и правил игры. (рисунок 1.7).
Рисунок 1.7 – Справка
При щелчке на подраздел «О программе» раздела меню «?» появляется сообщение, содержащее сведения о приложении (рисунок 1.8).
Рисунок 1.8 – О программе
По окончании игры программа выдает пользователю сообщение с поздравлением (рисунок 1.9), после чего, вам будет предложено сыграть ещё раз.
Рисунок 1.9 – Конец игры
Системные требования и необходимое оборудование:
Для корректной работы данной игры необходимо следующее:
Заключение
В ходе выполнения
курсовой работы были более подробно
изучены
и изложены в пояснительной записке следующие
вопросы:
Полученные знания использованы на практике. Результатом работы является приложение-игра «Четыре линии», работающее под ОС Windows.
Список литературы
Курс лекций по дисциплине: «Программирование
на языках высокого уровня», преподаватель
ГОУ СибАДИ – Михайлов Е.М http://www.delphicomponent.ru/
Иллюстрированный самоучитель по Delphi 7 для начинающих:
http://inet-knigi.org/index.
Уэзeрeлл Ч. Этюды для программистов. М.: «Мир», 1982. – 312 c.
Листинг программы
unit Main4D;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, Menus, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Game1: TMenuItem;
Quit1: TMenuItem;
SB1: TStatusBar;
NewGame1: TMenuItem;
Image1: TImage;
Deal: TMenuItem;
Help1: TMenuItem;
About1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
Undo1: TMenuItem;
Contens1: TMenuItem;
N3: TMenuItem;
procedure Quit1Click(Sender: TObject);
procedure NewGame1Click(Sender: TObject);
procedure Form1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Form1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Form1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormPaint(Sender: TObject);
procedure DealClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure Undo1Click(Sender: TObject);
procedure Contens1Click(Sender: TObject);
private
// procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
public
{ Public declarations }
end;
(*
Diamonds - Бубны
Hearts - Черви
Clubs - Крести
Spades - Пики
*)
Suits = (Diamonds,Hearts,Spades,Clubs)
CPack = record { Описание карты }
Suit : Suits; { Масти }
Card : Byte; { Величина карты }
BPos : Byte; { Поз. карты в колоде }
end;
XY = record
X : Integer;
Y : Integer;
B : Boolean;
end;
const
{ Координаты позиции карт на экране }
_PosC : array[1..4,1..9] of TPoint =
(((x:0;y:0), (x:70;y:0), (x:140;y:0), (x:210;y:0), (x:280;y:0), (x:350;y:0), (x:420;y:0), (x:490;y:0), (x:560;y:0)),
((x:0;y:95), (x:70;y:95), (x:140;y:95), (x:210;y:95), (x:280;y:95), (x:350;y:95), (x:420;y:95), (x:490;y:95), (x:560;y:95)),
((x:0;y:190),(x:70;y:190),(x:
((x:0;y:285),(x:70;y:285),(x:
BitmapName : array[0..35] of ShortString =
('B1_6','B2_7','B3_8','B4_9','
'C1_6','C2_7','C3_8','C4_9','
'P1_6','P2_7','P3_8','P4_9','
'T1_6','T2_7','T3_8','T4_9','
HCard : Byte = 96; { Высота карты }
WCard : Byte = 71; { Ширина карты }
var
Form1 : TForm1;
Pack : array[1..4,1..9] of CPack; // Колода
Lines : array[1..4] of Byte; // Длина "дорожки"
TCards : array[0..35] of CPack;
Attempt : Byte; // Счетчик попыток
Drag : Boolean; // Потащили карту???
CBitmap : TBitmap;
Background,
Card : TRect;
OPX,OPY : Integer; // Предыдущие координаты при перемещении
OSX,OSY : Integer; // Сдвиг координат относительно мыши
SPX,SPY : Integer; // Начало старта
UnX1,UnX2,
UnY1,UnY2 : Byte;
_Pos : array[1..4,1..9] of TPoint;
procedure Convert(var X,Y:Integer);
procedure CheckStatus;
procedure Delay(MSecond : LongWord);
function CheckPos(X,Y : Integer) : Boolean;
implementation
{$R *.DFM}
procedure Delay(MSecond : LongWord);
var
StartValue, CurrentValue: LongWord;
begin
if MSecond <= 0 then Exit;
//Слегонца подкорректируем значение
MSecond := MSecond * 10; //чтобы не задавать огромные числа во
//входных параметрах
StartValue := GetTickCount;
repeat
CurrentValue := GetTickCount;
until CurrentValue >= StartValue+MSecond;
end;
procedure TForm1.Quit1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.NewGame1Click(Sender: TObject);
const
SuitOfCard : array[1..4] of Suits = (Diamonds,Hearts,Spades,Clubs)
var
Card : CPack;
Bitmap1 : TBitmap;
I : Word;
X,Y : Byte;
begin
for Y:=1 to 4 do //Очищаем стол
for X:=1 to 9 do
//Затираем карту фоном
Form1.Canvas.RoundRect(_Pos[Y,
// Подготавливаем колоду}
for Y:=1 to 4 do
for X:=1 to 9 do
begin
Pack[Y,X].Suit:=SuitOfCard[Y]; { Простановка масти }
Pack[Y,X].Card:=X; { Простановка значения карты }
Pack[Y,X].BPos:=(Y-1)*9+(X-1);
TCards[(Y-1)*9+(X-1)]:=Pack[Y,
end;
Attempt:=1; { Первая попытка }
SB1.Panels[1].Text := 'Первая попытка';
Deal.Enabled := TRUE;
Undo1.Enabled := FALSE;
SB1.Panels[0].Text := 'Нажмите F3 чтобы перетасовать оставшиеся карты';
{ Тасуем колоду }
Randomize;
for I:=1 to 2000 do
begin
repeat
X:=Random(36);
Y:=Random(36);
until X<>Y;
Card:=TCards[X];
TCards[X]:=TCards[Y];
TCards[Y]:=Card;
end;
{ Выкладываем карты }
for Y:=1 to 4 do
for X:=1 to 9 do
begin
Bitmap1 := TBitmap.Create;
Pack[Y,X]:=TCards[(Y-1)*9+(X-
Bitmap1.LoadFromResourceName(
Form1.Canvas.Draw(_Pos[Y,X].X,
Bitmap1.Free;
Delay(2);
end;
CheckStatus;
SB1.Panels[2].Text := 'Осталось карт
:' + IntToStr(32 - (Lines[1]+Lines[2]+Lines[3]+
Delay(30);
{ Удаляем тузы и обновляем колоду}
for Y:=1 to 4 do
for X:=1 to 9 do
if TCards[(Y-1)*9+(X-1)].Card = 9 then
begin
Pack[Y,X].Card:=0;
//Затираем карту фоном
Form1.Canvas.RoundRect(_Pos[Y,
end else Pack[Y,X]:=TCards[(Y-1)*9+(X-
end;
function CheckPos(X,Y : Integer) : Boolean;
begin
if ((X > 20) AND (X < 651)) AND ((Y > 20) AND (Y < 401))
then CheckPos := TRUE
else CheckPos := FALSE;
end;
Procedure Convert(var X,Y:Integer);
Var
X1,Y1 : Integer;
begin
for Y1 := 1 to 4 do
if (_Pos[Y1,1].Y+1 <= Y) AND (Y < _Pos[Y1,1].Y+HCard+1) then Break;
for X1 := 1 to 9 do
if (_Pos[1,X1].X+1 <= X) AND (X < _Pos[1,X1].X+WCard+1) then Break;
X:=X1;
Y:=Y1
end;
procedure TForm1.Form1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Dest, Source: TRect;
begin
if Not Drag then Exit;
if ((X < 0) OR (Y < 0) OR (X > 670) OR (Y > 440)) then Exit;//Не даём карте полностью уйти за пределы окна
X := X-OSX;
Y := Y-OSY;
Form1.Canvas.CopyMode := cmSrcCopy;
if OPY <= Y then
begin
Dest := Rect(OPX,OPY,OPX+WCard,Y); // Определяем зону копирования для источника
Source := Rect(OPX,OPY,OPX+WCard,Y); // Определяем зону копирования для приемника}
end else
begin
Dest := Rect(OPX,Y+HCard,OPX+WCard,
Source := Rect(OPX,Y+HCard,OPX+WCard,
end;
Form1.Canvas.CopyRect(Dest,
if OPX <= X then
begin
Dest := Rect(OPX,OPY,X,OPY+HCard); // Определяем зону копирования для источника
Source := Rect(OPX,OPY,X,OPY+HCard); // Определяем зону копирования для приемника}
end else
begin
Dest := Rect(X+WCard,OPY,OPX+WCard,
Source := Rect(X+WCard,OPY,OPX+WCard,
end;
Form1.Canvas.CopyRect(Dest,
Form1.Canvas.Draw(X,Y,CBitmap)
OPX := X;
OPY := Y;
end;
procedure TForm1.Form1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Dest, Source: TRect;
begin
Image1.Canvas.CopyMode := cmSrcCopy; //Обычная отрисовка при копировании
Dest := Rect(0,0,Image1.Width,Image1.
Source := Rect(0,0,Image1.Width,Image1.
{Впредь использовать Image для этих целей. PaintBox глючит, по крайней мере у меня}
Image1.Canvas.CopyRect(Dest,
OSX := X;
OSY := Y;
Drag:=FALSE;
if NOT CheckPos(X,Y) then Exit;
Convert(X, Y); // Переводим координаты к виду 1..9,1..4
SPX := X; // Запомним, если придётся возвертаться
SPY := Y;
if Pack[Y,X].Card = 0 then Exit; //Если тута пуста
Drag:=TRUE; //Кнопка нажата
OSX := OSX - _Pos[Y,X].X; //Вычисление сдвига
OSY := OSY - _Pos[Y,X].Y;
CBitmap := TBitmap.Create;
CBitmap.LoadFromResourceName(
//Затираем карту фоном
Form1.Canvas.RoundRect(_Pos[Y,
//Впредь использовать Image для этих целей. PaintBox глючит, по крайней мере у меня
Image1.Canvas.CopyRect(Dest,
Form1.Canvas.Draw(_Pos[Y,X].X,
OPX := _Pos[Y,X].X;
OPY := _Pos[Y,X].Y;
end;