Автор работы: Пользователь скрыл имя, 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
If (Y > 1) And (Not result) Then
Begin
If ((X > 0) And (fPole_date[x - 1, y - 2] = BorWKing[WorB])) Or ((x < 7) And
(fPole_date[x + 1, y - 2] = BorWKing[WorB])) Then result := true;
End;
If (Y < 6) And (Not result) Then
Begin
If ((X > 0) And (fPole_date[x - 1, y + 2] = BorWKing[WorB])) Or ((x < 7) And
(fPole_date[x + 1, y + 2] = BorWKing[WorB])) Then result := true;
End;
End;
Function TForm1.TuraDeadKing(x, y: smallint): boolean;
Var WorB: boolean; // Ақ немесе қара
a: smallint;
Begin
result := false;
WorB := Not Odd(fPole_date[x, y] Div 7);
If x < 7 Then
For a := x + 1 To 7 Do
If fPole_date[a, y] = BorWKing[WorB] Then
Begin result := true; break; End Else
If fPole_date[a, y] <> 0 Then break;
If (Not result) And (x > 0) Then
For a := x - 1 DownTo 0 Do If fPole_date[a, y] = BorWKing[WorB] Then
Begin result := true; break; End Else
If fPole_date[a, y] <> 0 Then break;
If (Not result) And (y < 7) Then
For a := y + 1 To 7 Do If fPole_date[x, a] = BorWKing[WorB] Then
Begin result := true; break; End Else
If fPole_date[x, a] <> 0 Then break;
If (Not result) And (y > 0) Then
For a := y - 1 DownTo 0 Do If fPole_date[x, a] = BorWKing[WorB] Then
Begin result := true; break; End Else
If fPole_date[x, a] <> 0 Then break;
End;
Function TForm1.OficerDeadKing(x, y: smallint): boolean;
Var WorB: boolean; // ақ немесе қара
a, b: smallint; // уақытша айнымалылар
Begin
result := false;
WorB := Not Odd(fPole_date[x, y] Div 7);
a := x + 1; b := y + 1;
If (x < 7) And (y < 7) Then
While (a <= 7) And (b <= 7) Do
Begin
If fPole_date[a, b] = BorWKing[WorB] Then
Begin result := true; break; End Else
If fPole_date[a, b] <> 0 Then break;
inc(a); inc(b);
End;
a := x - 1; b := y - 1;
If (Not result) And (x > 0) And (y > 0) Then
While (a >= 0) And (b >= 0) Do
Begin
If fPole_date[a, b] = BorWKing[WorB] Then
Begin result := true; break; End Else
If fPole_date[a, b] <> 0 Then break;
dec(a); Dec(b);
End;
a := x - 1; b := y + 1;
If (Not result) And (x > 0) And (y < 7) Then
While (a >= 0) And (b <= 7) Do
Begin
If fPole_date[a, b] = BorWKing[WorB] Then
Begin result := true; break; End Else
If fPole_date[a, b] <> 0 Then break;
dec(a); inc(b);
End;
a := x + 1; b := y - 1;
If (Not result) And (x < 7) And (y > 0) Then
While (a <= 7) And (b >= 0) Do
Begin
If fPole_date[a, b] = BorWKing[WorB] Then
Begin result := true; break; End Else
If fPole_date[a, b] <> 0 Then break;
inc(a); Dec(b);
End;
End;
Function TForm1.FersDeadKing(x, y: smallint): boolean;
Begin
If OficerDeadKing(x, y) Or TuraDeadKing(x, y) Then result := true Else result := false;
End;
Procedure TForm1.AnalisPosition(Var White, Black: boolean; Colored: boolean = true);
Var x, y, Figure_type: byte;
c: Tcolor; // Ерекшелейтін түс
k: boolean; // Уақытша айнымалы
Begin
For y := 0 To 7 Do
For x := 0 To 7 Do
If fPole_date[x, y] > 0 Then
Begin
Figure_type := fPole_date[x, y] - (fPole_date[x, y] Div 7) * 7;
If fPole_date[x, y] Div 7 = 0 Then c := clred Else c := clblue;
k := false;
Case Figure_type Of
1: If PechkaDeadKing(x, y) Then
Begin k := true; If colored Then SelectCell(x, y, c); End;
2: If TuraDeadKing(x, y) Then
Begin k := true; If colored Then SelectCell(x, y, c); End;
3: If HorseDeadKing(x, y) Then
Begin k := true; If colored Then SelectCell(x, y, c); End;
4: If OficerDeadKing(x, y) Then
Begin k := true; If colored Then SelectCell(x, y, c); End;
5: If FersDeadKing(x, y) Then
Begin k := true; If colored Then SelectCell(x, y, c); End;
End;
If (k) And (fPole_date[x, y] Div 7 = 1) Then White := true;
If (k) And (fPole_date[x, y] Div 7 = 0) Then Black := true;
End;
End;
Procedure TForm1.SelectCell(x, y: integer; color: Tcolor);
Begin
Image1.Canvas.Brush.Style := bsclear;
Image1.Canvas.pen.Width := 2;
Image1.Canvas.pen.Color := color;
x := x * (KletkaW.Width + 1) + 2;
y := y * (KletkaW.Height + 1) + 2;
Image1.Canvas.Rectangle(x, y, x + KletkaW.Width - 1, y + KletkaW.Height - 1);
End;
Procedure TForm1.ChaXAnalis;
Var ChaxW, ChaxB: boolean;
Wmat,Bmat:boolean;
Procedure Gamp(a, b: byte; WorB: boolean);
Var Cw, CB: boolean;
Begin
If WorB Then
Begin
fPole_date[a, b] := fPole_date[WhiteX, WhiteY]; fPole_date[WhiteX, WhiteY] := 0;
End Else
Begin
fPole_date[a, b] := fPole_date[BlackX, BlackY]; fPole_date[BlackX, BlackY] := 0;
End;
AnalisPosition(Cw, CB, false);
If Not Wmat Then wmat:=(Not Cw) And (WorB);
If Not Wmat Then Bmat:=(Not Cb) And (Not WorB);
If ((Not Cw) And (WorB)) Or((Not Cb) And (Not WorB)) Then SelectCell(a, b, clLime);
If WorB Then
fPole_date[WhiteX, WhiteY] := fPole_date[a, b] Else
fPole_date[BlackX, BlackY] := fPole_date[a, b];
fPole_date[a, b] := 0;
End;
Begin
ChaxW := false; ChaxB := False;
WKingMat.Caption:=''; BKingMat.Caption:='';
AnalisPosition(ChaxW, ChaxB);
If ChaxW Then
Begin
Wmat:=false;
If (WhiteX > 0) And (WhiteY > 0) And (fPole_date[WhiteX - 1, WhiteY - 1] = 0) Then
Gamp(WhiteX - 1, WhiteY - 1, true);
If (WhiteX < 7) And (WhiteY < 7) And (fPole_date[WhiteX + 1, WhiteY + 1] = 0) Then
Gamp(WhiteX + 1, WhiteY + 1, true);
If (WhiteX < 7) And (WhiteY > 0) And (fPole_date[WhiteX + 1, WhiteY - 1] = 0) Then
Gamp(WhiteX + 1, WhiteY - 1, true);
If (WhiteX > 0) And (WhiteY < 7) And (fPole_date[WhiteX - 1, WhiteY + 1] = 0) Then
Gamp(WhiteX - 1, WhiteY + 1, true);
If (WhiteX > 0) And (fPole_date[WhiteX - 1, WhiteY] = 0) Then
Gamp(WhiteX - 1, WhiteY, true);
If (WhiteY > 0) And (fPole_date[WhiteX, WhiteY - 1] = 0) Then
Gamp(WhiteX, WhiteY - 1, true);
If (WhiteY < 7) And (fPole_date[WhiteX, WhiteY + 1] = 0) Then
Gamp(WhiteX, WhiteY + 1, true);
If (WhiteX < 7) And (fPole_date[WhiteX + 1, WhiteY] = 0) Then
Gamp(WhiteX + 1, WhiteY, true);
If Wmat Then WKingMat.Caption:='ШАХ' Else WKingMat.Caption:='МАТ';
End;
If ChaxB Then
Begin
Bmat:=false;
If (BlackX > 0) And (BlackY > 0) And (fPole_date[BlackX - 1, BlackY - 1] = 0) Then
Gamp(BlackX - 1, BlackY - 1, false);
If (BlackX < 7) And (BlackY < 7) And (fPole_date[BlackX + 1, BlackY + 1] = 0) Then
Gamp(BlackX + 1, BlackY + 1, false);
If (BlackX < 7) And (BlackY > 0) And (fPole_date[BlackX + 1, BlackY - 1] = 0) Then
Gamp(BlackX + 1, BlackY - 1, false);
If (BlackX > 0) And (BlackY < 7) And (fPole_date[BlackX - 1, BlackY + 1] = 0) Then
Gamp(BlackX - 1, BlackY + 1, false);
If (BlackX > 0) And (fPole_date[BlackX - 1, BlackY] = 0) Then
Gamp(BlackX - 1, BlackY, false);
If (BlackY > 0) And (fPole_date[BlackX, BlackY - 1] = 0) Then
Gamp(BlackX, BlackY - 1, false);
If (BlackY < 7) And (fPole_date[BlackX, BlackY + 1] = 0) Then
Gamp(BlackX, BlackY + 1, false);
If (BlackX < 7) And (fPole_date[BlackX + 1, BlackY] = 0) Then
Gamp(BlackX + 1, BlackY, false);
If Bmat Then BKingMat.Caption:='ШАХ' Else BKingMat.Caption:='МАТ';
End;
End;
Procedure TForm1.N3Click(Sender: TObject);
Begin
close; application.Terminate;
End;
End.
Procedure TForm1.FormClose(Sender: TObject; Var Action: TCloseAction);
Var x,y:byte;
Begin
For x:=0 To 1 Do
For y:=1 To 6 Do Figura[x,y].free;
KletkaW.Free;KletkaB.Free;
End;
2.3. Программаны тестілеу
Программаны тексерейік (мысал):
Ақ корольге қара ферзь қауіп төндіріп тұр (қызыл төртбұрышпен белгіленген), және қара король тек сол жақтағы торға қаша алады.
Қара корольге пешка мен офицер арқылы мат қойылып тұр.
Сурет 18. Программаны тестілеу
Қорытынды
Осы программаны құру барысында Drag & Drop технологиясынын қолданылуы басты ерекшелік болып табылады. Drag & Drop терезелер мен шартбелгілердің орнын ауыстыруға, яғни басқа орынға тасымалдауға және терезелердің ұзындығы мен енін өзгертуде қолданылады. Объектілердің тасымалдау амалы былай орындалады: сілтеме орны ауыстырылатын элементке апарылып, тышқанның сол жақ батырмасын басып, оны сол басулы күйінде ұстап тұрып, сілтемені қалаған жаңа орынға жеткізіледі, сонан соң батырма қоя береледі. Бұл технологияның қолданылуы өте ыңғайлы шешім болып табылады.
Программаны құру барысында 6 мәселе шешілді:
Программаны құру барысында келесідей айнымалылар қолданды:
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 – ақ (White) және қара (Black) торлардын суреттері.
BkPosX, BkPosY: byte –фигуранын орнын қолдан ауыстыру үшін керек бүрынғы координаттар.
WhiteX, WhiteY, BlackX, BlackY: byte – Ақ және қара позициялары.
Программа жұмыс жасағанда келесі айнымалылар қосылады: Figura_count- FiguraCount тұрақтылар массивындағы мәндермен толады( ClearPole процедурасы), Figura массивыне фигуралардын суреттері жүктеледі, аланнын өлшемі қойылады, суреттер жанартылады.
Шығу кезінде қолданылған ресурстар босатылады, атап көрсетсек: Figura және торлардын суреттері - KletkaW, KletkaB. (FormClose процедурасы)
Программа шахматтық секцияларда, студенттер мен оқушыларға және шахмат ойынымен қызығатын кез-келген адамнын Windows ОЖ-сі компьютеріне орнатыла алады.
Пайдаланылған әдебиеттер тізімі
1. Архангельский А., 100 компонентов общего назначения библиотеки Delphi 5
2.Бусленко Н.П. Моделирование сложных систем. М., 1978. 400 с.
3. Бакнел Д.,Фундаментальные алгоритмы и структуры данных в Delphi
4. Дарахлевидзе П.,Программирование в Delphi 7
5. Понамарев В., COM и ActiveX в Delphi
6. Стиввенс Р., Delphi готовые алгоритмы
7. Тейксейра C., Delphi 5. Руководство разработчика. Том 2
8. Фленов М., Программирование в Delphi глазами Хакера
9. Фленов М., Библия Delphi