Borland C++ Builder proqramı vasitəsilə “Şəkil topla” 0

Bu dərsimizdə biz sizinlə BorlandC++Builder proqrammı vasitəsi ilə “ Şəkili topla “ proqrammını hazırlayacağıq. Bu proqramm sadə olsada yeni öyrənənlər üçün çox maraqlı olacaq.

C++Builder proqrammını işə salırıq. Menyu pəncərəsindən File / New Application seçirik. Yeni Form açılır. Standart komponentlər palitrasından MainMenu komponentini seçib İş Formuna daxil edin.

Şəkil

MainMenu komponenti bildiyimiz Windows proqrammlarındakı baş menyu rolunu oynayır. Belə ki, biz onun vasitəsi ilə faylların açılmasını, yaddaşa verilməsini, çap edilməsini, faylların redaktəsini və s. idarə edirik. Bu menyuya daxil olan bəzi elementlər, məsələn bunlardır:

Fayl (File) , Redaktə (Edit), Məlumat (Help), Alətlər(Tools) və s. sadalamaq olar. Bu menyu başlıqlarınında hər birinin özünə xas menyu alt başlıqları var.

İş Formuna yerləşdirdiyimiz MainMenu komponentinin üzərindən siçanın sol düyməsi vasitəsi ilə iki dəfə tıqqıldadın. İş Formunda Form1->MainMenu1 başlığı altında yeni pəncərə açılacaq.

Şəkil

Obyektlər inspektorunun Caption bölməsində “ Yeni oyun “ yazıb Enter basın. Bunda sonra Form1->MainMenu1 pəncərəsinin göy rəngli menyu başlığında və İş Formunun menyu başlığında yazdığınız “Yeni oyun”kəlməsi peyda olacaq. Xatırladıram ki, baş menyu başlığının bir alt başlığınında olduğunu bildirmək üçün “Yeni oyun ” sözünün əvvəlinə & işarəsini artıra bilərsiniz.

Şəkil

Sonra isə “Yeni oyun” menyu başlığının sağındakı boş damanı aktivləşdirin və Caption bölməsində “Parametrlər” yazın və Enter basın.

Şəkil

Sonra isə “Parametrlər” menyu başlığnı bir dəfə tıqqıldadıb bir alt menyusunun Caption bölməsində “Damalara nömrə qoy” yazın və Enter basın.

Şəkil

Daha sonra isə, “Parametrlər” menyu başlığının sağ tərəfindəki boş damanı aktivləşdirib , Caption bölməsində “Məlumat” yazıb Enter basın.

Şəkil

Artıq menyu tərtibatının sonuna gəldik. “Məlumat” menyu başlığının aşağısındakı alt menyu damasını aktivləşdirin və Caption bölməsində “Oyun haqqında” yazın və Enter basın.

Şəkil

İşlər tamamlandıqdan sonra Form1->MainMenu pəncərəsini adi qaydada x düyməsi ilə bağlayın.

Beləliklə proqrammın interfeys strukturu hazır oldu. İndi isə bu menyu elementlərinin komanda kodlarını yazaq.

İşə başlamadan öncə hazırlayacağımız proqrammı öncədən yaddaşa verək. Menyu pəncərəsindən File / Save All seçirik. Yeni pəncərə açılır və biz burada proqrammımızı saxlamaq üçün yer seçib cpp faylımızıToPicture.cpp, proyektimizi isə ToPic.bpr adlandırıb ok basırıq.

ToPicture.cpp faylını açın və aşağıda göstərilən qaydada redaktə edin:

//---------------------------------------------------------------------------</pre>
</dd><dd><code>
#include
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h" // əllə yazın.”yeni oyun haqqında” məlumat üçün Form2-nin elan edilməsi (ətraflı aşağıda)
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
#include "math.hpp" // Randomize və RandomRange-ye yol açmaq
// WxH sahəsinin ölçüləri
#define W 4
#define H 4

int wc, hc;  // damaların ölçüləri

byte pole[H][W];  // oyun sahəsi
byte ex,ey;            // boş damaların koordinatları

bool GameOver;

AnsiString fn;     // bmp faylının adı (şəkil)
TSearchRec SearchRec;  // fayl axtarışının nəticəsi
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)

// istədiyiniz  3 ədəd bmp tipli şəkili proyektinizi saxladığınız qovluğa yerləşdirin və ardıcıl olaraq şəkilləri pic-1, pic-2, pic-3 adlandırın.

{
pic = new Graphics::TBitmap();
}
//---------------------------------------------------------------------------
// “Yeni oyun” menyu başlığını siçanın sol düymməsi ilə iki dəfə //tıqqıldadın. Aşağıdakı kod bloku açılacaq

