Дельфи. Шахматная позиция

Автор работы: Пользователь скрыл имя, 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

Работа состоит из  1 файл

ВСЕ ДЛЯ СЕССИЙ.docx

— 771.95 Кб (Скачать документ)

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. Программаны  тестілеу

Программаны тексерейік (мысал):

    • Программаны ашамыз.
    • F2 пернесін басамыз. (18-cурет)
    • Ойын ережесі бойынша тексереміз:

Ақ корольге қара ферзь қауіп төндіріп тұр (қызыл төртбұрышпен белгіленген), және қара король тек сол жақтағы торға қаша алады.

Қара корольге пешка мен офицер арқылы мат қойылып тұр.

Сурет 18. Программаны  тестілеу

 

Қорытынды

Осы программаны құру барысында Drag & Drop технологиясынын қолданылуы басты ерекшелік болып табылады. Drag & Drop терезелер мен шартбелгілердің орнын ауыстыруға, яғни басқа орынға тасымалдауға және терезелердің ұзындығы мен енін өзгертуде қолданылады. Объектілердің тасымалдау амалы былай орындалады: сілтеме орны ауыстырылатын элементке апарылып, тышқанның сол жақ батырмасын басып, оны сол басулы күйінде ұстап тұрып, сілтемені қалаған жаңа орынға жеткізіледі, сонан соң батырма қоя береледі. Бұл технологияның қолданылуы өте ыңғайлы шешім болып табылады.

Программаны құру барысында 6 мәселе шешілді:

  1. Шахмат алаңы және фигураларды бейнелеу үшін TForm1.FormCreate(Sender: TObject) процедурасы қолданды.
  2. Корольдер үшін шахтардың анализы әрбір фигураның корольге қауіп төндіретіндігінің я төндірмейтіндігінің анықтау процедуралары арқылы жүзеге асырылды.
  3. Корольдердің мүмкін шегінулерінің анализы барлық мүмкін жүрістердің іріктеуінде негізделеді.
  4. Корольдер үшін әр фигурадан мүмкін жеңілістін анализы 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;   функциялары арқылы жүзеге асырылады.
  5. Фигуралардын алаңдағы кездейсоқ орналастырылуы Procedure TForm1.N2Click(Sender: TObject) функциясы арқылы жүзге асырылды.

Программаны құру барысында келесідей айнымалылар қолданды:

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




Информация о работе Дельфи. Шахматная позиция