Автор работы: Пользователь скрыл имя, 22 Марта 2013 в 09:49, курсовая работа
Целью курсовой работы является получение опыта самостоятельной разработки в соответствии с заданием пользовательского приложения, работающего под управлением ОС Microsoft Windows, в среде разработки приложений Delphi 7, а также получение навыка составления пояснительной записки и оформления в соответствии с требованиями, принятыми на факультете «Информационные системы в управлении».
Задачами курсовой работы являются:
Разработка программы в соответствии с заданием;
Составление пояснительной записки в соответствии с требованиями.
Овладеть навыками самостоятельной работы;
Закрепить, углубить и расширить теоретические знания в соответствии с дисциплиной «Вычислительная математика».
Задание 3
Реферат 4
Введение 5
Правила игры 6
Описание программы 6
Теоретические основы 7
Обзор используемых в программе компонентов Borland Delphi 9
Блок-схема программы 14
Системные требования и необходимое оборудование 22
Заключение 23
Список литературы 24
Листинг программы 25
procedure TForm1.Form1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Dest, Source : TRect;
OneMoreCondition : Boolean; // Хоть одно условие выполняется ?
Vr1 : Word;
Bitmap : TBitmap;
Crd : array[0..4] of XY;
BRes1 : Boolean;
begin
OneMoreCondition := CheckPos(X,Y); //Курсор в пределах окна программы ?
if OneMoreCondition then //Если да вычисляем координаты всех углов карты
begin //и проверяем виден ли угол в окне
Crd[0].B := TRUE;
Crd[0].X := X;
Crd[0].Y := Y;
end else Crd[0].B := FALSE;
// OSX,OSY cдвиг координат относительно мыши
OneMoreCondition := CheckPos(X-OSX,Y-OSY);
if OneMoreCondition then
begin
Crd[1].B := TRUE;
Crd[1].X := X-OSX;
Crd[1].Y := Y-OSY;
end else Crd[1].B := FALSE;
OneMoreCondition := CheckPos(X-OSX,Y-OSY+HCard);
if OneMoreCondition then
begin
Crd[2].B := TRUE;
Crd[2].X := X-OSX;
Crd[2].Y := Y-OSY+HCard;
end else Crd[2].B := FALSE;
OneMoreCondition := CheckPos(X-OSX+WCard,Y-OSY);
if OneMoreCondition then
begin
Crd[3].B := TRUE;
Crd[3].X := X-OSX+WCard;
Crd[3].Y := Y-OSY;
end else Crd[3].B := FALSE;
OneMoreCondition := CheckPos(X-OSX+WCard,Y-OSY+
if OneMoreCondition then
begin
Crd[4].B := TRUE;
Crd[4].X := X-OSX+WCard;
Crd[4].Y := Y-OSY+HCard;
end else Crd[4].B := FALSE;
if NOT Drag then Exit;
OneMoreCondition := FALSE;
X := Crd[0].X;
Y := Crd[0].Y;
for Vr1 := 0 to 4 do
if Crd[Vr1].B then
begin
Convert(Crd[Vr1].X, Crd[Vr1].Y); // Переводим координаты к виду 1..9,1..4
if Pack[Crd[Vr1].Y,Crd[Vr1].X].
begin
X := Crd[Vr1].X;
Y := Crd[Vr1].Y;
OneMoreCondition := TRUE; //Попадает!
Break;
end;
end;
if NOT OneMoreCondition then Convert(X, Y);
Dest := Rect(0,0,Image1.Width,Image1.
Source := Rect(0,0,Image1.Width,Image1.
Form1.Canvas.CopyRect(Dest,
// ЭТУ карту можно положить в ЭТУ ячейку ?
BRes1 := (Pack[Y,X].Card = 0) AND OneMoreCondition;
if X > 1 then //Два свободных поля не идут подряд?
BRes1 := BRes1 AND (Pack[Y,X-1].Card <> 0);
if X = 1 then //Если первая ячейка
BRes1 := BRes1 AND (Pack[SPY,SPX].Card = 1) //Перетаск. карта шестерка ?(SPX,SPY Начало старта)
else //Масть и старшинство?
BRes1 := BRes1 AND ((Pack[SPY,SPX].Card - Pack[Y,X-1].Card = 1)
if BRes1 then //Да! Кладем.
begin
Form1.Canvas.Draw(_Pos[Y,X].X,
UnX1 := X; UnY1 := Y; UnX2 := SPX; UnY2 := SPY;
Pack[Y,X].Suit := Pack[SPY,SPX].Suit;
Pack[Y,X].Card := Pack[SPY,SPX].Card;
Pack[Y,X].BPos := Pack[SPY,SPX].BPos;
Pack[SPY,SPX].Card:=0;
Undo1.Enabled := TRUE;
CheckStatus;
SB1.Panels[2].Text := 'Осталось
карт: ' + IntToStr(32 - (Lines[1]+Lines[2]+Lines[3]+
if Lines[1]+Lines[2]+Lines[3]+
begin
for Y := 1 to 4 do
begin
Pack[Y,9].Suit := Pack[Y,1].Suit;
Pack[Y,9].Card := 9;
Pack[Y,9].BPos := (Y-1)*9+8;
Bitmap := TBitmap.Create;
Bitmap.LoadFromResourceName(
Form1.Canvas.Draw(_Pos[Y,9].X,
Bitmap.Free;
Delay(2);
end;
Deal.Enabled := FALSE;
Vr1 := MessageBox(Application.Handle, PChar('Вы выйграли! Попробуем ещё раз?'),'Пасьянс', MB_YESNO+MB_ICONINFORMATION);
if Vr1 = mrYes then NewGame1.Click else Close;
end;
end else
begin
if (_Pos[SPY,SPX].X < 20) OR
(_Pos[SPY,SPX].X > 651) OR
(_Pos[SPY,SPX].Y < 20) OR
(_Pos[SPY,SPX].Y > 401)
then Exit;
if Pack[SPY,SPX].Card <>
0 then Form1.Canvas.Draw(_Pos[SPY,
end;
if Drag then CBitmap.Free;
Drag:=FALSE;
Form1.Paint;
end;
procedure TForm1.FormPaint(Sender: TObject);
var
Bitmap1 : TBitmap;
X,Y : Byte;
ShiftX,
ShiftY : Byte;
begin
Form1.ClientHeight := 440;
Form1.ClientWidth := 670;
ShiftY := 20;
if GetSystemMetrics(SM_
then ShiftX := 7
else ShiftX := 20;
for Y:=1 to 4 do // Изменяем коор. с учётом поправки
for X:=1 to 9 do
begin
_Pos[Y,X].X := _PosC[Y,X].X + ShiftX;
_Pos[Y,X].Y := _PosC[Y,X].Y + ShiftY;
end;
for Y:=1 to 4 do
for X:=1 to 9 do
if Pack[Y,X].Card=0 then
with Form1.Canvas do
begin //Затираем карту фоном
Pen.Width := 1;
Pen.Color := $00808040;
Brush.Color := clGreen;
RoundRect(_Pos[Y,X].X,_Pos[Y,
end else
begin
Bitmap1 := TBitmap.Create;
Bitmap1.LoadFromResourceName(
Form1.Canvas.Draw(_Pos[Y,X].X,
Bitmap1.Free;
end;
end;
procedure CheckStatus;
var
X,Y:Byte;
Suit:Suits;
begin
for Y:=1 to 4 do
begin
Lines[Y]:=0;
if Pack[Y,1].Card = 1 then
begin
Suit:=Pack[Y,1].Suit;
Lines[Y]:=1;
X:=2;
while ((X<=9) and (Pack[Y,X].Card=X) and (Pack[Y,X].Suit=Suit)) do
begin
Lines[Y]:=X;
Inc(X);
end; { do }
end; { if }
end; { for }
end; { End Of CheckStatus }
procedure TForm1.DealClick(Sender: TObject);
Var
Cnt, X, Y, N : Byte;
I : Integer;
Card2 : CPack;
ButtonSelected : Word;
TCards2 : array[0..32] of CPack;
begin
CheckStatus;
Inc(Attempt);
if (Lines[1]+Lines[2]+Lines[3]+
begin
//Beep;
Dec(Attempt);
Exit;
end;
case Attempt of
2 : SB1.Panels[1].Text := 'Вторая попытка';
3 : SB1.Panels[1].Text := 'Последняя попытка';
4..5 : SB1.Panels[1].Text := '';
end;
if Attempt <= 3 then
begin
if Attempt = 3 then SB1.Panels[0].Text := 'Нажмите F2 чтобы начать новую игру';
Undo1.Enabled := FALSE;
N := 0;
Cnt := 32; { Предпологаемое число оставшихся карт }
// Собираем карты
for Y := 1 to 4 do
begin
Dec(Cnt,Lines[Y]);
for X := Lines[Y]+1 to 9 do
if Pack[Y,X].Card<>0 then
begin
TCards2[N] := Pack[Y,X];
with Form1.Canvas do
begin //Затираем карту фоном
Pen.Width := 1;
Pen.Color := $00808040;
Brush.Color := clGreen;
RoundRect(_Pos[Y,X].X,_Pos[Y,
end;
Inc(N);
Delay(2);
end;
end;
// Тасуем колоду
Randomize;
for I:=1 to 2000 do
begin
repeat
X:=Random(Cnt);
Y:=Random(Cnt);
until X<>Y;
Card2:=TCards2[X];
TCards2[X]:=TCards2[Y];
TCards2[Y]:=Card2;
end;
// Сдаем
for Y:=1 to 4 do Inc(Lines[Y]);
N:=0;
for Y:=1 to 4 do
for X:=Lines[Y] to 9 do
if X = Lines[Y] then Pack[Y,X].Card:=0
else begin
CBitmap := TBitmap.Create;
Pack[Y,X]:=TCards2[N];
CBitmap.LoadFromResourceName(
Form1.Canvas.Draw(_Pos[Y,X].X,
CBitmap.Free;
Inc(N);
Delay(2);
end;
end
else begin
Deal.Enabled := FALSE;
ButtonSelected := MessageBox(Application.Handle, PChar('Попытки исчерпаны. Попробуем ещё раз?'),'Пасьянс', MB_YESNO+MB_ICONINFORMATION);
if ButtonSelected = mrYes then NewGame1.Click else Close;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Deal.Enabled := FALSE;
SB1.Panels[0].Text := 'Нажмите F2 чтобы начать новую игру';
Attempt := 0;
with Form1.Canvas do
begin
Pen.Width := 1;
Pen.Color := $00808040;
Brush.Color := clGreen;
end;
end;
procedure TForm1.About1Click(Sender: TObject);
var
S : PChar;
begin
S := 'Пасьянс "Четыре линии"' + #13 +
'Версия 1.0 Beta (20.12.2011)' + #13 + #13 +
'Copyright © 2011 by Alfa';
MessageBox(Application.Handle, S, 'О программе', MB_ICONINFORMATION);
end;
procedure TForm1.Undo1Click(Sender: TObject);
var
Bitmap : TBitmap;
X, Y : Byte;
begin
Pack[UnY2,UnX2] := Pack[UnY1,UnX1];
Pack[UnY1,UnX1].Card := 0;
Bitmap := TBitmap.Create;
Bitmap.LoadFromResourceName(
Form1.Canvas.Draw(_Pos[UnY2,
Bitmap.Free;
Form1.Canvas.RoundRect(_Pos[
X := UnX2; Y := UnY2;
UnX2 := UnX1; UnY2 := UnY1;
UnX1 := X; UnY1 := Y;
end;
procedure TForm1.Contens1Click(Sender: TObject);
begin
Application.HelpFile := 'Solitaire4L.HLP';
Application.HelpCommand(HELP_
end;
end.
2