void __fastcall TForm1::N1Click(TObject *Sender)
{
NewGame();
}
//---------------------------------------------------------------------------
// Parametrlər/ “damalara nömrə qoy” menyu alt başlığını siçanın sol //düymməsi ilə iki dəfə tıqqıldadın. Aşağıdakı kod bloku açılacaq

void __fastcall TForm1::N6Click(TObject *Sender)
{
N6->Checked = ! N6->Checked;
ShowPole();
}
//---------------------------------------------------------------------------
// İş formunun obyektlər inspektorunun events bölməsində    //FormPaint elementini siçanın sol düymməsi ilə iki dəfə //tıqqıldadın, aşağıdakı kod bloku açılacaq

void __fastcall TForm1::FormPaint(TObject *Sender)
{
ShowPole();
}
//---------------------------------------------------------------------------
// İş formunun obyektlər inspektorunun events bölməsində    //FormShow elementini siçanın sol düymməsi ilə iki dəfə //tıqqıldadın, aşağıdakı kod bloku açılacaq

void __fastcall TForm1::FormShow(TObject *Sender)
{
NewGame();
}
//---------------------------------------------------------------------------
// İş formunun obyektlər inspektorunun events bölməsində    //FormMouseDown elementini siçanın sol düymməsi ilə iki dəfə //tıqqıldadın, aşağıdakı kod bloku açılacaq

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
int cx,cy;  // damaların koordinatları

cx = X / wc;
cy = Y / hc;

Move(cx,cy);   // seçilmiş damanı qonşu boş damaya yerləşdirir
}

bool Finish();  // fişlərin düzgün yerləşməsini yoxlayır

//---------------------------------------------------------------------------
// bu kod bloku əllə yazılır
// yeni oyun

void __fastcall TForm1::NewGame()
{
static int Tag = 0;

//  şəkil faylının yüklənməsi

if (( ParamCount() == 0 ) && (Tag == 0 )) Tag = 1;

switch ( Tag )
{
case 0 :  // faylın adı – komanda sətrindən
fn = ParamStr(1);
Tag = 1;
break;

case 1:  //  ardıcıl olaraq birinci bmp fayl götürülür

{ FindFirst("*.bmp",faAnyFile,SearchRec);
fn = SearchRec.Name;
Tag = 2;
}
break;

case 2:  // növbəti bmp fayl götürülür
{
if ( FindNext(SearchRec) != 0)
FindFirst("*.bmp",faAnyFile,SearchRec);
fn = SearchRec.Name;
}
break;
}

// şəkil yüklənir
try {
pic->LoadFromFile(fn);
}
catch (EFOpenError &e)
{
MessageDlg("Şəkil üçün düzgün fayl seçilməyib",
mtWarning, TMsgDlgButtons()<< mbOK<<mbHelp,0); return; } // damaların ölçüləri təyin edilir wc = pic->Width / W;
hc = pic->Height / H;

// formanın ölçüsü qurulur
ClientWidth = wc * W;
ClientHeight = hc * H;

// fişlərin ilkin (düzgün) vəziyyəti
int k = 1;
for (int i = 0; i < H; i++)
for (int j = 0; j < W; j++)
pole[i][j] = k++;

GameOver = false;
Mixer();  // fişlər qarışdırılır
ShowPole();  // oyun sahəsi əks etdirilir
}

//----------------------------------------------------------------------------
// bu kod bloku əllə yazılır

void __fastcall TForm1::Mixer()
{
int x1,y1;   // boş dama
int x2,y2;   // bunu boş damaya yerləşdirir
int d;         // boş dama nibətində istiqamət

Randomize();

x1 = 3; y1 = 3;    // stp massivinin təsviri
for ( int i = 0; i < 150; i++)  // yerdəyişmənin sayı
{
do {
x2 = x1;
y2 = y1;

//  boş damaya yanaşan , fiş götürülür və boş damaya yerləşdirilir

switch ( d ) {
case 1: x2--; break;
case 2: x2++; break;
case 3: y2--; break;
case 4: y2++; break;
}
} while ((x2 < 0) || (x2 >= W) || (y2 < 0) || (y2 >= H));

// burada boş damaya yerləşdiriləcək fiş təyin edilir
pole[y1][x1]  =  pole[y2][x2];
pole[y2][x2]  =  16;
x1 = x2;
y1 = y2;

};
// boş damaların koordinatlarını xatırlanır

ex =  x1;
ey =  y1;
}

//----------------------------------------------------------------------------
// bu kod bloku əllə yazılır

