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

Автор работы: Пользователь скрыл имя, 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 Кб (Скачать документ)

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('КлеткаБ.bmp');

KletkaB.LoadFromFile('КлеткаЧ.bmp');

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(FiguraFileName[y] + 'Б.bmp') Else

Figura[x, y].LoadFromFile(FiguraFileName[y] + 'Ч.bmp');

End;

PechkaImage.Picture.LoadFromFile('ПешкаБ.bmp');

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(Sender, Source: TObject; X, Y: Integer;

State: TDragState; Var Accept: Boolean);

Begin

If Source = Image1 Then Accept := true Else Accept := false;

End;

 

Procedure TForm1.PechkaImageEndDrag(Sender, Target: TObject; X, Y: Integer);

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.TabIndex, FigIndex]);

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.Canvas.ClipRect); // Алаңды қара тұспен бояу

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.Canvas.ClipRect); // Аланды қара түспен толтыру

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;

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