Автор работы: Пользователь скрыл имя, 15 Февраля 2013 в 18:25, курсовая работа
Соңғы кезде адамдардың программалауға қызуғышылығының артқанының байқаймыз. Бұл құбылыс ақпараттық-коммуникативтік технологиялардың адамның күнделікті өміріне енуіне байланысты. Егер кез-келген бір адам копьютермен жұмыс істесе, онда белгілі бір уақыттан кейін сол адамда программалауға қызуғышылық туындайды.
Қазіргі кезде дербес компьютерлердің басым көпшілігіне Windows операциялық жүйелері орнатылған, сондықтан программалауға ұмтылған адам жоғарыда көрсетілген операциялық жүйелерінде жұмыс істейтін программаларды құруға тырысады.
Кіріспе...........................................................................................................................3
1. Программаның нұсқалы және техникалық өңделуі.............................................4
1.1. Техникалық жабдықтаманың және ақпараттық қамтамасыздандыруды таңдау.........................................................................5
1.2. Алгоритмдердің сипаттамасы...................................................................9
2. Жобаны өңдеу..........................................................................................................7
2.1. Программаның жазылуы, спецификациясы............................................6
2.2.Программаның мәтіні..................................................................................7
2.3. Программаны тестілеу...............................................................................9
Қорытынды...................................................................................................................9
Пайдаланылған әдебиеттер тізімі..............................................................................0
TForm1 = Class(TForm)
Image1: TImage;
GroupBox1: TGroupBox;
PechkaImage: TImage;
Label1: TLabel;
PechkaLabel: TLabel;
TuraLabel: TLabel;
Label3: TLabel;
TuraImage: TImage;
Label2: TLabel;
HorseImage: TImage;
HorseLabel: TLabel;
Label4: TLabel;
OficerImage: TImage;
OficerLabel: TLabel;
Label5: TLabel;
FersImage: TImage;
FersLabel: TLabel;
Label6: TLabel;
KingImage: TImage;
KingLabel: TLabel;
TabSet1: TTabSet;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
Shape1: TShape;
Label7: TLabel;
Label8: TLabel;
Shape2: TShape;
Shape3: TShape;
Label9: TLabel;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
WKingMat: TLabel;
BKingMat: TLabel;
Procedure FormCreate(Sender: TObject);
Procedure TabSet1Change(Sender: TObject; NewTab: Integer; Var AllowChange: Boolean);
Procedure Image1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; Var Accept: Boolean);
Procedure GroupBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; Var Accept: Boolean);
Procedure PechkaImageEndDrag(Sender, Target: TObject; X, Y: Integer);
Procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Procedure Image1EndDrag(Sender, Target: TObject; X, Y: Integer);
Procedure N2Click(Sender: TObject);
Procedure N4Click(Sender: TObject);
Procedure N3Click(Sender: TObject);
Private
{ Private declarations }
Pole: Tbitmap; // болашақ ойын алаңы;
Figura: Array[0..1, 1..6] Of TBitmap; {фигураларға арналған массив
0 - ақ 1 - қара
1 - пешка 2 - тура/піл
3 - ат 4 - офицер
5 - ферзь 6 - король}
Figura_count: Array[0..1, 1..6] Of byte; { орналастырылмаған фигуралардың санын сақтайтын массив }
fPole_date: Array[0..7, 0..7] Of byte; {Орналастырылған фигураларға арналған
1 - Ақ пешка 8 - Қара пешка
2 - Ақ тура 9 - - Қара тура
3 - Ақ ат 10 - Қара ат
4 - Ақ офицер 11 - Қара офицер
5 - Ақ ферзь 12 - Қара ферзь
6 - Ақ король 13 - Қара король}
KletkaW, KletkaB: Tbitmap; // Ақ және қара торлар
BkPosX, BkPosY: byte; { Фигуранын бұрыңғы координаттары. Фигураның орнын қолдан ауыстыру үшін керек}
WhiteX, WhiteY, BlackX, BlackY: byte; // Ақ және қара корольдін орындары
Procedure DrawFigure(x, y: byte; Figura: Tbitmap); // Бір фигураны кескіндеу
Procedure RefreshPole; // Аланнын суретін жанарту
Procedure UpdateFigereCount(K: integer = -1); //
Орналастырылған фигуралар
Procedure ClearPole; // Аланды тазарту
Function PechkaDeadKing(x, y: smallint): boolean; // Пешка корольді өлтіре ме
Function HorseDeadKing(x, y: smallint): boolean; // Ат корольді өлтіре ме
Function TuraDeadKing(x, y: smallint): boolean; // Тура корольді өлтіре ме
Function OficerDeadKing(x, y: smallint): boolean; // Офицер корольді өлтіре ме
Function FersDeadKing(x, y: smallint): boolean; // Ферзь корольді өлтіре ме
Procedure AnalisPosition(Var White, Black: boolean; Colored: boolean = true); // Шахтардын анализы
Procedure SelectCell(x, y: integer; color: Tcolor = clred); // торды рамкамен ерекшелеу
Public
Procedure ChaXAnalis; // шахматтық позициянын толық анализы
{ Public declarations }
End;
Var
Form1: TForm1;
Implementation
Const
FiguraFileName: Array[1..6] Of String[6] =
('Пешка', 'Тура', 'Конь', 'Офицер', 'Ферзь', 'Король');
BorWKing: Array[boolean] Of byte = (6, 13);
{$R *.dfm}
Procedure TForm1.DrawFigure(x, y: byte; Figura: Tbitmap);
// x, y координаттары бойынша фигураны салады
Var a, b: integer;
Begin
a := (KletkaW.Width - Figura.Width) Div 2;
b := (KletkaW.Height - Figura.Height) Div 2;
Image1.Canvas.Draw(x * (KletkaW.Width + 1) + 1 + a, y * (KletkaW.Width + 1) + 1 + b, Figura)
End;
Procedure TForm1.FormCreate(Sender: TObject);
Var x, y: integer;
temp: boolean; // TabSet1Change шақыру үшін қолданылатын уақытша шама
Begin
KletkaW := Tbitmap.Create;
KletkaB := Tbitmap.Create;
KletkaW.LoadFromFile('КлеткаБ.
KletkaB.LoadFromFile('КлеткаЧ.
For x := 0 To 1 Do
For y := 1 To 6 Do
Begin
Figura[x, y] := Tbitmap.create;
Figura[x, y].Transparent := true;
Figura[x, y].TransparentColor := clred;
If x = 0 Then
Figura[x, y].LoadFromFile(
Figura[x, y].LoadFromFile(
End;
PechkaImage.Picture.
Pole := Tbitmap.Create;
Pole.Width := KletkaW.Width * 8 + 9;
Pole.Height := KletkaW.Height * 8 + 9;
Image1.Picture.Bitmap := Pole;
Image1.Width := Pole.Width;
Image1.Height := Pole.Height;
ClearPole;
TabSet1Change(Sender, 0, Temp);
End;
Procedure TForm1.TabSet1Change(Sender: TObject; NewTab: Integer; Var AllowChange: Boolean);
// Оң жақтағы суреттерді жаңартады
Begin
PechkaImage.Picture.Bitmap := Figura[NewTab, 1];
TuraImage.Picture.Bitmap := Figura[NewTab, 2];
HorseImage.Picture.Bitmap := Figura[NewTab, 3];
OficerImage.Picture.Bitmap := Figura[NewTab, 4];
FersImage.Picture.Bitmap := Figura[NewTab, 5];
KingImage.Picture.Bitmap := Figura[NewTab, 6];
UpdateFigereCount(NewTab);
End;
Procedure TForm1.UpdateFigereCount(K: integer = -1);
Var Index: integer;
Begin
If k = -1 Then index := TabSet1.TabIndex Else index := k;
PechkaLabel.Caption := ' - ' + inttostr(Figura_count[Index, 1]);
If Figura_count[Index, 1] = 0 Then PechkaImage.DragMode := dmManual Else
PechkaImage.DragMode := dmAutomatic;
TuraLabel.Caption := ' - ' + inttostr(Figura_count[Index, 2]);
If Figura_count[Index, 2] = 0 Then TuraImage.DragMode := dmManual Else TuraImage.DragMode := dmAutomatic;
HorseLabel.Caption := ' - ' + inttostr(Figura_count[Index, 3]);
If Figura_count[Index, 3] = 0 Then HorseImage.DragMode := dmManual Else HorseImage.DragMode := dmAutomatic;
OficerLabel.Caption := ' - ' + inttostr(Figura_count[Index, 4]);
If Figura_count[Index, 4] = 0 Then OficerImage.DragMode := dmManual Else
OficerImage.DragMode := dmAutomatic;
FersLabel.Caption := ' - ' + inttostr(Figura_count[Index, 5]);
If Figura_count[Index, 5] = 0 Then FersImage.DragMode := dmManual Else FersImage.DragMode := dmAutomatic;
KingLabel.Caption := ' - ' + inttostr(Figura_count[Index, 6]);
If Figura_count[Index, 6] = 0 Then KingImage.DragMode := dmManual Else KingImage.DragMode := dmAutomatic;
End;
Procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; Var Accept: Boolean);
Begin
x := (x - 1) Div (KletkaW.Width + 1);
y := (y - 1) Div (KletkaW.Height + 1);
If fPole_date[x, y] = 0 Then Accept := true Else Accept := false;
End;
Procedure TForm1.GroupBox1DragOver(
State: TDragState; Var Accept: Boolean);
Begin
If Source = Image1 Then Accept := true Else Accept := false;
End;
Procedure TForm1.PechkaImageEndDrag(
Var FigIndex: byte;
Begin
If Target <> Image1 Then exit;
x := (x - 1) Div (KletkaW.Width + 1);
y := (y - 1) Div (KletkaW.Height + 1);
If sender = PechkaImage Then FigIndex := 1 Else
If sender = TuraImage Then FigIndex := 2 Else
If sender = HorseImage Then FigIndex := 3 Else
If sender = OficerImage Then FigIndex := 4 Else
If sender = FersImage Then FigIndex := 5 Else
If sender = KingImage Then
Begin
FigIndex := 6;
If TabSet1.TabIndex = 0 Then Begin WhiteX := x; WhiteY := y; End Else
Begin BlackX := x; BlackY := y;End;
End Else exit;
fPole_date[x, y] := TabSet1.TabIndex * 7 + FigIndex;
dec(Figura_count[TabSet1.
UpdateFigereCount;
RefreshPole;
End;
Procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Begin
x := (x - 1) Div (KletkaW.Width + 1);
y := (y - 1) Div (KletkaW.Height + 1);
If fPole_date[x, y] > 0 Then
Begin
Image1.DragMode := dmAutomatic;
BkPosX := x; BkPosY := y;
image1.BeginDrag(true);
End Else image1.EndDrag(false);
End;
Procedure TForm1.Image1EndDrag(Sender, Target: TObject; X, Y: Integer);
Var k: byte;
Begin
Image1.DragMode := dmManual;
k := fPole_date[BkPosX, BkPosY];
If Target = Image1 Then
Begin
x := (x - 1) Div (KletkaW.Width + 1);
y := (y - 1) Div (KletkaW.Height + 1);
If k = 6 Then Begin WhiteX := x; WhiteY := y; End
Else If k = 13 Then Begin BlackX := x; BlackY := y; End;
fPole_date[BkPosX, BkPosY] := 0;
fPole_date[x, Y] := k;
End Else
If target<>NIL Then
Begin
fPole_date[BkPosX, BkPosY] := 0;
inc(Figura_count[k Div 7, k - (k Div 7) * 7]);
UpdateFigereCount;
End;
RefreshPole;
End;
Procedure TForm1.RefreshPole;
Var x, y: byte;
Begin
Image1.Canvas.Brush.Color := clblack;
Image1.Canvas.FillRect(Image1.
With Image1.Canvas Do
For x := 0 To 7 Do
For y := 0 To 7 Do
Begin // Аланды торлармен толтыру
If (x * 7 + y) Mod 2 <> 0 Then
draw(x * (KletkaW.Width + 1) + 1, y * (KletkaW.Height + 1) + 1, KletkaW) Else
draw(x * (KletkaB.Width + 1) + 1, y * (KletkaB.Height + 1) + 1, KletkaB);
If fPole_date[x, y] > 0 Then DrawFigure(x, y, Figura[fPole_date[x, y] Div 7,
fPole_date[x, y] - (fPole_date[x, y] Div 7) * 7]);
End;
ChaXAnalis;
End;
Procedure TForm1.N2Click(Sender: TObject);
Var x, y, CurrentInstal: integer;
NoFigure, a, b,
InstalCount: byte;
Begin
Randomize;
InstalCount := 0; // Орналастырылған фигуралар саны
NoFigure := Random(23); // Орналастырылмайтын фигуралар саны
ClearPole; // Алаңды тазарту
Repeat
Repeat
If Figura_count[0, 6] > 0 Then
Begin
a := 0; b := 6;
End Else
If Figura_count[1, 6] > 0 Then
Begin
a := 1; b := 6;
End Else
Begin
a := Random(29) Div 15; // кездейсоқ сан: 0 ақ үшін, 1 қара ұшін
b := Random(16) Div 3 + 1; // Фигураның типін тандау үшін 1-ден 6-ға дейінгі кездейсоқ сан
End;
CurrentInstal := Figura_count[a, b];
If Figura_count[a, b] > 0 Then dec(Figura_count[a, b]) Else CurrentInstal := -1;
Until CurrentInstal > 0;
Repeat
x := Random(8); // Торды тандау
y := Random(8); // Торды тандау
Until fPole_date[x, y] = 0;
DrawFigure(x, y, Figura[a, b]);
fPole_date[x, y] := a * 7 + b;
If b = 6 Then
Begin
If a = 0 Then
Begin
WhiteX := x; WhiteY := y;
End Else
Begin
BlackX := x; BlackY := y;
End;
End;
inc(InstalCount);
Until InstalCount >= 32 - NoFigure;
UpdateFigereCount;
ChaXAnalis;
End;
Procedure TForm1.ClearPole;
Var x, y: byte;
Const
FiguraCount: Array[1..6] Of byte = (8, 2, 2, 2, 1, 1);
Begin
For x := 0 To 1 Do
For y := 1 To 6 Do // Орналастырылған фигура жоқ
Figura_count[x, y] := Figuracount[y];
Image1.Canvas.Brush.Color := clblack;
Image1.Canvas.FillRect(Image1.
With Image1.Canvas Do
For x := 0 To 7 Do
For y := 0 To 7 Do
Begin // Аланды торлармен толтыру
fPole_date[x, y] := 0;
If (x * 7 + y) Mod 2 <> 0 Then
draw(x * (KletkaW.Width + 1) + 1, y * (KletkaW.Height + 1) + 1, KletkaW) Else
draw(x * (KletkaB.Width + 1) + 1, y * (KletkaB.Height + 1) + 1, KletkaB);
End;
WKingMat.Caption:=''; BKingMat.Caption:='';
End;
Procedure TForm1.N4Click(Sender: TObject);
Begin
ClearPole;
UpdateFigereCount;
End;
Function TForm1.PechkaDeadKing(x, y: smallint): boolean;
Var WorB: boolean; // Ақ немесе қара
Begin
result := false;
WorB := Odd(fPole_date[x, y] Div 7);
If (Not WorB) And (y > 0) Then // Ақ үстіде
Begin
If ((x > 0) And (fPole_date[x - 1, y - 1] = 13)) Or ((x < 7) And (fPole_date[x + 1, y - 1] = 13)) Then
result := true;
End Else
If (y < 7) And (WorB) Then // Қара астыда
Begin
If ((x > 0) And (fPole_date[x - 1, y + 1] = 6)) Or ((x < 7) And (fPole_date[x + 1, y + 1] = 6)) Then
result := true;
End;
End;
Function TForm1.HorseDeadKing(x, y: smallint): boolean;
Var WorB: boolean; // Ақ немесе қара
Begin
result := false;
WorB := Not Odd(fPole_date[x, y] Div 7);
If (x < 6) Then
Begin
If ((y > 0) And (fPole_date[x + 2, y - 1] = BorWKing[WorB])) Or ((y < 7) And
(fPole_date[x + 2, y + 1] = BorWKing[WorB])) Then result := true;
End;
If (x > 1) And (Not result) Then
Begin
If ((y > 0) And (fPole_date[x - 2, y - 1] = BorWKing[WorB])) Or ((y < 7) And
(fPole_date[x - 2, y + 1] = BorWKing[WorB])) Then result := true;
End;