void __fastcall TForm1::ShowPole()
{
TRect src, dst;  // şəkildən fraqment və onun sahəsi
// onun forma üzərində əks olunması
int sx,sy;

for (int i = 0; i < H; i++)
for (int j = 0; j < W; j++) { // şəkilin fraqment nömrəsini dəyişirik // sol koordinatlara //  mənbənin yuxarı bucağına sx = ((pole[i][j]-1) % W) * wc; sy = ((pole[i][j]-1) / H) * hc; src = Bounds(sx,sy,wc,hc); dst = Bounds(j*wc,i*hc,wc,hc); if ((  pole[i][j] != 16 ) || GameOver ) // şəkildən fraqment Canvas->CopyRect(dst,pic->Canvas,src);
else
{
// boş dama
Canvas->Brush->Style = bsSolid;
Canvas->Brush->Color = clBtnFace;
Canvas->Rectangle(dst);
}
}
if ( N6->Checked )
{
// fişin nömrəsini daxil edir
Canvas->Brush->Style = bsClear;
for (int i = 0; i < H; i++)
for (int j = 0; j < W; j++) Canvas->TextOutA(wc*j,hc*i, IntToStr(pole[i][j]));
}
}
//----------------------------------------------------------------------------
// bu kod bloku əllə yazılır
// siçanın oxu vasitəsi ilə fişi damadan , boş damaya aparır

void __fastcall TForm1::Move(int cx, int cy)
{
// fişi (cx,cy) –dən (ex,ey)-ə aparır
if  ( ( abs(cx - ex) == 1  &&  cy-ey == 0  ) ||
( abs(cy - ey) == 1  &&  cx-ex == 0  ) )
{

pole[ey][ex] = pole[cy][cx];
pole[cy][cx] = 16;
ex = cx;
ey = cy;

ShowPole();
if ( Finish () )
{
GameOver = true;
ShowPole();
int r = MessageDlg ("Oyun tamamlandı!""Bir daha (Başqa şəkil yüklənsinmi)?",
mtInformation, TMsgDlgButtons() << mbYes << mbNo, 0); if ( r == mrNo ) Form1->Close();
else
{
NewGame();
ShowPole();
}
}
}
}

// lazımi qaydada damaların (şəkil fraqmentlərinin) yerləşməsi yoxlanılır
bool Finish()
{
bool result;
int row, col;
int k = 1;

result  =  true;  // fişlər lazımi qaydadadır
for (row = 0; row < H; row++)
{
for (col = 0; col < W; col++) if ( pole[row][col] == k ) k++; else { result = false; break; } if ( ! result ) break; } return (result); }; //---------------------------------------------------------------------------- // Məlumat / “ Oyun haqqında “ menyu alt başlığını iki dəfə tıqqıldadın.Aşağıdakı kod bloku açılacaq void __fastcall TForm1::N5Click(TObject *Sender) { Form2->ShowModal();
}
//---------------------------------------------------------------------------

ToPicture.h faylının görünüşü :

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include
#include
#include
#include #include //---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:       // IDE-managed Components
TMainMenu *MainMenu1;
TMenuItem *N1;
TMenuItem *N6;
TMenuItem *N4;
TMenuItem *N5;
void __fastcall NewGame();
void __fastcall Mixer();
void __fastcall ShowPole();
void __fastcall Move(int x, int y);
void __fastcall N1Click(TObject *Sender);
void __fastcall N6Click(TObject *Sender);
void __fastcall FormPaint(TObject *Sender);
void __fastcall FormShow(TObject *Sender);
void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y);
void __fastcall N5Click(TObject *Sender);
private:      // User declarations
Graphics::TBitmap *pic; // əllə yazın

public:                 // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------

#endif
</code></dd><dd>

Əlavə olunmuş məlumat pəncərəsinin (Form2) cpp faylı
Menyu alətlər panelindən yeni Form seçin və proyektə əlavə edin.Sonra isə File/Save As edərək yaddaşa verin.Sonra isə bu form üzərinə bir ədəd BitBtn, bir ədəd Image və iki ədəd StaticText komponenti əlavə edin və istədiyiniz kimi redaktə edin.

Şəkil

//---------------------------------------------------------------------------

#include
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{

}
//---------------------------------------------------------------------------
Əlavə olunmuş məlumat pəncərəsinin (Form 2) H faylı

//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published:       // IDE-managed Components
TBitBtn *BitBtn1;
TImage *Image1;
TStaticText *StaticText1;
TStaticText *StaticText2;
private:      // User declarations
public:                 // User declarations
__fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif

Hazır proqrammın görünüşü.Bu oyunda şəkil damaları qarışdırılır və əllə yığılır. Oyun bitdikdən sonra sənə yeni şəkilli oyun təklif olunur.

Şəkil

Orfoqrafik Səhv tapdınız? Səhv yazılmış sözü seçin və Ctrl + Enter düymələrini basın. Dilimizi daha düzgün yazaq.
Orphus system
loading...

Digər yazılar

Şərh forması